Примеры решения задач. Реализация цикла на базе if и goto

Реализация цикла на базе if и goto

Обновление генератора псевдослучайных чисел

Если запустить программу «Угадай число!», то можно заметить, что компьютер всегда загадывает одно и то же число. Во избежание этого следует каждый раз обновлять начальное значение генератора псевдослучайных чисел командой

srand(time(0));

Функция time() расположена в библиотеке time.h.

Одна из фундаментальных и наиболее важных конструкций в программировании – это циклы; они позволяют повторить некоторые действия заданное число раз. Мы детально изучим циклы в соответствующей главе, а сейчас рассмотрим, как реализовать циклическую конструкцию на базе операторов if и goto. После этого вы сможете почувствовать основную идею цикла, а также лучше понять работу операторов if и goto.

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

  1. Если N больше, чем 0, то вывести число 1;
  2. Если N больше, чем 1, то вывести число 2;
  3. Если N больше, чем 2, то вывести число 3;
  4. Если N больше, чем 3, то вывести число 4;
  5. Если N больше, чем 4, то вывести число 5;

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

  • Условие(1) – Если N больше, чем 0;
  • Действие(1) – Вывести число 1;
  • Условие(2) – Если N больше, чем 1;
  • Действие(2) – Вывести число 2;
  • Условие(3) – Если N больше, чем 2;
  • Действие(3) – Вывести число 3;

Легко видеть, что все условия и действия можно записать в общем виде:

Шаг(i) – Если N больше, чем i-1, то вывести число i;

Тогда весь алгоритм можно записать так:

  1. Ввести N;
  2. i присвоить 1;
  3. Если истинно Условие(i), то выполнить Шаг(i) и перейти на шаг 2;

Теперь посмотрите, как это алгоритм будет выглядеть на языке Си:

//Ввести число N

int N;

cout << "Введите число N:\n";

cin >> N;

//Задать начальное значение

int i=1;

//Метка очередного шага

NEXT_STEP:

//Нужно ли продолжать

if (i<=N) {

//Выводим число

cout << i << " ";

//Увеличиваем на 1

i++;

//Переходим на очедедной шаг

goto NEXT_STEP;

}

Задача 1. Сумма углов треугольника равна 180 градусам. Напишите программу, которая принимает с клавиатуры три числа и проверяет, может ли треугольник иметь такие углы. Используйте оператор?:.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main() {

//Объявляем переменные для углов

float angle1, angle2, angle3;

//Вводим величины углов с клавиатуры

cout << "Введите угол 1:\n";

cin >> angle1;

cout << "Введите угол 2:\n");

cin >> angle2;

cout << "Введите угол 3:\n");

cin >> angle3;

//Вычисляем сумму углов

float sum = angle1 + angle2 + angle3;

//Проверяем, равна сумма 180 или нет

sum==180? cout << "Может": cout << "Нет";

system("pause");

return 0;

}

Задача 2. Автомобилистов, превысивших скорость, наказывают по следующей схеме: за превышение не более чем на 10 км/ч выносится предупреждение; за превышение не более чем на 20 км/ч водитель штрафуется на 100 рублей; не более чем на 40 км/ч300 рублей; не более чем на 60 км/ч1500 рублей; за превышение скорости более чем на 60 км/ч водитель карается лишением прав. На некотором участке дороги разрешённая скорость составляет 60 км/ч. Напишите программу, которая принимает с клавиатуры скорость водителя и сообщает, движется ли он с разрешённой скоростью, или же его следует наказать согласно описанной схеме. Используйте лесенку if-else-if.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main() {

float velocity;

cout << "Введите скорость:\n";

cin >> velocity;

if (velocity<=0) {

cout << "Ошибка ввода\n";

} else if (velocity<=60) {

cout << "Разрешенная скорость\n";

} else if (velocity<=70) {

cout << "Предупреждение\n";

} else if (velocity<=80) {

cout << "Штраф 100 рублей\n";

} else if (velocity<=100) {

cout << "Штраф 300 рублей\n";

} else if (velocity<=120) {

cout << "Штраф 1500 рублей\n";

} else {

cout << "Лишение прав\n";

}

system("pause");

return 0;

}

Задача 3. Напишите программу, которая принимает с клавиатуры номер дня недели и выводит его название. Используйте switch.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main() {

int day;

cout << "Введите номер дня:\n";

cin >> day;

switch (day) {

case 1: cout << "Понедельник"; break;

case 2: cout << "Вторник"; break;

case 3: cout << "Среда"; break;

case 4: cout << "Четверг"; break;

case 5: cout << "Пятница"; break;

case 6: cout << "Суббота"; break;

case 7: cout << "Воскресенье"; break;

default: cout << "Такого дня нет"; break;

}

system("pause");

return 0;

}

Задача 4. Напишите программу, которая принимает с клавиатуры целое число N и выводит на экран все делящиеся на 7 числа из диапазона от 1 до N, используя циклическую конструкцию на базе операторов if и goto.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main() {

int n;

cout << "Введите число:\n";

cin >> n;

int i=1;

start:

if (i<=n) {

if (i%7==0) {

cout << i << endl;

}

i++;

goto start;

}

system("pause");

return 0;

}

Задача 5. Напишите программу, которая по выбору пользователя отображает на экране квадрат, треугольник или крестик из звездочек.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main() {

cout << "Какую фигуру нарисовать?\n";

cout << "1 - квадрат\n";

cout << "2 - крестик\n";

cout << "3 - треугольник\n";

int choice;

cin >> choice;

switch (choice) {

case 1:

cout << "***\n* *\n***\n"; break;

case 2:

cout << " * \n***\n * \n"; break;

case 3:

cout << " * \n * * \n*****\n"; break;

default:

cout << "Неправильный выбор\n";

}

system("pause");

return 0;

}

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Объясните своими словами, зачем нужны условные операторы. Приведите примеры их использования.

2. Опишите синтаксис условного оператора if и приведите пример его использования. Изобразите его блок-схему и псевдокод.

3. Какие операции сравнения и логические операции вам известны? Объясните их действие и приведите примеры.

4. Как можно реализовать консольное меню при помощи логических операций и функций ввода/вывода?

5. Объясните работу оператора?:.

6. Что такое вложенные операторы if-else? Приведите пример и изобразите блок-схему с псевдокодом.

7. Что такое лесенка if-else-if? Приведите пример и изобразите для него блок-схему с псевдокодом.

8. Опишите синтаксис условного оператора switch.

9. Объясните работу оператора goto.

10. Как реализовать цикл на базе операторов goto и if? Изобразите его блок-схему и псевдокод.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: