Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
vatson744
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 44
#1

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

29.09.2014, 17:08. Просмотров 1418. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2014, 17:08
Ответы с готовыми решениями:

Заменить цикл в программе
вот собственно программа uses crt; var a,n: longint; i:byte; begin...

Заменить функцию на процедуру в программе
program str; function IsPresent(const s1,s2:string):boolean; var i:integer;...

В программе заменить функцию goto
Помогите пожалуйста заменить goto на процедуру. Я никак не понимаю как это...

Как Заменить в программе ноль
Дан массив размера N. Вычислить среднее арифметическое и кол – во отрицательных...

Вопросы к программе - В заданном тексте заменить все встречающиеся пары из одинаковых цифр, словом ‘две’.
Задача: В заданном тексте заменить все встречающиеся пары из одинаковых цифр,...

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

Добавлено через 1 минуту
PS. От goto благополучно избавлено там: http://www.cyberforum.ru/post6658682.html
0
vatson744
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 44
29.09.2014, 19:54  [ТС] #3
У меня такое задание.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3759 / 2456 / 2035
Регистрация: 22.11.2013
Сообщений: 6,829
29.09.2014, 20:10 #4
Тогда берёте программу по приведённой выше ссылке и меняете
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
vatson744
0 / 0 / 0
Регистрация: 28.09.2014
Сообщений: 44
30.09.2014, 12:21  [ТС] #5
Спасибо большое.

Добавлено через 14 часов 52 минуты
А можешь объяснить, что в программе значит SolveSqEq?
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3759 / 2456 / 2035
Регистрация: 22.11.2013
Сообщений: 6,829
30.09.2014, 12:27 #6
Процедуру так зовут, от solve square equation, перевод см. в англо-русском словаре.
0
Cyborg Drone
Модератор
5273 / 3141 / 2440
Регистрация: 17.08.2012
Сообщений: 10,115
30.09.2014, 17:44 #7
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
30.09.2014, 17:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2014, 17:44

Тип integer в программе заменить на real
В данной программе рассматривается сортировка методом простого...

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru