Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для Teapot1488
3 / 3 / 1
Регистрация: 10.03.2013
Сообщений: 125

Не меняются значения переменных после ввода

28.11.2016, 06:25. Показов 1189. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
#include <fstream>
#include <cstdio>
#include <iostream>
#include <dos.h>
#include <Math.h>
 
using namespace std;
 
 
void set_max_size()
{
    HANDLE out_handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD maxWindow = GetLargestConsoleWindowSize(out_handle); // размер самого большого возможного консольного окна
    SMALL_RECT srctWindow = { 0, 0, maxWindow.X - 5, maxWindow.Y - 5 };
    SMALL_RECT minWindow = { 0, 0, 0, 0 };
    SetConsoleWindowInfo(out_handle, true, &minWindow);
    SetConsoleScreenBufferSize(out_handle, maxWindow);
    SetConsoleWindowInfo(out_handle, true, &srctWindow);
    cout << "max console size X = " << maxWindow.X << "; " << "max console size Y = " << maxWindow.Y <<endl;
}
 
double round(double x)
{
  return floor(x + 0.5);
}
 
int main()
{
 
    set_max_size();     // размер окна
    system("color F0"); // цвет
 
    double tn, tk, yn, h, Fe, Fem, Fr;
    int i, j, k, n;
    cout << "Differential equitation: t' = y^2*t " <<endl;
    cout << "tn, tk, yn, h = ";
    cin >> tn, tk, yn, h;
    n=ceil((tk-tn)/h)+1;
    cout << "Quantity of ierations n = ";
    cout << n << endl;
    getch();
    //Eiler method
    cout << "Eiler method" <<endl;
    for (i = 0; i < n; i++)
    {
    Fe= Fe+h*(yn*yn*tn);
    tn=tn+h;
    cout << Fe << endl;
    }
    //Eiler modified
 
    for (j = 0; j < n; j++)
    {
    Fem= Fem+(h/2)*(yn*yn*tn+(yn+h)*(yn+h)*(tn+h));
    cout << Fem << endl;
    }
 
getch();
}
Видимо я не замечаю чего-то очевидного, но у меня результат операции равен n=987 при любом значении шага.

Добавлено через 1 час 36 минут
C++
1
n=static_cast<int>((tk-tn)/h);
Если использовать явное преобразование типов, то n = 0 при любых цифрах tn, tk, h.
Или лыжи не едут или я на асфальте.
Может где-то в жизни я свернул не туда?
Есть нижний (начальный) предел tn, верхний (конечный) предел tk. Есть шаг h.
Мне нужно для табулирования функции в этих пределах знать количество итераций для цикла for.
Эта строка работала в Delphi. И всё было збс.
Delphi
1
n:=round((xk-x0)/h)+1;
Первый раз я пытался реализовать через Си-шную функцию округления к ближайшему целому числу
ceil, которая описана в заголовке math.h
т.е.:
C++
1
n=ceil((tk-tn)/h);
пытался еще
C++
1
n=floor((tk-tn)/h+0.5);
но в этом случае n = 988.
1. Изначально n объявлена как int
2. tn, tk, h это double
3. Производим действие над double и получаем результат в виде double
4. Когда мы округляем до ближайшего целого числа результат, который в виде float или double, мы получаем int (может тут я ошибаюсь).
5. Но ПОЧЕМУ это округленное значение вообще берется с потолка? Я пытался обнулить переменную - результат тот же.
Либо 987 при неявном преобразовании типов, либо 0, если юзать явное преобразование типов.
Помогите разобраться.

Добавлено через 6 минут
#НЕНАВИСТЬ_НЕНАВИСТЬ_НЕНАВИСТЬ_НЕНАВИСТЬ

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
cout << "tn=";
    cin >> tn;
    cout << "tk=";
    cin >> tk;
    cout << "yn=";
    cin >> yn;
    cout << "h=";
    cin >> h;
Заработало. В одном проекте все работало ели эти числа вводились через пробел.
В этом проекте оно заработало только если ввод с новой строки каждый раз. Магия, не иначе.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.11.2016, 06:25
Ответы с готовыми решениями:

После первого цикла значения переменных в остальных не меняются и берутся больше допустимого
Помогите понять что не так. После первого цикла значения переменных в остальных не меняются и берутся больше допустимого #include...

Не меняются местами значения переменных
Доброго времени суток. Ни в какую не хочет менять местами значения двух переменных. Часть моего кода: if (c == 'Y' || c == 'y')...

В таблице значений после отправки на печать меняются значения
Добрый день. Всю голову сломал. Есть таблица значений. Выводим её на печать. (появляется окно предварительного просмотра) = Всё...

1
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
28.11.2016, 07:29
Цитата Сообщение от Teapot1488 Посмотреть сообщение
Магия, не иначе
Цитата Сообщение от Teapot1488 Посмотреть сообщение
cin >> tn, tk, yn, h;
>> - это перегруженный оператор (функция). Его надо вызывать для каждой переменной:
C++
1
cin >> tn >> tk >> yn >> h;
А Ваш код эквивалентен
C++
1
2
3
4
cin >> tn;
 tk;
 yn;
 h;
И не забывайте читать предупреждения об ошибках, у Вас
1>d:\current\cpp\test\test3.cpp(44) : warning C4700: использована неинициализированная локальная переменная "Fe"
1>d:\current\cpp\test\test3.cpp(52) : warning C4700: использована неинициализированная локальная переменная "Fem"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.11.2016, 07:29
Помогаю со студенческими работами здесь

После выполнения поиска в списке все значения меняются местами
помогите пожалуйста я понять не могу как их сделать одинаковыми в процедуре поиска и в поле списка

Сворачивается отладчик после ввода переменных
После ввода переменных,отладчик просит &quot;нажмите кнопку&quot; и после этого сворачивается(фото),что не так,что он хочет? Условия*: ...

С помощью функций ввода – вывода на Си ввести с клавиатуры и вывести на экран значения переменных
: Составить программу, позволяющую с помощью функций ввода – вывода на Си ввести с клавиатуры и вывести на экран значения переменных....

Расчитать значения переменных y и z по заданным формулам, используя для ввода/вывода cin и cout
Расчитать значения переменных y и z по заданным формулам . Для ввода/вывод использовать объекты cin и cout. Определить разность между...

Расчитать значения переменных y и z по заданным формулам, используя для ввода/вывода cin и cout
Расчитать значения переменных y и z по заданным формулам (табл. 1). Для ввода/вывода использовать объекты cin и cout. Определить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru