Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2013, 21:50   #1
MetallDoctor
 
Регистрация: 31.03.2013
Сообщений: 7
Восклицание Одна несложная задача

Всем доброго времени суток. Нужна помощь в достаточно простой програмке. Не могу сладить с For, как мне кажется проблема в нем. Условие задачи:


Код. Строго не судите, программирую в СИ от силы неделю:
Вложения
Тип файла: txt KOD.txt (1.0 Кб, 148 просмотров)
MetallDoctor вне форума Ответить с цитированием
Старый 01.04.2013, 12:04   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

У Вас x на момент начала выполнения программы равен неизвестно чему. Собственно, это касается любых переменных, но a, b, c, b, A и y устанавливаются scanf. А вот z, x и e остаются равны неизвестно чему. Имеет смысл сразу после scanf присвоить им всем 0.
А ещё лучше сделать их локальными переменными и инициализировать при объявлении:
Код:
//float max,min,z,y,a,b,c,d,e,A,x;
void main ()
{
  float max=0, min=0, z=0, y=0, a=0, b=0, c=0, d=0, e=0, A=0, x=0;
Abstraction вне форума Ответить с цитированием
Старый 01.04.2013, 19:17   #3
MetallDoctor
 
Регистрация: 31.03.2013
Сообщений: 7
По умолчанию

Спасибо за ответ. Сделал, как вы сказали, но проблема не решилась. На выходе имею тоже самое:
1.txt

Происходит, как и положено, увеличение х на 1, но при этом значение самой функции не вычисляется.
MetallDoctor вне форума Ответить с цитированием
Старый 01.04.2013, 20:49   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Судя по Вашему результату, значение функции таки-вычисляется и оказывается равно 0. Какие значения (a, b, c, d, A, y) вводите?..
Abstraction вне форума Ответить с цитированием
Старый 01.04.2013, 23:19   #5
MetallDoctor
 
Регистрация: 31.03.2013
Сообщений: 7
По умолчанию

Для a,b,c,d ввожу единицы и для A и у любые удовлетворяющие условию. Дело в том, что начальное значение х=0, затем программа с этим значением находит значение z=0, далее же идет увеличение х на 1 и так до 100, но при этом z заново не пересчитывается, как то так. Если в начале программы присвоить х=1, то z посчитается только однажды с этим х и далее просто будет переписываться, не смотря на изменение самого х
MetallDoctor вне форума Ответить с цитированием
Старый 02.04.2013, 11:33   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Для a,b,c,d ввожу единицы и для A и у любые удовлетворяющие условию. Дело в том, что начальное значение х=0, затем программа с этим значением находит значение z=0, далее же идет увеличение х на 1 и так до 100, но при этом z заново не пересчитывается, как то так. Если в начале программы присвоить х=1, то z посчитается только однажды с этим х и далее просто будет переписываться, не смотря на изменение самого х
Нет. Судя по коду, z каждый раз считается заново. Вы выложили пример вывода программы. Я спрашиваю: какие значения Вы ввели, что получился такой вывод? В особенности меня интересуют именно значения A и y. Обратите внимание:
Код:
z=(a*x+b*x*x+c*pow(x,3))*pow(e,-y)-A*y;
//Поскольку e=0, выражение эквивалентно z=-A*y... и не зависит от x, сюрприз-сюрприз
Abstraction вне форума Ответить с цитированием
Старый 02.04.2013, 19:20   #7
MetallDoctor
 
Регистрация: 31.03.2013
Сообщений: 7
По умолчанию

Заглянув еще раз в условие, поправил две ошибки: е=2.71, как константа, и |A|<=1000. Далее ввел значения a=1, b=1, c=1, d=1, A=1, y=1 и на выходе получилось:

И если закрыть глаза на неточность вычислений и предположить, что z находится верно, то встает вопрос о минимальном и максимальном значениях, они находятся неверно
Вложения
Тип файла: txt 1.txt (2.7 Кб, 148 просмотров)

Последний раз редактировалось Stilet; 03.04.2013 в 22:01.
MetallDoctor вне форума Ответить с цитированием
Старый 02.04.2013, 22:30   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
И если закрыть глаза на неточность вычислений и предположить, что z находится верно, то встает вопрос о минимальном и максимальном значениях, они находятся неверно
Безусловно. Вы же на каждой итерации делаете
Код:
			max=z;
			min=z;
Неудивительно, что у Вас max и min оказываются равны последнему полученному значению z.
Зачем вообще нужен код в строках 29-39? Выкиньте его. Единственное, что остаётся - начальные значения. Можно вместо кода строк 29-39 вставить нечто вроде
Код:
if(x==0){ //Если это наша первая итерация,
  // Инициализировать max и min текущим значением z
  max = min = z;
}
Abstraction вне форума Ответить с цитированием
Старый 03.04.2013, 20:37   #9
MetallDoctor
 
Регистрация: 31.03.2013
Сообщений: 7
По умолчанию

Большое спасибо! Все работает! Теперь по выводу результата имеет ли смысл и есть ли возможность вывода значений х и z в таблице или не стоит над этим заморачиваться? Просто получается слишком громоздкий вывод...

И еще один вопрос: Что означает выражение z=+INF?

Последний раз редактировалось MetallDoctor; 03.04.2013 в 20:43.
MetallDoctor вне форума Ответить с цитированием
Старый 03.04.2013, 21:32   #10
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Большое спасибо! Все работает! Теперь по выводу результата имеет ли смысл и есть ли возможность вывода значений х и z в таблице или не стоит над этим заморачиваться? Просто получается слишком громоздкий вывод...
Возможность - есть (см. описание форматов вывода printf, вроде %4.6f). Надо или нет - решайте сами, зависит от того, кому и зачем нужен результирующий файл.

Цитата:
И еще один вопрос: Что означает выражение z=+INF?
INF - "бесконечно большое число" (формат вещественных чисел с плавающей точкой описывает псевдочисла INF, -INF и NAN). Действительно, если min==INF, то любое число будет меньше него и так можно избежать дополнительного ветвления. Но пользоваться этими числами надо с осторожностью, из-за их необычных свойств. Например, сравнение NAN==NAN вернёт false (ложь).
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несложная задача С++ OldUnion Общие вопросы C/C++ 0 12.10.2012 19:40
Задача по С++. Просто работа с числом. Несложная вроде как. Daenerys Помощь студентам 9 06.03.2012 01:13
Несложная задача на масив. Gordan007 Visual C++ 2 20.11.2011 01:51
Несложная задача на Паскале. WitaliG Помощь студентам 2 25.11.2010 18:48
Vba If Then несложная задача HelperAwM Microsoft Office Word 6 20.09.2010 23:44