Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите найти ошибку в программе. PascalABC (http://www.tehnari.ru/f41/t106362/)

brickbazuka 14.01.2016 18:08

Помогите найти ошибку в программе. PascalABC
 
Каждую программу написать с использованием подпрограмм (процедуры или функции)
1. Дано натуральное число. Найти первую и последнюю цифры числа.
Program Lab51;

procedure Poisk(an:string);
var
p,t,i:integer;
begin
p:=Ord(an[1])-Ord('0');
i:=Length(an);
t:=Ord(an[i])-Ord('0');
Writeln('Pervaya cifra = ',p);
Writeln('Poslednyaya cifra = ',t);
end;

var
s:string;
begin
Writeln('Cislo:');
Readln(s);
Writeln;
Poisk(s);
end.
В программе, когда вбиваешь число например: 56, выводит все правильно первая 5 вторая 6, но также если вбить: "уйц", то выводит первая цифра 195, а вторая 198.
Помогите найти ошибку препод вынес мозг.

Vladimir_S 14.01.2016 19:42

Госс-споди, да что Вы там накрутили-то? На кой пёс Вам коды?! Уж если Вы считываете вводимое число, как строку, так и выводите первый и последний символы, да и всё тут! Например, так:
Код:

Program Lab51;

procedure Poisk(an:string);
var
 i:integer;
 Frst,Lst:Char;

begin
 i:=Length(an);
 Frst:=an[1];
 Lst:=an[i];
 Writeln('Pervaya cifra = ',Frst);
 Writeln('Poslednyaya cifra = ',Lst);
end;

var
 s:string;

begin
 Writeln('Cislo:');
 Readln(s);
 Writeln;
 Poisk(s);
end.


Евгений 14.01.2016 21:40

Владимир Игоревич, программку писал я. Через код из символов в ответ выводятся числа. Но не это важно(кто как хочет, так и делает).
Мне не понятно зачем вбивать "уйц" если в задании сказано, что дано натуральное число. Кстати было предоставлено 2 варианта: через "string" и через "LongInt".

Vladimir_S 14.01.2016 21:54

Цитата:

Сообщение от Евгений (Сообщение 1198562)
Владимир Игоревич, программку писал я. Через код из символов в ответ выводятся числа.

Женя, а вот всё равно не понимаю, на кой пёс коды. Почему не вывести прямо символы? Правда, через коды можно легко организовать фильтрацию ввода, чтобы на "уйц" программа попросту материлась, но ведь этого не сделано!
Кстати, подумал, что не худо бы такой фильтрик состряпать: предполагаю, что беды нашего страждущего проистекают от того, что зловредный преп вводит "уйц" и, тыкая пальцем в результат, вопрошает: "это чё?", слыша в ответ, естественно, "му-у..."
Ладно, сейчас перекурю и прикину.

Vladimir_S 14.01.2016 22:05

Ну вот, вариант с фильтром:
Код:

Program Lab51;

procedure Poisk(an:string);
var
 i:integer;
 Frst,Lst:Char;

begin
 i:=Length(an);
 Frst:=an[1];
 Lst:=an[i];
 Writeln('Pervaya cifra = ',Frst);
 Writeln('Poslednyaya cifra = ',Lst);
end;

var
 s:string;
 j,L:integer;
 b:boolean;

begin
 repeat
  b:=TRUE;
  Writeln('Cislo:');
  Readln(s);
  L:=Length(s);
  for j:=1 to L do
  if (Ord(s[j])<48) or (Ord(s[j])>57) then b:=FALSE;
  if b=FALSE then writeln('Eto ne chislo, povtorite vvod!');
 until b;
 Writeln;
 Poisk(s);
 Readln
end.


brickbazuka 15.01.2016 00:11

Цитата:

Сообщение от Vladimir_S (Сообщение 1198501)
Госс-споди, да что Вы там накрутили-то? На кой пёс Вам коды?! Уж если Вы считываете вводимое число, как строку, так и выводите первый и последний символы, да и всё тут! Например, так:
Код:

Program Lab51;

procedure Poisk(an:string);
var
 i:integer;
 Frst,Lst:Char;

begin
 i:=Length(an);
 Frst:=an[1];
 Lst:=an[i];
 Writeln('Pervaya cifra = ',Frst);
 Writeln('Poslednyaya cifra = ',Lst);
end;

var
 s:string;

begin
 Writeln('Cislo:');
 Readln(s);
 Writeln;
 Poisk(s);
end.


Спасибо большое!

brickbazuka 15.01.2016 00:12

Цитата:

Сообщение от Евгений (Сообщение 1198562)
Владимир Игоревич, программку писал я. Через код из символов в ответ выводятся числа. Но не это важно(кто как хочет, так и делает).
Мне не понятно зачем вбивать "уйц" если в задании сказано, что дано натуральное число. Кстати было предоставлено 2 варианта: через "string" и через "LongInt".

Преподавателю видите-ли не понравилось что она ещё и буквы вывод, говорит ошибкой, но вам тоже спасибо.


Часовой пояс GMT +4, время: 01:47.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.