Раз вы приступаете к задачам, значит уже знаете что такое цикл 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 thoughts on “Задачи: Цикл 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-го элемента.
#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 (x = 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 || age == 0)
А то не известно, может продолжительность жизни увеличется в будущем..
> Можно такое сделать :
Можно…
Но обратите внимание на то, что всегда при отборе в последовательности (массив, список и др.) элемента по какому-то критерию: min, max, … любому – есть 2 разных подхода:
1. взять за начальное значение явно не подходящее для этого значение (то, что в примере и у вас … 100, 0, …);
2. взять за начальное значение первый элемент последовательности, а перебор вести, начиная со следующего, 2-го элемента.
.. тогда и условие со второго элемента выставить..
Ну у кого как мозги повёрнуты. В общем-то в этом и привлекательность сего дела.
У меня как-то по другому 3-е задание получилось
#include
using namespace std;
int main()
{
int nNumBoxPerCar, nNumBox=0, i=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 number = 0;
bool Continue = 0;
for (int i = 0; i < 1; i++)
{
cout <> number;
cout << endl;
cout << "Квадрат числа " << number << " = " << number*number << endl;
cout <> Continue;
if (Continue == 1)
i–;
}
system(“pause”);
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;
}