Суббота, 04 Апреля 2020, 05:21

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Помогите с Pascal ABC (Помогите с Pascal ABC)
Помогите с 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 имя_метки), но это считается плохим тоном программирования. wacko


Robert200401Дата: Пятница, 08 Апреля 2016, 09:41 | Сообщение # 10
частый гость
Сейчас нет на сайте
TimKruz, чтобы на мобильных устройствах работало лучше писать вперед (вместо ё-е).
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Помогите с Pascal ABC (Помогите с Pascal ABC)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2020 Рейтинг