Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 53

Заменить в программе if на case

29.09.2014, 17:08. Показов 5847. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите заменит в программе if-ы на case-ы.
Вот сама программа:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Program cwadr (input, output);
label 20;
var a, b, c, d, e, d1, x, x1, x2 : real;
begin
writeln ('введите a, b, c'); readln (a, b, c);
if a=0 then begin
if b=0 then begin
if c=0 then begin
writeln ('x-любое число');
goto 20;
end;writeln ('решений нет');
goto 20;
end;
writeln ('корень один x= ', x);
goto 20;
end;
d:= b*b-4*a*c;
e:= 2*a;
if d=0 then begin
writeln ('корни кратные х1 = х2 = ', -b/e);
goto 20;
end;
d1:= sqrt (abs (d));
if d<0 then begin
writeln ('корни комплексно-сопряженные');
writeln ('x1 = ', -b/e, ' -i* ', d1/e);
writeln ('x2 = ', -b/e, ' +i* ', d1/e);
goto 20; end;
writeln ('корни действительные');
writeln ('x2 = ', ( - b+d1)/e );
writeln ('x1 = ', ( - b+d1)/e );
20;
end
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2014, 17:08
Ответы с готовыми решениями:

Заменить множественный if на оператор case
Program Oper_vybora; var n:integer; begin writeln('Введите число'); readln (n); if (n&gt;=0) and (n&lt;=9) then writeln('одно...

В программе использовать подпрограмму function, для вывода результата case
Вычислить,написав программу: s=at+b at&lt;1 s=cos(at) at=1 ...

Заменить If на case
uses crt; var a:integer; begin readln(a); if a=5 then writeln('Вы учитесь Отлично') else if a=4 then writeln('Вы учитесь...

6
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
29.09.2014, 19:29
А смысл? Все селекторы (a, b, c, d, d1) действительные (Real), а case ... of требует в качестве селектора ординалы, к коим Real не относится.

Добавлено через 1 минуту
PS. От goto благополучно избавлено там: https://www.cyberforum.ru/post6658682.html
0
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 53
29.09.2014, 19:54  [ТС]
У меня такое задание.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
29.09.2014, 20:10
Тогда берёте программу по приведённой выше ссылке и меняете
Pascal
1
2
3
4
if условие then
  нечто_1 
else
  нечто_2;
на
Pascal
1
2
3
4
5
6
case условие of
true:
  нечто_1;
false:
  нечто_2;
end;
Если кто-то предложит менее уродливую замену, хотелось бы посмотреть.

Добавлено через 11 минут
Можно также менять на
Pascal
1
2
3
4
5
6
case условие of
true:
  нечто_1;
else
  нечто_2;
end;
В сухом остатке этот ужас может выглядеть так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
procedure SolveSqEq(a, b, c: Real);
var
  d, e, f: Real;
begin
  case a=0 of
  true: 
    case b=0 of
    true:
      case c=0 of
      true:
        WriteLn('x - любое число');
      false:
        WriteLn('решений нет');
      end;
    false:
      WriteLn('корень один, x = ',-c/b);
    end;
  false:
    begin
      d:=b*b-4*a*c;
      e:=2*a;
      case d=0 of
      true:
        writeln ('корни кратные, х1 = х2 = ', -b/e);
      false:
        begin
          f:=sqrt(abs(d));
          case d<0 of 
          true:
            begin
              WriteLn ('корни комплексно-сопряженные');
              WriteLn ('x1 = ', -b/e, ' -i* ', f/e);
              WriteLn ('x2 = ', -b/e, ' +i* ', f/e);
            end; 
          false:
            begin
              WriteLn('корни действительные');
              WriteLn('x1 = ', (-b+f)/e);
              WriteLn('x2 = ', (-b-f)/e);
            end;
          end;
        end;
      end;
    end;
  end;
end;
 
var a, b, c: Real;
begin
  Write('Введите a, b, c: '); ReadLn(a,b,c);
  SolveSqEq(a,b,c);
end.
0
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 53
30.09.2014, 12:21  [ТС]
Спасибо большое.

Добавлено через 14 часов 52 минуты
А можешь объяснить, что в программе значит SolveSqEq?
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
30.09.2014, 12:27
Процедуру так зовут, от solve square equation, перевод см. в англо-русском словаре.
0
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,454
30.09.2014, 17:44
bormant, могу предложить более уродливую замену... С вычислением индекса для case... Вот так как-то (пример):
Pascal
1
2
3
4
5
6
7
ci := (((ord(a = 0) * 2) + ord(b = 0) * 2) + ord(d < 0) * 2) + ord(d = 0);
case ci of
  1..5: //...
  7: //...
  15: //...
  else //...
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2014, 17:44
Помогаю со студенческими работами здесь

Как заменить if на case
program abc; uses crt; var s: string; n, c: integer; begin write('ñòðîêà '); readln(s); for c:=1 to length(s) do if s...

Заменить if на case
Добрый день! С этим фрагментом кода у меня было уже много проблем, что-то я решил, а что-то (по моему мнению) можно решить, заменив...

Проконсультируйте по программе в Concole Application, а именно с массивом, for, и case of
Доброго времени суток, мне дали в институте задание, написать программу, опрашивающую пользователя о его оценках по всем пройденным...

Чем можно заменить Switch -- case ?
Доброго времени суток, уважаемые форумчане! Помогите решить проблему с case. В этой программе нужно создать множественный выбор, который...

Как заменить содержимое case на функции пользователя?
Написал программу для работы с одномерным массивом в котором реализован интерфейс пользователя, а теперь необходимо в разделе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru