Помогите с Pascal ABC
|
|
staconik | Дата: Пятница, 01 Февраля 2013, 16:08 | Сообщение # 1 |
участник
Сейчас нет на сайте
| Всем привет! Помогите на писать 3 программы в среде Pascal ABC
1. Составить программу, которая предлагает Ивану-Царевичу выбрать правильное направление пути. У Ивана есть три варианта дальнейшего пути: направо - "Коня потеряешь" налево - "Голову сложишь" вперёд - "Невесту найдешь"
Вроде это очень просто, но я не понял суть.
2. Дано число (10<n<10000). Найти сумму цифр и максимальную цифру числа!
3. В заданном одномерном массиве, состоящим из n целых чисел, подсчитать количество чётных элементов!
Заранее спасибо!
|
|
| |
justfoler | Дата: Пятница, 01 Февраля 2013, 17:13 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| Вот код второго задания(про сумму цифр): Код var number:integer; SumOfDig:integer; begin number:=576; SumOfDig:=(number mod 1000 - number mod 100) div 100; SumOfDig:= SumOfDig +(number mod 100 - number mod 10) div 10; SumOfDIg:= SumOfDig + (number mod 10);
writeln(SumOfDig);
readln; end.
Вот третьего: Код const n=10; var arr:array[1..n] of integer; i,k:integer; begin randomize; k:=0;
for i:=1 to n do begin arr[i]:=random(50)+1; write(' ',arr[i]); end;
writeln;
for i:=1 to n do if arr[i] mod 2 = 0 then k:=k+1;
writeln(k); readln; end.
|
|
| |
fireday | Дата: Пятница, 01 Февраля 2013, 17:30 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| В чем проблема самому сделать? Задачи элементарные п.с. В первой задаче, я так понимаю, хотят увидеть конструкцию кейс оф.
|
|
| |
justfoler | Дата: Пятница, 01 Февраля 2013, 17:44 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| Это третье:Код const n=10; var arr:array[1..n] of integer; i,k:integer; begin randomize; k:=0;
for i:=1 to n do begin arr[i]:=random(50)+1; write(' ',arr[i]); end;
writeln;
for i:=1 to n do if arr[i] mod 2 = 0 then k:=k+1;
writeln(k); readln; end. Это второе: Код var number:integer; SumOfDig:integer; begin number:=576; SumOfDig := (number mod 1000 - number mod 100) div 100; SumOfDig := SumOfDig + (number mod 100 number mod 10) div 10; SumOfDig := SumOfDig + number mod 10; writeln(SumOfDig); readln; end.
|
|
| |
staconik | Дата: Пятница, 01 Февраля 2013, 17:58 | Сообщение # 5 |
участник
Сейчас нет на сайте
| justfoler, спасибо) Зайду с компа + поставлю)
|
|
| |
Andrey_M | Дата: Вторник, 05 Февраля 2013, 19:39 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| Цитата (staconik) 1. Составить программу, которая предлагает Ивану-Царевичу выбрать правильное направление пути. У Ивана есть три варианта дальнейшего пути: направо - "Коня потеряешь" налево - "Голову сложишь" вперёд - "Невесту найдешь" Код var path: string;
procedure right; begin writeln(Иван Царевич потерял коня, упал о землю, тут ему и конец пришёл.); Readln; exit; end;
procedure left; begin writeln('Иван Царевич голову сложил и умер.'); Readln; exit; end;
procedure forward; begin writeln('Иван Царевич пошёл прямо вперёд, и невесту нашёл. Жили они вместе долго и счастливо.'); writeln('WIN!'); Readln; exit; end;
begin case path of 'направо': right; 'налево': left; 'вперёд': forward; end; Readln; end.
ЪЪЪЪ! Лучшая благодарность - плюс в репутацию :-)
|
|
| |
Destroy | Дата: Вторник, 05 Февраля 2013, 19:49 | Сообщение # 7 |
постоянный участник
Сейчас нет на сайте
| Цитата (Andrey_M) case path of 'направо': right; 'налево': left; 'вперёд': forward; end;
case не поддерживает тип string
|
|
| |
Andrey_M | Дата: Вторник, 05 Февраля 2013, 20:29 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| БЛИИИН...
Код var path: string;
procedure right; begin writeln(Иван Царевич потерял коня, упал о землю, тут ему и конец пришёл.); Readln; exit; end;
procedure left; begin writeln('Иван Царевич голову сложил и умер.'); Readln; exit; end;
procedure forward; begin writeln('Иван Царевич пошёл прямо вперёд, и невесту нашёл. Жили они вместе долго и счастливо.'); writeln('WIN!'); Readln; exit; end;
begin writeln('Подошёл Иван к камню, а на камне три надписи - три пути для Ивана:'); writeln('направо - "Коня потеряешь"'); writeln('налево - "Голову сложишь"'); writeln('вперёд - "Невесту найдешь" '); repeat; writeln('Куда пойти Ивану-Царевичу?'); readln(path); if path='направо' then right else if path='налево' then left else if path='вперёд' then forward else Until false; Readln; end.
ЪЪЪЪ! Лучшая благодарность - плюс в репутацию :-)
|
|
| |
TimKruz | Дата: Вторник, 05 Февраля 2013, 22:06 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| Цитата (Destroy) case не поддерживает тип string Правильно, case работает только с перечислимыми типами данных, а string - это что-то типа контейнера (массива символов). Andrey_M, в последнем варианте у тебя, во-первых, лишний else в конце, во-вторых, программа просто зациклится и будет бесконечно требовать послать Царевича по адресу. Exit в процедуре выходит только из конкретной процедуры, а не из программы, поэтому ставить его в конце процедуры бессмысленно. Можно использовать halt(код_выхода), но это неправильно в данном случае, потому что тогда нельзя будет выполнить код после цикла repeat (а вдруг понадобится дополнить программу следующими этапами похождений нашего Ивана-Царевича?). Кстати, зачем тебе в каждой процедуре лишний readln, если он есть после цикла repeat? А после repeat точки с запятой не нужно. Короче, правильнее будет, например, так: Код var path:string; ok:boolean;
procedure right; begin writeln(Иван Царевич потерял коня, упал о землю, тут ему и конец пришёл.'); end;
procedure left; begin writeln('Иван Царевич голову сложил и умер.'); end;
procedure forward; begin writeln('Иван Царевич пошёл прямо вперёд, и невесту нашёл. Жили они вместе долго и счастливо.'); end;
begin writeln('Подошёл Иван к камню, а на камне три надписи - три пути для Ивана:'); writeln('направо - "Коня потеряешь"'); writeln('налево - "Голову сложишь"'); writeln('вперёд - "Невесту найдешь"'); ok:=true; repeat if not ok then writeln('Неверное направление!'); ok:=true; writeln('Куда пойти Ивану-Царевичу?'); readln(path); if path='направо' then right else if path='налево' then left else if path='вперёд' then forward else ok:=false; until ok; readln; end. Ну это если кроме вывода фразы нужно ещё что-то сделать будет. А вообще, в данном случае правильнее будет так: Код var path:string; ok:boolean; begin writeln('Подошёл Иван к камню, а на камне три надписи - три пути для Ивана:'); writeln('направо - "Коня потеряешь"'); writeln('налево - "Голову сложишь"'); writeln('вперёд - "Невесту найдешь" '); ok:=true; repeat if not ok then writeln('Неверное направление!'); ok:=true; writeln('Куда пойти Ивану-Царевичу?'); readln(path); if path='направо' then writeln(Иван Царевич потерял коня, упал о землю, тут ему и конец пришёл.') else if path='налево' then writeln('Иван Царевич голову сложил и умер.') else if path='вперёд' then writeln('Иван Царевич пошёл прямо вперёд, и невесту нашёл. Жили они вместе долго и счастливо.') else ok:=false; until ok; readln; end. Ещё вместо цикла можно использовать метки (label) и переходы по ним (goto имя_метки), но это считается плохим тоном программирования.
|
|
| |
Robert200401 | Дата: Пятница, 08 Апреля 2016, 09:41 | Сообщение # 10 |
частый гость
Сейчас нет на сайте
| TimKruz, чтобы на мобильных устройствах работало лучше писать вперед (вместо ё-е).
|
|
| |