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

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

28.11.2016, 06:25. Показов 1105. Ответов 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
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru