Використання операторів передачі управління GOTO, Різне, Програмування, статті

1. Трохи теорії:

Оператор GOTO
Конструкція оператора має вигляд:

goto <ім'я мітки>;
*** <Ім'я мітки>: оператор;

Оператор goto передає управління безпосередньо на оператор, позначений міткою <ім'я мітки>. Позначений оператор виконується відразу ж після виконання оператора goto, якщо оператор з даною міткою відсутня або їсти більше одного оператора зазначеного однієї і тієї ж міткою, то видається повідомлення про помилку.
Приклад:

if ( errorcode > 0 )
goto exit;
***
exit: return(errorcode);

У прикладі оператор goto передає управління на оператор, позначений міткою exit, коли відбувається помилка.
Мітка – це простий ідентифікатор. Її ім’я не повинно збігатися з будь-якими службовими або зарезервованими словами С. Назви міток для однієї ф-і повинні бути різними.

Оператор CONTINUE
Даний оператор передає управління на наступну ітерацію в операторах циклу do, for, while. Оператори, які залишилися в тілі вищевказаних циклів при цьому не виконуються. В середині циклу do, while така ітерація означає перехід до перерахунку умовних виразів і циклу. Для оператора for така ітерація призводить до приросту змінних циклу и перерахунку умовного вираження циклу.
Приклад:

while (i > 0 )
{
x = f(i);
if (x == 1) continue;
y = x*x;
}

Тіло оператора виконується, якщо и> 0. спочатку значення f (i) присвоюється змінної х, потім, якщо х = 1 виконується оператор сontinue, При цьому інші оператори тіла циклу ігноруються і виконання циклу повторюється з його заголовка.

2. Тепер пропонується для розгляду исходник квадратного рівняння, написаний з використанням вищевказаних операторів, з відповідними місцем коментарями. / / Кв.уравненіе

# Include  / / бібліотека введення / виводу # Include  / / бібліотека матем. функцій # Include  / / бібліотека для роботи з екраном – для getch () і clrscr () # Include  / / бібліотека потокового введення / виводу – для cout і cin
float a, b, c, d, x1, x2; / / змінні void main () / / головна ф-я
{ clrscr (); / / очистимо екран cout << "nVvedit A->“; / / організуємо введення коефіціента рівняння з допомогою cin >> a; / / ф-й потокового вводу-виводу (cout і cin з бібліотеки iostream.h)
cout << “nVvedit B->”;
cin >> b;
cout << “nVvedit C->”;
cin >> c; d = pow (b, 2) – (4 * a * c); / / знайдемо дискримінант if (d <0) goto d1; / / перевіряємо умови, і, за допомогою if (d == 0) goto d2; / / міток переходимо до відповідного блоку if (d>0) goto d3; d1: {/ / блок 1: дискриминант <0 printf("nKoreniv nema"); goto exit; / / безумовний перехід на exit } d2: {/ / блок 2: дискриминант = 0 x1=-b/(2*a) printf("nx = %f",x1); goto exit; / / безумовний перехід на exit } d3: {/ / блок 3: дискриминант> 0
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
printf(“nx1 = %f”,x1);
printf(“nx2 = %f”,x2); goto exit; / / безумовний Перехід на exit
} exit: / / мітка використана для переходу до / / Кінця програми getch (); / / програма чекає натискання будь-якої клавіші для переходу далі } / / Кінець Програми

Замітка: Не варто зловживати операторами передачі управління – я думаю (хоча, не тільки я), що це руйнує логічну структуру програми, проте, якщо вони дійсно необхідні, ними можна користуватися.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*