Раз вы приступаете к задачам, значить вже знаєте що таке цикл for. Рассмотрим несколько задач, в рішенні яких він застосовується і, тем самым, закрепим полученные знания. Практика програмування– найкращий спосіб розібратися з матеріалом і запам'ятати інформацію надовго.
1. Написать программу, яка буде показувати на екран квадрат числа, введеного користувачем. Пользователь должен сам решать – вийти з програми або продовжити введення. (Подсказка – необходимо запустить бесконечный цикл, в котором предусмотреть его прерывание, при наступлении определённого условия).
Показать код
Задача: оператор for 1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
usingnamespacestd;
intmain()
{
setlocale(LC_ALL,"rus");
intdigit=0;// число для расчета
charexit='y';// для выхода или продолжения
for(;;)
{
cout<<"Введите число: ";
cin>>digit;
cout<<"Квадрат "<<digit<<" = "<<digit*digit;
cout<<"\nПродолжить ввод чисел - Y, Выйти - N: ";
cin>>exit;// выбор пользователя
if(exit!='y'&&exit!='Y')
break;// прервать цикл
}
return0;
}
В задаче, как видите, передбачено продовження роботи, вне зависимости в каком регистре введена буква Y (в нижнем или в верхнем).
Результат:
2. В спортзал ежедневно приходит какое-то количество посетителей. Необходимо предложить пользователю ввести такие данные: сколько человек посетило спортзал за день, ввести возраст каждого посетителя и в итоге показать возраст самого старшего и самого молодого из них, а так же посчитать средний возраст посетителей.
Показать код
Задача: оператор for 2
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
#include <iostream>
usingnamespacestd;
intmain()
{
setlocale(LC_ALL,"rus");
intage=0;// будет вводить пользователь
intmaxAge=0;// для записи максимального количества лет
intminAge=100;// для записи минимального количества лет
intsum=0;// общая сумма для расчета среднего
intaverage=0;// для записи среднего возраста посетителей
intamount=0;// количество посетителей спортзала
cout<<"Введите количество посетителей спортзала: ";
cin>>amount;
for(inti=0;i<amount;i++)
{
cout<<"Введите возраст "<<i+1<<"-го посетителя: ";// запрос на введение числа
cin>>age;
if(age>maxAge)// если оно больше, чем хранит переменная max
maxAge=age;// записываем в неё это число
if(age<minAge)
minAge=age;
sum+=age;// накопление общей суммы
}
average=sum/amount;// подсчет среднего возраста
cout<<"\nСредний возраст всех посетителей: "<<average<<endl;
cout<<"\nСамый взрослый: "<<maxAge<<endl;
cout<<"\nСамый молодой: "<<minAge<<endl;
return0;
}
Переменную min мы инициализировали значением 100, чтобы программа могла корректно работать. Якби вона була инициализирована значенням 0, умоваif (age < minAge) не виконувалося б ніколи, так какage завжди більше 0. Таким образом значение переменной minAge всегда оставалось бы нулем.
Результат:
Для самостоятельно задания, пропонуємо вам вирішити схоже завдання. Организовать ввод количества посетителей спортзала и количества часов проведенных каждым из них в спортзале. В итоге посчитать и показать общую сумму, которую посетители заплатили за тренировки.
3. На складе имеется определённое количество ящиков с яблоками (в нашем примере 15). Когда подъезжает машина для погрузки, попросить пользователя ввести, сколько ящиков загрузить в первую машину, в другу і так далі, пока не закончатся ящики с яблоками. Предусмотреть тот случай, когда пользователь введёт количество ящиков больше, чем есть на складе.
Показать код
Задача: оператор for 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
#include <iostream>
usingnamespacestd;
intmain()
{
setlocale(LC_ALL,"rus");
intboxWithApples=15;// количество ящиков на складе
intamountBoxesForSale=0;// количество отгружаемых ящиков
cout<<"Сейчас на складе "<<boxWithApples<<" ящиков с яблоками.\n\n";
for(inti=1;;i++)// счетчик i будет считать количество машин к погрузке
{
cout<<"Сколько ящиков загрузить в "<<i<<"-ю машину? ";
cin>>amountBoxesForSale;
if(amountBoxesForSale>boxWithApples)
{
cout<<"\nНа складе недостаточно товара!";
cout<<"Осталось только "<<boxWithApples<<" ящиков\n\n";
i--;// уменьшить счетчик на единицу
}
else
{
boxWithApples-=amountBoxesForSale;// перезаписываем значение
cout<<"Осталось "<<boxWithApples<<" ящиков.\n";
}
if(boxWithApples==0)// если ящиков больше нет - выйти из цикла
{
cout<<"Яблоки закончились! Давай до свидания!\n";
break;
}
}
return0;
}
Счетчик i в строке 21 уменьшается на единицу, чтобы при следующем шаге цикла показать правильный порядковый номер машины.
Результат:
При возникновении вопросов обращайтесь к нам в комментариях.
4.4
47
161 думки про "Завдання: Цикл for в С ”
#include #include using namespace std;
int main() { setlocale(LC_ALL, "rus"); int x = 0; int y = 0; int min = 1000; int max = 0; int sum = 0; int srd = 0;
cout <> x; int z = x; for (x; (x > 0); x--)
{ cout <> y; sum = sum + y; if (min > y) min = y;
if (max < y) max = y; } srd = sum / z; cout << "Максимальный возраст - " << max << endl; cout << "Минимальный возраст - " << min << endl; cout << "Средний возраст - " << srd << endl; _getch(); return 0; }
int main() { setlocale(LC_ALL, "rus"); int y = 0; int x = 0; cout << x; for ( ;;) { cout << y; x = x - y; if (x = 0) { break; } if (x < 0) { x = x + y; cout << "Введено недопустимо большое значение. Начните ввод для крайней машины заного. \n "; continue; }
else { x = x - y; cout << "У вас осталось " << x << " ящиков \n";
Ось як у мене вийшла завдання N3: ________________________ #include #include using namespace std; int main () { int a,h,b,c,k,p,v,g,n; a=0;//ящикoв setlocale(LC_ALL, "rus"); b=0;//машини n=0;//ящики v=0;//лишились k=0; g=0; h=0; cout <<"Введите количество ящиков"<>a; cout <<"Введите количество машин"<>b;
for (c=1;c<=b;c++) { :check_1 cout <<"Сколько ящиков поставить в "<<c<<"-ю машину?"<>n; g+=n;// if (a<g) { g-=n; for (;;) { cout <<"Недостаточно ящиков"<<endl; cout <<"Сколько ящиков поставить в "<<c<<"-ю машину?"<>p; g+=p;// } if (a>g) { :check_1 } else g-=p; goto check; } } } if (g<a) { cout <<"Ошибка!Нехватка машин!У вас осталось "<<a-g<<" ящиков"<<endl; } else cout <<"15 ящиков распределено по машинах"<<endl;
Бачити таке без розмітки – це всерівно, якби весь код в одну строчку виписати. Код навіть і в такому записі компілюватиметься і виконуватися, але це не означає, що його хтось читатиме.
Ви б хоч відкомпільоване код, через комп'ютер прогнали, перед тим як його показувати – там буде просто безліч синтаксичних помилок. Тому говорити про “вийшло” – НЕ пріод ;-).
Можно… Але зверніть увагу на те, що завжди при відборі в послідовності (массив, список і ін.) елемента по якимось критерієм: min, max, … будь-якого – есть 2 різні підходи:
1. взяти за початкове значення явно не підходить для цього значення (те, що в прикладі і у вас … 100, 0, …);
2. взяти за початкове значення перший елемент послідовності, а перебір вести, починаючи з наступного, 2-це элемента.
Першу задачу по-іншому вирішив. using namespace std; int main() { setlocale(LC_ALL, “rus”); INT число = 0; BOOL Продовжити = 0; for (int i = 0; i < 1; i ) { cout <> number; cout << endl; cout << "Квадрат числа " << number << " = " << номер * номер << endl; cout <> продовжувати; if (продовжити == 1) i–;
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
int x = 0;
int y = 0;
int min = 1000;
int max = 0;
int sum = 0;
int srd = 0;
cout <> x;
int z = x;
for (x; (x > 0); x--)
{
cout <> y;
sum = sum + y;
if (min > y)
min = y;
if (max < y)
max = y;
}
srd = sum / z;
cout << "Максимальный возраст - " << max << endl;
cout << "Минимальный возраст - " << min << endl;
cout << "Средний возраст - " << srd << endl;
_getch();
return 0;
}
а ось з третій завданням не склалося
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
int y = 0;
int x = 0;
cout << x;
for ( ;;)
{
cout << y;
x = x - y;
if (x = 0)
{
break;
}
if (x < 0)
{
x = x + y;
cout << "Введено недопустимо большое значение. Начните ввод для крайней машины заного. \n ";
continue;
}
else
{
x = x - y;
cout << "У вас осталось " << x << " ящиков \n";
}
}
_getch();
return 0;
}
в чому помилка?
У вашому коді помилка в цьому місці if (х = 0). тобто, при будь-якому розкладі х негативно не, а буде постійно дорівнює 0.
Ось як у мене вийшла завдання N3:
________________________
#include
#include
using namespace std;
int main ()
{
int a,h,b,c,k,p,v,g,n;
a=0;//ящикoв
setlocale(LC_ALL, "rus");
b=0;//машини
n=0;//ящики
v=0;//лишились
k=0;
g=0;
h=0;
cout <<"Введите количество ящиков"<>a;
cout <<"Введите количество машин"<>b;
for (c=1;c<=b;c++)
{
:check_1
cout <<"Сколько ящиков поставить в "<<c<<"-ю машину?"<>n;
g+=n;//
if (a<g)
{
g-=n;
for (;;)
{
cout <<"Недостаточно ящиков"<<endl;
cout <<"Сколько ящиков поставить в "<<c<<"-ю машину?"<>p;
g+=p;//
}
if (a>g)
{
:check_1
}
else
g-=p;
goto check;
}
}
}
if (g<a)
{
cout <<"Ошибка!Нехватка машин!У вас осталось "<<a-g<<" ящиков"<<endl;
}
else
cout <<"15 ящиков распределено по машинах"<<endl;
system ("pause");
return 0;
}
> Ось як у мене вийшла завдання N3:
Бачити таке без розмітки – це всерівно, якби весь код в одну строчку виписати. Код навіть і в такому записі компілюватиметься і виконуватися, але це не означає, що його хтось читатиме.
> Ось як у мене вийшла завдання N3:
Ви б хоч відкомпільоване код, через комп'ютер прогнали, перед тим як його показувати – там буде просто безліч синтаксичних помилок. Тому говорити про “вийшло” – НЕ пріод ;-).
for (;;) – А вихід з циклу де?
Або він там був, але портал з'їв?
Що б не писати такого : INT minAge = 100;
Можна таке зробити :
INT minAge = 0
if (age < minAge || вік == 0)
А то невідомо, може тривалість життя увелічеть в майбутньому..
> Можна таке зробити :
Можно…
Але зверніть увагу на те, що завжди при відборі в послідовності (массив, список і ін.) елемента по якимось критерієм: min, max, … будь-якого – есть 2 різні підходи:
1. взяти за початкове значення явно не підходить для цього значення (те, що в прикладі і у вас … 100, 0, …);
2. взяти за початкове значення перший елемент послідовності, а перебір вести, починаючи з наступного, 2-це элемента.
.. тоді і умова з другого елементу виставити..
Ну у кого як мізки повернені. В общем-то в цьому і привабливість цієї справи.
У мене якось по іншому 3-е завдання вийшло
#include
using namespace std;
int main()
{
ІНТ nNumBoxPerCar, nNumBox = 0, я = 1, nOstatokBox = 15;
for ( ;nNumBox < 15 ; i )
{
cout << "Сколько ящиков загрузить в машину " << i <> nNumBoxPerCar;
nNumBox = nNumBox + nNumBoxPerCar;
if (nNumBox >= 15)
{
nOstatokBox = (15 – nNumBox) + nNumBoxPerCar;
break;
}
}
cout << "Ящики закончились. Причому в останню машину вдалося завантажити: "
<< nOstatokBox << "\n";
}
Першу задачу по-іншому вирішив.
using namespace std;
int main()
{
setlocale(LC_ALL, “rus”);
INT число = 0;
BOOL Продовжити = 0;
for (int i = 0; i < 1; i )
{
cout <> number;
cout << endl;
cout << "Квадрат числа " << number << " = " << номер * номер << endl;
cout <> продовжувати;
if (продовжити == 1)
i–;
}
system(“пауза”);
return 0;
}
завдання №3
косо, але головне сенс і результат…
#include
using namespace std;
int main()
{
int i=0,a,b;
char x;
cout<<a;
for(;;)
{
i+=1;
cout<<i<<b;
if (a>b)
{
a-=b;
cout<<"Na sklade ostatok = "<<a<<endl;
}
else if (a<b)
{
cout<<"Na sklade otalos = "<<a<<endl;
cout<<"zagruzat - "<<a<<"jachikov?";
cout<<x;
if (x=='y')
{
cout<<"zagruzili ostatok - "<<a;
break;
}
else if (x=='n')
{
cout<<"izvenite za neudobstvo DOSVIDANIE";
}
}
else if (a==b)
{
cout<<"Na sklade ostalos = 0"<<endl;
break;
}
}
return 0;
}