Показать сообщение отдельно
Старый 24.04.2007, 17:30 ↑ #39
dkanus Мужской
cтарейшина эго-форума
 
Регистрация: 28.01.2007
Сообщений: 761
dkanus отключил(а) отображение уровня репутации
Exclamation Re: Уроки программирования на C++ для начинающих

Урок пятый - забытый switch + цикл своими руками
Вначале я хотел бы рассказать о таком спорном элементе как метки. Спорном, потому как спорят касательно целесообразности их применения, но об этом можно почитать отдельно (возможно как-нибудь напишу статью в соседнем разделе), а сейчас главное научиться с ними работать.
Итак, меткой можно отметить определенное место в тексте програмы, на которое впоследствии можно будет перейти с помощью оператора goto. Например эта програма никогда не кончится (готовтесь закрывать вручную):
Код:
#include <stdio.h>
void main()**
 here: // Отметили место
 puts("I'm here");
 goto here; // Т.к. команда перехода выполняется без условия (т.е.
                //всегда) мы будем вечно возвращаться...
}
Теперь попробуем добавить условие, например так:
Код:
#include <stdio.h>
#include <conio.h>
void main()**
short n, i = 1;
unsigned long fact = 1;
printf("Enter n: ");
scanf("%d", &n);
//////////////////
some_label:
fact = fact * i;
i = i + 1;
if(i <= n) goto some_label;
//////////////////
printf("n! = %d\n", fact);
getch();
}
Итак, эта программа вычисляет факториал введенного числа. Я выдеделил кусок кода представляющий для нас интерес. По сути это цикл. Строка "i = i + 1;" увеличивает i на единицу, а "if(i <= n) goto some_label;" кидает нас обратно к метке, если только i не больше чем n. Т.е. этот код повторяется n раз и каждый раз i всё больше, что мы и используем для вычисления факториала. Ведь если i пробегает путь от 1 до n, то нам нужно только перемножить все i, что мы и делаем. Роль циклов в программировании невозможно переоценить, они используются повсемесно. На следующем уроке мы рассмотрим готовые циклические конструкции.
Задание 1 - вывести на экран числа от 1 до n, где n - введённое пользователем число.

Теперь о switch. Это ещё один способ ветвления основанный на метках. Но работает он иначе.
Код:
...
int n;
...// здесь n стало чему-то равно
switch(n) // Передаём её switch
**
case 1: // если она равна 1, то перейдём сюда
puts("one");
case 2: // сюда если равна дву или единице, т.к. ничто не останавливает
           //програму идти дальше
puts("two");
break; // А вот после этой инструкции програма закончит выполнение
         //блока switch
case 3: // И это выполнится только при тройке
puts("three");
default: // А это будет выполнено если не подошли другие метки
           //(указывать необязательно) и при тройке, ибо мы не указали
           //break
puts("To big");
}
...
Задание 2 - модифицируйте программу так, чтобы всегда выводилась только одна строка и чтобы она различала 5 чисел.
dkanus вне форума   Ответить с цитированием