Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
#1

"Простые" циклы - C++

25.04.2011, 15:17. Просмотров 1278. Ответов 16
Метки нет (Все метки)

Помогите, пожалуйста, сделать Лаб.роботу по С++.
Вычислить и вывести значение функции при изменении значения аргумента от А к В с шагом С и определить минимальное и максимальное значение функции на отрезке. Создать три разных типа программы: создание цикла FOR; создание цикла WHILE; создание цикла DO-WHILE.
Вот, что-то сделал по примерам, которые нашел в Интернете. Это на цикл FOR.
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <dos.h>
 
main()
{
int S,s
for(int s=-2;s<2;s+=0.2);
{
printf("Input s= ");
scanf("%f",&s);
 
if((s>=-1)&&(s<=1.2)
S=s+ln(abs(cos(s)*cos(s)-s*s));
 
if (s<-1)
S=(sin(s)/cos(s)+sqrt(abs(s));
 
if(s>1.2)
S=s*s*s*lg(s+e^s);
printf("%f",S);
 
 
 
 
 
delay(1000);
}
return 0;
}
0
Миниатюры
"Простые" циклы  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2011, 15:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос "Простые" циклы (C++):

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
HeM01
36 / 24 / 2
Регистрация: 05.01.2010
Сообщений: 37
25.04.2011, 16:13 #2
Скорее, програмка тебе нужна не на C++ а на обычном С, под Turbo C

1. int хранит целые числа, а по заданию видно, что нам нужны вещественные: float или double.
В printf ты указал %f, который ожидает как раз float или double.
2. То, что ты пытаешься сделать не правильно. Нужно получить с клавиатуры 2 вещественных числа, которые будут представлять отрезок, на котором мы будем производить вычисления. Третье число с клавиатуры должно показывать шаг, с которым мы проходим по отрезку.
3. Задержка в программе на несколько миллисекунд (на 1 секунду) не есть выход. Лучше использовать getch, которая ожидает нажатие клавиши.

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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
   float a, b, h, x, S;
   printf("Vvedite A, B, H:\n");
   scanf("%f %f %f", &a, &b, &h);
   for (x = a; x<=b; x = x + h)
   {
      if (x < -1.0)
      {
          S = tan(x) + sqrt(fabs(x));
      }
      else
      {
          if (x <= 1.2)
          {
              S = x + log(cos(x)*cos(x) - x*x);
          }
          else
          {
              S = x*x*x*log(x + exp(x));
          }
      }
      printf("%f", S);
   }
   getch();
   return 0;
}
Это не вся программка Нужно самому учиться и пробовать.
Минимальное и максимальное значение можно найти с помощью алгоритма:
1. Получить значение S (какой-либо функции) и сказать что оно максимальное (max)
2. Вычислить новое значение S и сравнить его с максимальным значением. Если > max, то переходим на пункт 3, иначе на пункт 4.
3. Присваиваем максимальному значению S: max = S;
4. Выбираем следующую точку. Если еще не конец нашего интервала, то переходим на пункт 2, иначе на пункт 5.
5. Вывод максимального.

Примерно такое же и для min значения.

Напомню что циклы while и do-while выполняются, пока условие выполняется. Ничего сложного
1
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
25.04.2011, 17:25  [ТС] #3
Порылся в Интернете и немного добавил в программу.
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
   float a, b, h, x, S;
   printf("Vvedite A, B, H:\n");
   scanf("%f %f %f", &a, &b, &h);
   for (x = a; x<=b; x = x + h)
   {
      if (x < -1.0)
      {
          S = tan(x) + sqrt(fabs(x));
      }
      else
      {
          if (x <= 1.2)
          {
              S = x + log(cos(x)*cos(x) - x*x);
          }
          else
          {
              S = x*x*x*log(x + exp(x));
          }
      }
      printf("%f", S);
   }
   
 
{  flout a=-2,b=2;
   float c=0.2,S=fun(x),min=S,max=S;
   do
{  s+=c; S=fun(x);
    if(S>max) max=S;
    if(S<min) min=S;
  
} while(x!=b); 
printf("Max %f , Min %f \n",max,min);
 
    getch();
   return 0;
}
0
HeM01
36 / 24 / 2
Регистрация: 05.01.2010
Сообщений: 37
25.04.2011, 18:08 #4
Ну... почти так:
Функция func не определена, это раз.
flout - нет такого, это два.
a, b, с мы определили до этого и ввели с клавиатуры, они никуда не исчезли. это три.
Сравнивать числа с плавающей точкой на неравенство (!=) нельзя! это четыре. Нужно использовать сравнения: <, <=, >, >=
Лишняя открывающая скобка. это пять.

А в общем да, примерно так
1
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
25.04.2011, 19:22  [ТС] #5
Вот, внес некоторые изменения.
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
   float a, b, h, x, S, fun;
  float a=-2, b=2, h=0.2;
      for (x = a; x<=b; x = x + h)
   {
      if (x < -1.0)
      {
          S = tan(x) + sqrt(fabs(x));
      }
      else
      {
          if (x <= 1.2)
          {
              S = x + log(cos(x)*cos(x) - x*x);
          }
          else
          {
              S = x*x*x*log(x + exp(x));
          }
      }
      printf("%f", S);
   }
   
float S=fun(x),min=S,max=S;
   do
{  x+=h; S=fun(x);
    if(S>max) max=S;
    if(S<min) min=S;
  
} while(x<=b); 
printf("Max %f , Min %f \n",max,min);
 
    getch();
   return 0;
}
0
HeM01
36 / 24 / 2
Регистрация: 05.01.2010
Сообщений: 37
25.04.2011, 19:48 #6
Такой вопрос: ты пробуешь это компилировать?
1. Ты в 8 строке переопределяешь переменные. Такой код не запустится.
2. В 7 ты пытаешь определить функцию с именем fun? Это делается не так
C
1
2
3
4
float fun(float x)
{
   return x*x*x; // вернет x в кубе
}
Такое определение должно быть вне любой функции, в том числе main.

3. После for, x у нас не потеряет своего значения, и будет больше и равный b. Так что, для того-что бы использовать его в do-while цикле нужно установить новое значение.

P. S. Не забудь что у тебя функция S составная - она состоит из 3 разных функций, которые справедливы на своем отрезке.
1
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
25.04.2011, 20:10  [ТС] #7
Извини, пожалуйста, что допускаю такие глупые ошибки, ведь я на самом ОЧЕНЬ плохо программирую (если это можно назвать программированием).
Вот я немного исправил.
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
   float x, S;
  float a=-2, b=2, h=0.2;
      for (x = a; x<=b; x = x + h)
   {
      if (x < -1.0)
      {
          S = tan(x) + sqrt(fabs(x));
      }
      else
      {
          if (x <= 1.2)
          {
              S = x + log(cos(x)*cos(x) - x*x);
          }
          else
          {
              S = x*x*x*log(x + exp(x));
          }
      }
      printf("%f", S);
   }
   
       
float fun(float x)
{
   return x*x*x;
}
 
float S=fun(x),min=S,max=S;
   do
{  x+=h; S=fun(x);
    if(S>max) max=S;
    if(S<min) min=S;
  
} while(x<=b); 
printf("Max %f , Min %f \n",max,min);
 
    getch();
   return 0;
}
Залей, пожалуйста, свой вариант этой программы.
А я уже постараюсь изменить его на другие два цикла: while, do-while.
0
HeM01
36 / 24 / 2
Регистрация: 05.01.2010
Сообщений: 37
25.04.2011, 20:47 #8
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
float func(float x)
{
      float S;   // локальная переменная S
      if (x < -1.0)
      {
          S = tan(x) + sqrt(fabs(x));
      }
      else
      {
          if (x <= 1.2)
          {
              S = x + log(cos(x)*cos(x) - x*x);
          }
          else
          {
              S = x*x*x*log(x + exp(x));
          }
      }
      return S;
}
 
int main()
{
   float a=-2, b=2, h=0.2;
   float x = a;
   float S = func(x);
   float max, min;
   max = S;
   min = S;
   printf("%f %f\n", x, S);
   for (x = a+h; x<=b; x = x + h)
   {
      S = func(x);
      if(S>max)
         max=S;
      if(S<min)
         min=S;
      printf("%f %f\n", x, S);
   }
   printf("Max %f , Min %f \n",max,min); 
   getch();
   return 0;
}
Что-то такое. Это все с использованием for цикла. Т.е. по отрезку [a;b] мы прошлись с шагом h. В цикле мы так же искали максимальное и минимальное значение.
Для других циклов нужно использовать такой же подход. Это совсем не тяжело

Учись, и будет получаться.
1
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
25.04.2011, 21:22  [ТС] #9
Вот, что-то изменил. Посмотри, пожалуйста, если что-то надо - исправь. Цикл WHILE.
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
float func(float x)
{
      float S;   // локальная переменная S
      if (x < -1.0)
      {
          S = tan(x) + sqrt(fabs(x));
      }
      else
      {
          if (x <= 1.2)
          {
              S = x + log(cos(x)*cos(x) - x*x);
          }
          else
          {
              S = x*x*x*log(x + exp(x));
          }
      }
      return S;
}
 
int main()
{
   float a=-2, b=2, h=0.2;
   float x = a;
   float S = func(x);
   float max, min;
   max = S;
   min = S;
   printf("%f %f\n", x, S);
  x= a+h
while (x<=b)
   {
      S = func(x);
      if(S>max)
         max=S;
      if(S<min)
         min=S;
x = x + h;
      printf("%f %f\n", x, S);
   }
   printf("Max %f , Min %f \n",max,min); 
   getch();
   return 0;
}
P.S. Спасибо, что помог сделать программу с циклом FOR.
0
HeM01
36 / 24 / 2
Регистрация: 05.01.2010
Сообщений: 37
25.04.2011, 21:32 #10
Да не за что
Почти все так с while, только ты делаешь новый x, а значение остается старое. А так правильно
1
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
25.04.2011, 21:43  [ТС] #11
Цитата Сообщение от HeM01 Посмотреть сообщение
только ты делаешь новый x, а значение остается старое.
Я немного не понял что именно нужно исправить? В какой строчке?
0
HeM01
36 / 24 / 2
Регистрация: 05.01.2010
Сообщений: 37
25.04.2011, 21:53 #12
C
1
2
3
4
5
6
7
8
9
10
   while (x<=b)
   {
      S = func(x);
      if(S>max)
         max=S;
      if(S<min)
         min=S;
      x = x + h;
      printf("%f %f\n", x, S);
   }
Вот тут у тебя расчеты производились со старым x. потом ты его увеличил, получил новое значение. А вот результаты то относятся к старому x.
1
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
25.04.2011, 21:58  [ТС] #13
Так необходимо внести новый символ?
Или как-то по другому можно исправить?
0
HeM01
36 / 24 / 2
Регистрация: 05.01.2010
Сообщений: 37
25.04.2011, 22:16 #14
Просто напросто перенести строку присвоения ниже. Т.е. сначала вывод значений, а потом новый x получаем.
1
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
25.04.2011, 23:02  [ТС] #15
Этот цикл правильно сделал?
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
float func(float x)
{
      float S;   // локальная переменная S
      if (x < -1.0)
      {
          S = tan(x) + sqrt(fabs(x));
      }
      else
      {
          if (x <= 1.2)
          {
              S = x + log(cos(x)*cos(x) - x*x);
          }
          else
          {
              S = x*x*x*log(x + exp(x));
          }
      }
      return S;
}
 
int main()
{
   float a=-2, b=2, h=0.2;
   float x = a;
   float S = func(x);
   float max, min;
   max = S;
   min = S;
   printf("%f %f\n", x, S);
   x= a+h
do   {
      S = func(x);
      if(S>max)
         max=S;
      if(S<min)
         min=S;
      printf("%f %f\n", x, S);
      x = x + h;
      } while (x<=b);
         }
   printf("Max %f , Min %f \n",max,min); 
   getch();
   return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2011, 23:02
Привет! Вот еще темы с ответами:

по строкам.замените в слове сочетание "му" на "а" , а букву "ы" на "ца". очень нужно - C++
замените в слове сочетание &quot;му&quot; на &quot;а&quot; , а букву &quot;ы&quot; на &quot;ца&quot;. очень нужно Добавлено через 21 час 4 минуты неужели никто не знает...

Реализовать структуру "Анкета" с полями "Фамилия", "Пол" и "Адрес" - C++
Здравствуйте. Проходим тему Структуры, не могу понять, как определить количество, само задание: #include &lt;iostream&gt; #include...

Создать иерархию классов "Фирма", "Бухгалтер", "Сотрудник", "Зарплата" - C++
Само по себе понятие &quot;зарплата&quot; не особенно конкретное: оно включает и почасовую, и ставочную зарплату, и комиссионные, и процент с продаж....

Структура «Преподаватель» с полями "ФИО", "стаж", "категория", "нагрузка" - C++
Функция - расчёт зарплаты по нагрузке и оплате часа для определенной категории. Категория Оплата часа Вторая 150 Первая 200 ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.04.2011, 23:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru