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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2013, 17:28   #1
KyKi
 
Регистрация: 12.09.2013
Сообщений: 7
По умолчанию C++ Использование цикла с постусловием do…while

Ребят,срочно нужна ваша помощь. Я только начинаю вникать с язык C++ и пока сильно туплю(Задали задание,весь нет перерыла никак не могу найти хоть примерно как это делается(Я не прошу сделать за меня,просто подайте идею как это сделать. Буду очень благодарна.
Задание:
Определить произведение отрицательных и максимальное среди положительных значений функции y=ln(x-3),если х изменяется от хn до xk с шагом dx.
KyKi вне форума Ответить с цитированием
Старый 12.09.2013, 17:44   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Натуральный логарифм вычисляет функция log из библиотеки math.h (это функция ln)

Примерно так:
Код:
#include <math.h>

int main()
{
double i;

double xn = 8.0;
double xk = 9.0;
double dx = 0.1;

double fres;
double pres;
double max;

pres = 1.0;


for(i = xn; i < xk;i += dx)
{
printf("i: %f \t", i);
fres = log(i-3.0);  printf("fres: %f \t", fres);
if (fres < 0) pres *= fres; printf("pres: %f \n", pres);
if (i == xn) max = fres; else if (max<fres) max = fres; printf("max: %f \n", max);
}

printf("pres: %f \n", pres); printf("max: %f \n", max);

return 0;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 12.09.2013, 17:51   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С потолка в качестве подсказки:
Код:
{double mip=1,xn=0,xk=0,dx=0,maxx=0,y; 
 for(x=xk;x<=xn;x+=dx){ y=log(x-3);
   if(y>0){
    if(maxx<=y) maxx=y;
   } else {mip*=y;}
 } 
}
Обращаю внимание что препод может придраться к начальному значению переменных.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.09.2013, 17:53   #4
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Сам цикл с постусловием выглядит так

Код:
условия_перед_началом_выполнения_итераций;
do
{
операторы_цикла;
условия_после_окончания_выполнения_одной_итерации;
}
while (условное_выражение);
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 12.09.2013, 18:27   #5
KyKi
 
Регистрация: 12.09.2013
Сообщений: 7
По умолчанию

Извиняюсь за глупый вопрос,но все же,что обозначает знак %f?? ( printf("i: %f \t", i) )
KyKi вне форума Ответить с цитированием
Старый 12.09.2013, 18:47   #6
Vladiger
Пользователь
 
Регистрация: 31.08.2013
Сообщений: 93
По умолчанию

Цитата:
Сообщение от KyKi Посмотреть сообщение
Извиняюсь за глупый вопрос,но все же,что обозначает знак %f?? ( printf("i: %f \t", i) )
Это спецификаторы (printf Type Field Characters) форматированной строки, которая является первым параметром функции printf... Далее в этой функции следуют аргуметнты, для каждого спецификатора в том порядке, в котором они встречаются в форматированной строке слева направо...

спецификатор %f означает, что аргументом должна быть переменная с типом double или float значение которой будет отформатировано с плавающей точкой и выведено в строку...

Например:
printf("PI = %f", 3.14f); // Выведет на экран PI = 3.140000
printf("Меня зовут %s!", "Вася"); // Выведет на экран - Меня зовут Вася!
printf("У меня было %d яблока, %d я съел, осталось %d яблока", 3, 1, 2); // Выведет на экран - У меня было 3 яблока, 1 я съел, осталось 2 яблока

Последний раз редактировалось Vladiger; 12.09.2013 в 18:59.
Vladiger вне форума Ответить с цитированием
Старый 12.09.2013, 18:58   #7
KyKi
 
Регистрация: 12.09.2013
Сообщений: 7
По умолчанию

А если как-то так??но все равно не работает((где-то я намудрила(
Код:
#include <iostream>
#include <cmath>
using namespace std;

void main()
{	double x,y,xn,xk,dx,p,max,i;
	cout<<"\n xn=";
	cin>>xn;			 //начальное значение х
	cout<<"\n xk=";
	cin>>xk;			 //конечное значение х
	cout<<"\n dx=";
	cin>>dx;
	x=xn;
	p = 1;
	max=0;
	do {
	for (i=xn; i<xk; i+=dx)
	 {
		y=log(i-3);
	if (y<0) p*=y;
	if (i==xn) max=y;
	else if (max<y) max=y;
	}
	while (x<=xk); 
	}
	cout<<"\n p="<<p;
	cout<<"\n max="<<max;
	cout<<endl;
	
}
KyKi вне форума Ответить с цитированием
Старый 12.09.2013, 19:19   #8
Vladiger
Пользователь
 
Регистрация: 31.08.2013
Сообщений: 93
По умолчанию

Вы немного с фигурными скобками напутали... Цикл do... while имеет такой синтаксис
Код:
do {
	..........................
	..........................
	..........................
} while(условие);
А у вас получилось:
Код:
do {
	..........................
	..........................
	..........................
	while(условие);
}
Немного скобки подправил, вроде работает... По самой задаче пока не вникал:
Код:
#include <iostream>
#include <cmath>
using namespace std;

void main() {
	double x, y, xn, xk, dx, p, max, i;
	system("CLS");
	cout << "xn=";
	cin >> xn; //начальное значение х
	cout << endl << "xk=";
	cin >> xk; //конечное значение х
	cout << endl << "dx=";
	cin >> dx;
	x = xn;
	p = 1;
	max = 0;
	do {
		for (i = xn; i < xk; i += dx) {
			y = log(i - 3);
			if (y < 0) p *= y;
			if (i == xn) max = y; else if (max < y) max = y;
		}
	} while (x <= xk);
	cout << endl << "p=" << p;
	cout << endl << "max=" << max << endl;

	system("PAUSE");
}
Vladiger вне форума Ответить с цитированием
Старый 12.09.2013, 19:28   #9
KyKi
 
Регистрация: 12.09.2013
Сообщений: 7
По умолчанию

спасибо,ошибки исправила,запускается. Но как ввожу значения ничего не выдает и выходит из программы((
еще чуть подправила,но теперь проблема в том,что оно не считает значения,а выдает,то что ввела я изначально р=1, max=0(((
Код:
//
#include <iostream>
#include <cmath>
using namespace std;

void main() {
	double x, y, xn, xk, dx, p, max, i;
	cout << "xn=";
	cin >> xn; //начальное значение х
	cout << "xk=";
	cin >> xk; //конечное значение х
	cout << "dx=";
	cin >> dx;
	x = xn;
	p = 1;
	max = 0;
	do {
		for (i = xn; i < xk; i += dx)
		{
			y = log(i - 3);
			if (y < 0) p *= y;
			if (i == xn) max = y; else if (max < y) max = y;
		}
	} while (x <= xk);
	cout << endl << "p=" << p;
	cout << endl << "max=" << max << endl;


}

Последний раз редактировалось KyKi; 12.09.2013 в 19:34.
KyKi вне форума Ответить с цитированием
Старый 12.09.2013, 20:16   #10
Vladiger
Пользователь
 
Регистрация: 31.08.2013
Сообщений: 93
По умолчанию

Я не совсем понял, для чего у вас в цикле, ещё один цикл?
Если следовать:
Цитата:
Определить произведение отрицательных и максимальное среди положительных значений функции y=ln(x-3),если х изменяется от хn до xk с шагом dx
то вырисовывается обычный цикл, в котором нужно пробежаться от xn до xk с шагом dx...

Или я не правильно понял задачу?

Может быть как то так?

Код:
#include <iostream>
#include <cmath>
using namespace std;

int main() {
	double x, y, xn, xk, dx, p, max;
	system("CLS");
	cout << "xn=";
	cin >> xn; //начальное значение х
	cout << endl << "xk=";
	cin >> xk; //конечное значение х
	cout << endl << "dx=";
	cin >> dx;
	cout << endl;

	p = 1;
	max = 0;

	do {
		x = xn;
		y = log(x - 3);
		if (y < 0) p *= y; else if (y > max) max = y;
		xn += dx;
	} while(xn < xk);

	cout << "Work = " << p << endl;
	cout << "Max = " << max << endl;

	system("PAUSE");
	return 0;
}
Vladiger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оператор цикла с постусловием vlad kuznetsov Паскаль, Turbo Pascal, PascalABC.NET 4 23.04.2012 12:07
Оператор цикла с постусловием vlad kuznetsov Помощь студентам 0 22.04.2012 15:51
Оператор цикла с постусловием ProgrammiST-_- Паскаль, Turbo Pascal, PascalABC.NET 1 08.10.2011 11:38
Оператор цикла с постусловием (WHILE) RUSSTUDENT Помощь студентам 4 27.01.2010 16:51
Оператор цикла с постусловием (REPEAT) RUSSTUDENT Помощь студентам 2 18.01.2010 23:36