Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 14.01.2016, 18:08   #1 (permalink)
brickbazuka
Новичок
 
Регистрация: 12.01.2016
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите найти ошибку в программе. 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.
Помогите найти ошибку препод вынес мозг.
brickbazuka вне форума   Ответить с цитированием

Старый 14.01.2016, 18:08
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Посмотрите, может быть в обсуждаемых топиках проблема уже решена

Помогите исправить ошибку в программе. Паскаль
Найти ошибку в программе
Помогите найти ошибку в программе на Си

Старый 14.01.2016, 19:42   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Госс-споди, да что Вы там накрутили-то? На кой пёс Вам коды?! Уж если Вы считываете вводимое число, как строку, так и выводите первый и последний символы, да и всё тут! Например, так:
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 14.01.2016, 21:40   #3 (permalink)
Евгений
Member
 
Аватар для Евгений
 
Регистрация: 31.03.2010
Адрес: Тульская область
Сообщений: 1,309
Сказал(а) спасибо: 11
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 13090
По умолчанию

Владимир Игоревич, программку писал я. Через код из символов в ответ выводятся числа. Но не это важно(кто как хочет, так и делает).
Мне не понятно зачем вбивать "уйц" если в задании сказано, что дано натуральное число. Кстати было предоставлено 2 варианта: через "string" и через "LongInt".
Евгений вне форума   Ответить с цитированием
Старый 14.01.2016, 21:54   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Евгений Посмотреть сообщение
Владимир Игоревич, программку писал я. Через код из символов в ответ выводятся числа.
Женя, а вот всё равно не понимаю, на кой пёс коды. Почему не вывести прямо символы? Правда, через коды можно легко организовать фильтрацию ввода, чтобы на "уйц" программа попросту материлась, но ведь этого не сделано!
Кстати, подумал, что не худо бы такой фильтрик состряпать: предполагаю, что беды нашего страждущего проистекают от того, что зловредный преп вводит "уйц" и, тыкая пальцем в результат, вопрошает: "это чё?", слыша в ответ, естественно, "му-у..."
Ладно, сейчас перекурю и прикину.
Vladimir_S вне форума   Ответить с цитированием
Старый 14.01.2016, 22:05   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну вот, вариант с фильтром:
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 15.01.2016, 00:11   #6 (permalink)
brickbazuka
Новичок
 
Регистрация: 12.01.2016
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Госс-споди, да что Вы там накрутили-то? На кой пёс Вам коды?! Уж если Вы считываете вводимое число, как строку, так и выводите первый и последний символы, да и всё тут! Например, так:
Код:
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   #7 (permalink)
brickbazuka
Новичок
 
Регистрация: 12.01.2016
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.