14.01.2016, 18:08 | #1 (permalink) |
Новичок
Регистрация: 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. Помогите найти ошибку препод вынес мозг. |
14.01.2016, 18:08 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Посмотрите, может быть в обсуждаемых топиках проблема уже решена Помогите исправить ошибку в программе. Паскаль Найти ошибку в программе Помогите найти ошибку в программе на Си |
14.01.2016, 19:42 | #2 (permalink) |
Специалист
Регистрация: 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. |
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) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Кстати, подумал, что не худо бы такой фильтрик состряпать: предполагаю, что беды нашего страждущего проистекают от того, что зловредный преп вводит "уйц" и, тыкая пальцем в результат, вопрошает: "это чё?", слыша в ответ, естественно, "му-у..." Ладно, сейчас перекурю и прикину. |
|
14.01.2016, 22:05 | #5 (permalink) |
Специалист
Регистрация: 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. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
15.01.2016, 00:11 | #6 (permalink) | |
Новичок
Регистрация: 12.01.2016
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
|
|
15.01.2016, 00:12 | #7 (permalink) | |
Новичок
Регистрация: 12.01.2016
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|