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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2010, 18:28   #1
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию Задачка

Доброго времени суток, уважаемые форумчане. Собственно решил заняться программирование ну и где то дня 3-4 подряд вроде бы как дело успешно продвигается вперед. Вот задачка с которой не помогает справиться не google не учебники, к сожалению на форуме тоже похожего не нашел.
Задание на рисунке и скрин работы программы тоже...
Вот мой код:

Код:
#include <stdafx.h>
#include <math.h>
#include <iostream>
using namespace std;
void main()
{
	double  y, x(0), a(0.75), b(1.19), c(-2.5);
	for( ; x<=2; )
	{	
		if (x<0.5)
		y=a*x+b*cos(x);
		else y=b*pow(x,2)+c*sin(2*x);
		cout <<"x="<<x<<"\t y="<<y<<endl;
		x+=0.1;
	}
	cin.get();
}
Программа вроде бы как работает, но есть подозрение что работает неправильно. Вообщем натолкните на идею пожалуйста какой цикл должен быть главным, а какой вложенный (или как правильно).(Имею в виду интервалы для значения x, y). Заранее спасибо.
Изображения
Тип файла: jpg задание по с++.jpg (38.6 Кб, 142 просмотров)

Последний раз редактировалось Stilet; 29.07.2010 в 11:28.
fort-_-minor вне форума Ответить с цитированием
Старый 28.07.2010, 19:30   #2
D@rkD@iver
Форумчанин
 
Регистрация: 28.07.2009
Сообщений: 189
По умолчанию

что программа должна делать?
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com
D@rkD@iver вне форума Ответить с цитированием
Старый 28.07.2010, 19:51   #3
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию

Рисунок с заданием и результатом работы программы прикреплен сразу после кода... Думаю, что программа должна считать значение (y) по одной из формул, при условии что (x) находится на определенном интервале, в противном случае если значение (x) переходит в другой интвервал то соответственно программа считает его по другой формуле. Все ето происходит с одинаковым шагом, после чего программа выводит на экран результаты вычисления значений на обоих интервалах по обоим формулам. Что мне непонятно в задании, так ето для чего дан 3 интервал (в данном случае [0,2]), единственное, что приходит в голову, он дает понять что в 1 интервале (x) принадлежит не x<0.5 то есть (-&, 0.5) а (x>=0 && x<0.5)...

Размышления приводят к следующему коду:
Код:
#include <stdafx.h>
#include <math.h>
#include <iostream>
using namespace std;
void main()
{
	double  y, x(0), a(0.75), b(1.19), c(-2.5);
	for( ; x<=2; )
	{	
		
		if (x<0.5)
		y=a*x+b*cos(x);
		else  cout<<"Vawe zna4enie ne podhodit ukazannomu intervalu  ";
		cout <<"x="<<x<<"\t y="<<y<<endl;
		x+=0.1;	
		
		
	}
	cin.get();
}

Тут по идее все правильно - программа произвольно выбирает значение (x) из интервала от [0,2] и если оно принадлежит интервалу от [0, 0.5) то считает его по 1 формуле, в противном случае выводит на экран сообщение, что значение не соответствует интервалу. Блин, тогда возникает следующий вопрос: Как создать 2 такой цикл для 2 формулы? Вроде бы как он создается с помощью того же (if), но программа начинает путаться в своих подсчетах... Если сделать 2 цикла раздельно( ввести еще раз (for) и так далее ничего все равно не получается...) Вообщем если есть у кого мысли свежие поделитесь а\

Последний раз редактировалось Stilet; 29.07.2010 в 11:29.
fort-_-minor вне форума Ответить с цитированием
Старый 28.07.2010, 23:23   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Блок-схему нарисовать не пробовали? Иногда помогает...
Vago вне форума Ответить с цитированием
Старый 29.07.2010, 11:10   #5
FelixXXI
Пользователь
 
Регистрация: 29.03.2010
Сообщений: 48
По умолчанию

Во-первых, надо внимательнее читать условия задачи: X в задании находится в диапазоне от 0 до 2, тогда как функция y() определена в диапазонах от 0 до 0.5 и от 0.5 до 1, а от 1 до 2 она вообще не определена.
Во-вторых, не вижу смысла под каждую переменную резервировать по 8 байт. Поэтому вместо double рекомендую применить float, которая под себя резервирует в памяти в два раза меньше места.
Цитата:
Как создать 2 такой цикл для 2 формулы?
Всё делается в одном цикле. Программа на 5 минут, поэтому не поленился и написал тебе код, как я его вижу.

Код:
#include "stdafx.h"
#include <math.h>
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
	float y,x,a(.75),b(1.19),c(-2.5);
	for(x=0.;x<=2.;x=x+.1)
	{
		if (x<.5)
			{	
			y=a*x+b*cos(x);
			cout<<"x="<<fixed<<setprecision(2)<<x<<"    y="<<y<<endl;
			}
		else if(x>=.5 && x<1)
			{
			y=b*pow(x,2)+c*sin(2*x);
			cout<<"x="<<x<<"    y="<<y<<endl;
			}
		else
			cout<<"x="<<x<<"    no decision"<<endl; 
	}
}

Последний раз редактировалось Stilet; 29.07.2010 в 11:30.
FelixXXI вне форума Ответить с цитированием
Старый 29.07.2010, 11:23   #6
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию

Разобрался, отредактировал немножко). Были мысли по поводу того, что должно быть несколько циклов, но что в самом (else) создается условие (if)
не догадался бы) Спасибо большое, Феликс, очень помогли Вот код рабочей программы если кому интересно:
Код:
#include "stdafx.h"
#include <math.h>
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
float y,x,a(.75),b(1.19),c(-2.5);
for(x=0.;x<=2;x=x+0.1)
{
if (x<0.5)
{ 
y=a*x+b*cos(x);
cout<<"x="<<fixed<<setprecision(2)<<x<<" y="<<y<<endl;
}
else if(x>=0.5 && x<1)
{
y=b*pow(x,2)+c*sin(2*x);
cout<<"x="<<x<<" y="<<y<<endl;
}
else
cout<<"x="<<x<<" no decision"<<endl; 
}
}

Последний раз редактировалось Stilet; 29.07.2010 в 11:31.
fort-_-minor вне форума Ответить с цитированием
Старый 29.07.2010, 12:15   #7
FelixXXI
Пользователь
 
Регистрация: 29.03.2010
Сообщений: 48
По умолчанию

Цитата:
for(x=0.;x<=2;x=x+0.1)
Зря убрал точку после двойки. В твоём случае это не важно, но в Си надо быть очень внимательным к вещественным типам данных. Попробуй забить в программку такой код
Код:
float a = 1 / 2;
cout << a;
Что ты ожидаешь увидеть в ответе? Будешь сильно удивлён. Попробуй объяснить почему получается так , а не иначе...
FelixXXI вне форума Ответить с цитированием
Старый 29.07.2010, 12:44   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от FelixXXI Посмотреть сообщение
Код:
...
		else if(x>=.5 && x<1)
...
Паразитная проверка.
Vago вне форума Ответить с цитированием
Старый 29.07.2010, 13:27   #9
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию

Если я вас правильно понял, Феликс, вы это имели в виду:
#include "stdafx.h"
#include <math.h>
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
float y,x,a(1.0/2),b(1.19),c(-2.5);
cout<< a;
for(x=0.;x<=2.;x=x+.1)
{
if (x<.5)
{
y=a*x+b*cos(x);
cout<<"x="<<fixed<<setprecision(2)< <x<<" y="<<y<<endl;
}
else if(x>=.5 && x<1)
{
y=b*pow(x,2)+c*sin(2*x);
cout<<"x="<<x<<" y="<<y<<endl;
}
else
cout<<"x="<<x<<" no decision"<<endl;
}
}
Получается, как только убирается (cout<<a) то программа считает как и считало до этого) Ну а что там еще может быть вроде не придумал пока)
fort-_-minor вне форума Ответить с цитированием
Старый 29.07.2010, 13:46   #10
FelixXXI
Пользователь
 
Регистрация: 29.03.2010
Сообщений: 48
По умолчанию

Как говаривал Бьярн Страуструп: "любой даже самый простой код можно усовершенствовать"
И с точки зрения этой программы это действительно паразитная проверка, но, с другой стороны, с точки зрения потренироваться в написании логических операций в ней можно найти и некоторую пользу.
FelixXXI вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЗАДАЧКА В СИ sfinks_murka Общие вопросы C/C++ 1 27.09.2009 18:54
Задачка Claster Помощь студентам 2 24.09.2008 17:53
Задачка kupulau Общие вопросы C/C++ 7 27.01.2008 18:32