Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Практические задачи по операторам циклов: цикл while




1. Повторение, управляемое счетчиком. Чтобы лучше понять алгоритм работы цикла while, рассмотрим классическую задачу усреднения:

Проведен опрос класса из 10 студентов. Вам известны оценки по этому опросу (целые числа в диапазоне 0 - 100). Нужно определить среднюю оценку класса.

Конечно же, мы помним со школьного курса, что для определения среднего числа группы чисел, нужно найти общую сумму этих чисел и разделить ее на количество суммируемых чисел. Также мы поступим и с нашей задачей. Код программы смотрим ниже:

01.//Проведен опрос класса из 10 студентов. Вам известны оценки по этому опросу

02.//(целые числа в диапазоне от 0до 100). Надо определить среднюю оценку класса

03.

04.#include <iostream>

05.

06.using namespace std;

07.

08.int main()

09.{

10. //объявляем необходимые переменные

11. int total, counter, average, grade;

12.

13. //задаем начальные значения

14. total = 0, counter = 1;

15.

16. //начинаем цикл ввода и суммирования оценок

17. while (counter <= 10)

18. {

19. cout << "Vvedite ocenku: ";

20. cin >> grade;

21.

22. if (grade <= 100)

23. {

24. total += grade;

25. counter += 1;

26. }

27. else

28. cout << "Vvedite osenke v intervale 0 - 100\n";

29. }

30.

31. //считаем средний балл и выводим результат на экран

32. average = total / 10;

33. cout << "Srednyya osenka po klassu: " << average << endl;

34.

35. return 0;

36.}

Результат работы программы:


Разберем программу подробнее

Начинаем с объявления необходимых переменных: total - будет накапливать общую сумму баллов студентов; counter - является счетчиком итераций цикла while (в нашем случае число повторений цикла заранее известно, поэтому эту разновидность цикла еще называют повторением, управляемым счетчиком); average - будет содержать у нас наше искомое среднее значение; grade - в эту переменную будем записывать введенное пользователем значение балла.

На следующем шаге присваиваем начальные значения счетчику циклов и общей сумме баллов.

Затем организовываем цикл while, задав условие выполнения, в котором запрашиваем у студента его балл и сохраняем в переменную grade. Также в цикле предусматриваем проверку на правильность ввода данных студентами: в случае правильного ввода засчитываем балл и увеличиваем счетчик цикла на единицу, в обратном случае выводим пользователю подсказку, не засчитываем балл и не увеличиваем счетчик, т.е. в любом случае у нас будет 10 "правильных" баллов.

Далее подсчитываем средний балл и запоминаем в переменную average, выводим результат на экран.

Примечание:

1.total += grade;

2.counter += 1;

Здесь используется операция присваивания в сокращенном виде. Вначале в своих программах вы можете пользоваться полной записью присваивания, а потом уже переходить на сокращенную. Вот полная запись этих строк:

1.total = total + grade;

2.counter = counter + 1;

Последнюю строку можно еще записать и так:

1.counter++;

Повторение, управляемое меткой. Давайте теперь немного модифицируем предыдущую программу, чтобы рассмотреть цикл while, управляемый не счетчиком, а меткой. В отличии от счетчика, когда количество повторений заранее известно, количество итераций цикла, управляемого меткой, заранее неизвестно. Т.е. мы можем использовать баллы скольких угодно студентов, пока не будет окончен ввод.

01.//Проведен опрос класса из 10 студентов. Вам известны оценки по этому опросу

02.//(целые числа в диапазоне от 0до 100). Надо определить среднюю оценку класса

03.

04.#include <iostream>

05.

06.using namespace std;

07.

08.int main()

09.{

10. //объявляем необходимые переменные

11. float average;

12. int grade, counter, total;

13.

14. //задаем начальные значения

15. total = 0, counter = 0;

16.

17. //запрашиваем у студента его оценку и запоминаем

18. cout << "Vvedite ocenku, dlya vihoda vvedite -1\n";

19. cin >> grade;

20.

21. //начинаем цикл, если не было введено -1

22. while (grade!= -1)

23. {

24. //накапливаем общее кол-во баллов

25. //и засчитываем ввод

26. total += grade;

27. counter++;

28.

29. cout << "Vvedite ocenku, dlya vihoda vvedite -1\n";

30. cin >> grade;

31. }

32.

33. //проверка на ввод

34. //если было введено хотя бы одно значение

35. if (counter!= 0)

36. {

37. //рассчитываем средний балл

38. average = (float) total / counter;

39. cout << "Srednee znacheniye: " << average << endl;

40. }

41. else

42. //если не было введено ни одно значение

43. cout << "Ocenki ne vvedeni\n";

44.

45. return 0;

46.}

В данном варианте этого алгоритма, в котором цикл while управляется меткой (ввод продолжается, пока метка не будет равной -1), студенты могут вводить сколь угодно своих оценок, пока не будет введена метка окончания ввода "-1". Плюс в этой программе есть еще одно нововведение: теперь средний балл будет более точным, т.к. для его хранения мы объявили переменную average типа float (float - тип для хранения дробных чисел с точностью 6 - 7 знаков после запятой, в отличии от double, у которого 13 - 14 знаков).

(Еще раз небольшое отступление). Разберем новый для вас момент:

1.average = (float) total / counter;

В этой строке реализовано приведение типов. Что это такое и для чего служит? Мы объявили переменную average как float, но переменные total и counter у нас объявлены как int, а значит после операции деления, в случае, если получиться дробное число, дробная часть будет отброшена (потеряна). Для того, чтобы избежать потери нужно, чтобы делимое total было тоже типа float, а так как мы его не объявили изначально типа float, то приведем его сейчас к float.

3. Теперь рассмотрим пример использования цикла while с постусловием. Запрограммируем решение вот такой задачи:

Одна большая химическая компания платит своим продавцам на основе комиссионных. Продавец получает $200 в неделю плюс 9% от объема продаж за неделю. Например, продавец, который продал за неделю химикалий на $5000 получит $200 плюс 9% от $5000, то есть в итоге $650. Нужно разработать программу, которая будет вводить для каждого продавца его объем продаж за последнюю неделю, рассчитывать и выводить на экран его заработок. Данные должны вводиться поочередно для каждого продавца.

Приступим к программированию. Вот такая программа будет выполнять поставленную задачу:

01.//Работаем с циклом while (вариант с постусловием)

02.

03.#include <iostream>

04.

05.using namespace std;

06.

07.int main()

08.{

09. //объявляем необходимые переменные

10. float prodashi, zarabotok;

11.

12. //запрашиваем ввод и сохраняем значение

13. cout << "Vvedite ob'yom prodash: $";

14. cin >> prodashi;

15.

16. //начинаем цикл с постусловием

17. do

18. {

19. //считаем заработок и выводим его на экран

20. zarabotok = 200 + (prodashi * 9 / 100);

21. cout << "Zarobotok: $" << zarabotok << endl << endl;

22.

23. //запрашиваем ввод и сохраняем значение

24. cout << "Vvedite ob'yom prodash (dlya vihoda vvedite -1): $";

25. cin >> prodashi;

26. }

27. while (prodashi!= -1);

28.

29. return 0;

30.}

Результат работы программы:


4. Цикл for. Решим вот такую вот задачу:

Программа последовательно запрашивает у пользователя десять чисел и находит максимальное из них. Выводит результат на экран.

01.//Программа последовательно запрашивает у пользователя десять чисел,

02.//находит максимальное и печатает результат

03.

04.#include <iostream>

05.

06.using namespace std;

07.

08.int main()

09.{

10. int counter;

11. float number, largest;

12.

13. //запрашиваем первое число, запоминаем его

14. cout << "Inter: ";

15. cin >> largest;

16.

17. //запрашиваем остальные девять чисел в цикле for

18. for (counter = 1; counter <= 9; counter++)

19. {

20. cout << "Inter: ";

21. cin >> number;

22.

23. //если вновь введенное число больше, то перезаписываем max

24. if (number > largest)

25. largest = number;

26. }

27.

28. cout << endl << "Max: " << largest << endl;

29.

30. return 0;

31.}

Результат работы программы:


 

 





Поделиться с друзьями:


Дата добавления: 2016-09-06; Мы поможем в написании ваших работ!; просмотров: 481 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Велико ли, мало ли дело, его надо делать. © Неизвестно
==> читать все изречения...

2555 - | 2198 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.