Организация меню. Управляющая структура выбор (switch) — КиберПедия 

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Организация меню. Управляющая структура выбор (switch)

2022-10-28 18
Организация меню. Управляющая структура выбор (switch) 0.00 из 5.00 0 оценок
Заказать работу

Организация простейшего меню

 

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

 

Выберите один из вариантов:

1. Ввод чисел с клавиатуры

2. Генерация случайных чисел

3. Выход из программы

 

Введите номер выбранного пункта:___

Меню в программе удобно реализовывать через оператор ВЫБОР (В Паскале case, в Си – switch).

 

Выбор

 

Продемонстрируем использование меню на следующей задаче:

По трем сторонам треугольника нужно вычислить его площадь.

Для вычисления будем использовать формулу , где a, b, c – стороны треугольника, а p – полупериметр .

Решение на Паскале:

Uses crt;

var

a, b, c: real; {Стороны треугольника}

p: real; {Полупериметр треугольника}

s: real; {Площадь треугольника}

ch: char; {Выбранный пункт меню}

Begin

Clrscr();

While true do {Бесконечный цикл}

Begin

Writeln(‘Выберите один из вариантов:’);

Writeln(‘1. Ввод чисел с клавиатуры’);

Writeln(‘2. Генерация случайных чисел’);

Writeln(‘3. Выход из программы’);

Writeln(‘Введите номер выбранного пункта: ’);

ch:= readkey;

{Если ввели правильный параметр – выходим из цикла}

if (ch = ‘1’) or (ch = ‘2’) or (ch = ‘3’) then

break;

{Если ввели неправильный параметр – снова меню…}

Clrscr;

writeln(‘Вы ввели неверный номер варианта.’);

writeln;

end;

 

case ch of

‘1’: {Ввод с клавиатуры}

  begin

    writeln(‘Введите стороны треугольника’);

    write(‘a = ’);

    read(a);

    write(‘b = ’);

    read(b);

    write(‘c = ’);

    read(c);

  end;

 

‘2’: {Генерация случайных значений}

  begin

    randomize;

    {Для сгенерированных чисел соблюдается условие:}

    {любая из сторон меньше суммы двух других.}

    a:= 6 + random(5); {a = [6..10]}

    b:= 6 + random(5); {b = [6..10]}

    c:= 6 + random(5); {c = [6..10]}

  end;

 

‘3’: {Выход из программы}

  exit;

end;

 

{Вывод значений сторон}

writeln(‘a = ‘, a:0:1, ‘, b = ‘, b:0:1, ‘, c = ‘, c:0:1);

{Вычисление площади}

p:= (a + b + c) / 2;

s:= sqrt(p * (p - a) * (p - b) * (p - c));

{Вывод площади}

writeln(‘s = ‘, s:0:1);

end.

 

Решение на Си:

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <math.h>

 

int main()

{

float a, b, c; //Стороны треугольника

float p; //Полупериметр треугольника

float s; //Площадь треугольника

char ch; //Выбранный пункт меню

 

clrscr();

while (1) //Бесконечный цикл

{

printf("Выберите один из вариантов:\n");

printf("1. Ввод чисел с клавиатуры\n");

printf("2. Генерация случайных чисел\n");

printf("3. Выход из программы\n");

printf("Введите номер выбранного пункта: \n");

ch = getch();

//Если ввели правильный параметр - выходим из цикла

if (ch == '1' || ch == '2' || ch == '3') break;

//Если ввели неправильный параметр - снова меню

clrscr();

printf("Вы ввели неверный номер варианта.\n\n");

}

 

switch (ch)

{

case '1': //Ввод с клавиатуры

printf("Введите стороны треугольника\n");

printf("a = ");

scanf("%f", &a);

printf("b = ");

scanf("%f", &b);

printf("c = ");

scanf("%f", &c);

break;

 

case '2': //Генерация случайных значений

randomize();

//Для сгенерированных чисел соблюдается условие:

//любая из сторон меньше суммы двух других.

a = 6 + random(5); //a = [6..10]

b = 6 + random(5); //b = [6..10]

c = 6 + random(5); //c = [6..10]

break;

 

case '3': //Выход из программы

return 0;

}

// Вывод значений сторон

printf("a = %f, b = %f, c = %f\n", a, b, c);

//Вычисление площади

p = (a + b + c) / 2;

s = sqrt(p * (p - a) * (p - b) * (p - c));

//Вывод площади

printf("s = %0.1f", s);

return 0;

}

 

Сравним выбор в Паскале и в Си:

Паскаль Си
case c of ‘1’: {Ввод с клавиатуры}   begin   …   end; ‘2’: {Генерация случайных}                       {значений}   begin   …   end; ‘3’: {Выход из программы}   exit; end; switch (c) { case ‘1’: //Ввод с клавиатуры   …   break; case ‘2’: //Генерация случайных        //значений   …   break; case ‘3’: //Выход из программы   return; }  

 

 

Отличие выбора в Паскале и Си видно из примера и из формального описания синтаксиса:

 

Паскаль:

case ПЕРЕКЛЮЧАТЕЛЬ of

СПИСОК_КОНСТАНТ_1: ОПЕРАТОР_1;

СПИСОК_КОНСТАНТ_2: ОПЕРАТОР_2;

СПИСОК_КОНСТАНТ_N: ОПЕРАТОР_N;

Else ОПЕРАТОР_E;

End

 

Си:

switch ( ПЕРЕКЛЮЧАТЕЛЬ )

{

case КОНСТАНТА_1:ОПЕРАТОРЫ_1; break;

case КОНСТАНТА_2:ОПЕРАТОРЫ_2; break;

case КОНСТАНТА_N:ОПЕРАТОРЫ_N; break;

default: ОПЕРАТОРЫ_E;

}

 

В Си выбор можно использовать более сложным способом. Продемонстрируем на примере: Вводится число N (1<=N<=5). Нужно вычислить и вывести y = .

 

Реализация на Си:

#include <stdio.h>

 

int main()

{

int n, y;

printf(“Введите N = ”);

scanf(“%d”, &n);

y = 1;

switch (n)

{

case 5: y *= 3;

case 4: y *= 3;

case 3: y *= 3;

case 2: y *= 3;

case 1: y *= 3;

       break;

default: y = 0;

}

printf(“y = %d”, y);

return 0;

}

 

Эту программу наглядно поясняет графическая схема алгоритма:

 

 

То есть если в конце варианта выбора не стоит break, то после выполнения кода для этого варианта будет выполняться код для следующего варианта. В нашем примере после кода для варианта case 3 будет выполняться код для варианта case 2.

 

МАССИВЫ В СИ

 


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

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.022 с.