Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2009, 16:38   #1
Stratus
Новичок
Джуниор
 
Регистрация: 09.08.2009
Сообщений: 4
По умолчанию Вопрос с оператором выбора Case

Здравствуйте. Есть вопрос по написанию программы с оператором выбора.
Я только учусь, собственно, по какому-то учебнику и сам себе придумываю задачи после того или иного урока. Познакомился с оператором Case, но не все стало понятно.
Итак, суть программы в следующем: Сперва появляется запись-приветствие, потом представляется возможность выбора.
Еще вначале, в блоке описания программы, я сделал запись, что:
var a, ... ... ... : integer;
Итак, представляется выбор, который, по идее, и реализован должен быть оператором case. Делаю запись: case a of
1 : writeln('...');
read(b);
writeln('...');
... Целый ряд операторов...
2: writeln('...');
... Целый ряд операторов... И т.д.
Однако такой задум реализовать не получается. Уже в начале второго оператора(в моем случае - ввода readln) выскакивает ошибка: "Constant and Case types don't match".
Что делать?
Добавлять дополнительные begin... end; в разных местах пробовал, не особо помогает.
Понимаю, как реализовать такое через if - очень легко. Там после if... then ставится begin и всё идет, словно по маслу. Но хочется ведь разобраться, как такое делать с Case. Иначе зачем он тогда нужен?
Stratus вне форума Ответить с цитированием
Старый 09.08.2009, 17:06   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
case a of 
 1:begin
     ... Целый ряд операторов... 
    end;
 2:begin
     ... Целый ряд операторов... 
    end;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.08.2009, 17:10   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Попробуй так:
Код:
Case a of
1:Begin
     Writeln('Hallo!');
     ReadLn(b);
   End;
2:Write('World!');
3:A:=6;
End;
Любую группу операторов можно объеденить в блок.
Begin..End;
Теперь эта группа будет считываться программой грубо говоря как один оператор. В Case можно также выставлять последовательность значений:
Код:
Case a of
1..4:A:=3;
5..8:B:=3;
End;
Теперь при вводе чисел от 1 до 4 переменной А будет задано значение "3", а при вводе от 5 до 8 переменной В.
И главное: не забывай, что при окончании записи вариантов нужно закрывать оператор Case при помощи команды "End;":
Код:
Case XXX of
P1:..
P2:..
P3..P5:..
 Else
  YYY
 End;
Чуть опоздал(
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 09.08.2009, 21:16   #4
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

Все верно растолкованно!
Но можно добавить.
Так же можеш вот так:

Case a of
1:{Procedura 1};
2:{Procedura 2};
End;
Doholyan вне форума Ответить с цитированием
Старый 10.08.2009, 00:01   #5
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Цитата:
Сообщение от Doholyan Посмотреть сообщение
Все верно растолкованно!
Но можно добавить.
Так же можеш вот так:

Case a of
1:{Procedura 1};
2:{Procedura 2};
End;
Респект, кратко и ясно, хотел добавить, но добавить то уже нечего.
Небесный вне форума Ответить с цитированием
Старый 10.08.2009, 18:34   #6
Stratus
Новичок
Джуниор
 
Регистрация: 09.08.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Попробуй так:
Код:
Case a of
1:Begin
     Writeln('Hallo!');
     ReadLn(b);
   End;
2:Write('World!');
3:A:=6;
End;
Любую группу операторов можно объеденить в блок.

Чуть опоздал(

Попробовал делать так. Всё равно что-то не выходит. Через процедуру получилось, как написали ниже, но интересно ведь понять источник ошибки в таком случае... Скомпилировало без всяких вопросов и проблем, ошибок нет. Однако программа при выполнении сворачивается сразу же, когда дело доходит до Case. Ввожу я, допустим, 1, как показано выше, и все. Свернулось. Нажимаю алт-ф5, чтобы посмотреть, в чем дело... Последняя запись так и остается "1". Ничего более. С типами нарушений, вроде нет. Я прописываю Case a of... для а определен тип у меня integer.

Последний раз редактировалось Stratus; 10.08.2009 в 18:38.
Stratus вне форума Ответить с цитированием
Старый 10.08.2009, 18:38   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
Попробовал делать так.
Так покажите свой код. Пробовать еще не значит сделать. Если бы у Вас ошибок не было, все бы работало.
puporev вне форума Ответить с цитированием
Старый 10.08.2009, 18:47   #8
Stratus
Новичок
Джуниор
 
Регистрация: 09.08.2009
Сообщений: 4
По умолчанию

Сейчас...
Код:
program name;
uses crt;
var a: integer;
     H, R, S, V: real;
BEGIN
     clrscr;
     writeln('...');
     writeln('...');
     writeln('...');
   Case a of 
1: begin
    writeln('...');
    readln(R);
    write('... ');
    readln(H);
    V:=R*R*H*3.14;
    writeln('...', V:9:2);
end;
 2:begin
   writeln('...');
    readln(R);
    write('... ');
    readln(H);
    S:=2*3.14*R*H;
    writeln('...', S:9:2);
   end;
   END;
readln; {Для задержки }
End.
Вот такое
Stratus вне форума Ответить с цитированием
Старый 10.08.2009, 18:51   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Case a of
А откуда программа возьмет значение а????
puporev вне форума Ответить с цитированием
Старый 10.08.2009, 18:57   #10
Stratus
Новичок
Джуниор
 
Регистрация: 09.08.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Case a of
А откуда программа возьмет значение а????
ееееелки... Тьфу, стормозил. Главного не сделал.

Большое всем спасибо за помощь тут =)
Stratus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача с оператором case (Pascal) kena Помощь студентам 4 17.05.2009 12:54
Вопрос по Select Case DENGA-RU Microsoft Office Excel 2 23.04.2009 21:03
проблема с оператором for vakyla Общие вопросы Delphi 9 24.03.2009 20:07
проблемы с оператором Length Picaso18 Паскаль, Turbo Pascal, PascalABC.NET 1 21.01.2009 18:40