Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 09:37   #1
surf135
Пользователь
 
Аватар для surf135
 
Регистрация: 29.05.2010
Сообщений: 33
Подмигивание Множества

Пусть вводится последовательность символов длиной не более 4. Если все вводимые символы цифры,то выполните преобразование данной последовательности в целое число.
Дорешайте чтобы из множества выводилось в строку

Код:
Uses WinCRT;                          
var s,st,str1,str2:string[4];
    i,j,k,n:INTEGER;
    mn,hn:set of char;
    ch:char;

Procedure insert;
Begin
Writeln('Введите число');
For i:=1 to 4 do
begin
ch:= readKey;
write(' <',ch,'> ');
s:=s+ch;
end;
str1:=s;
end;

Procedure Change;
Begin
Writeln;
hn:=['1','2','3','4','5','6','7','8','9','0'];
if not (s[i] in mn)
then include(mn,s[i]);
Begin
ch:=CHR(i);
If (ch in mn)and(ch in hn) then
st:=st+ch;
end;
if length(st)=length(str1) then
val(st,n,k);
If n=0 then Writeln('')
Else
Writeln('Целое число=> ',n);
End;

Begin
Insert;
Change;
Readln;
DoneWinCRT;
End.

Последний раз редактировалось Stilet; 11.06.2010 в 09:53.
surf135 вне форума Ответить с цитированием
Старый 11.06.2010, 09:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чепуха какая то...
Код:
Procedure insert;
var e,i:integer;
Begin
Writeln('Введите число');
i:=0;
For i:=1 to 4 do
begin
 ch:= readKey;
 write(' <',ch,'> ');
 s:=s+ch;
 if ch in ['0'..'9'] then inc(i);
end;
if i=length(s) then val(s,i,e);
 {Теперь i содержит число если все символы цифры}
str1:=s;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2010, 09:59   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да всё НАМНОГО проще:
Код:
var 
  isOnlyDigit : boolean;
  ...
begin
   isOnlyDigit := false;
... ввод s
   n:=0;
   if (length(s)>0) and (length(s)<=4) then begin
      isOnlyDigit := true;
      for i:=1 to length(s) do 
           if Not (s[i] in ['0'..'9']) then isOnlyDigit := false;
   end;
   if    isOnlyDigit then begin
         Val(s, n, k);
         WriteLn('Число равно ',n:1);
   end
   else
      WriteLn('Длина строки меньше 1 или больше 4-х или строка содержит не цифры.');
   readln;

Добавлено.
Виталий меня опередил... зато теперь у TC целых два разных варианта решения задачи
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.06.2010, 10:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вообще задача дурная как сало без хлеба, ибо решить ее можно одной процедурой Val(s, n, k);
Если k будет равно 0 то однозначно в строке число. А все эти выкрутасы придумывают "умные" доценты, которые сами мало рубят в реалиях программировании
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2010, 11:28   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Stilet,
коллега, я с Вами полностью согласиться не могу...
Потому что, учебные задачи - они потому и учебные, что отрабатываются какие-то простейшие приёмы.
а во вторых,
VAL это та ещё штучка!

Вот, например, как Вы думаете, чему будет равно K в таком коде (кстати, обратите внимание, что в строке НЕ ТОЛЬКО цифры!):
Код:
  s := '-.1';
  Val(s,n,k);
отвечу. зависит от типа переменной N - если N - вещественного типа, то ошибки не будет, K будет равно 0
а как Вам такая строчка?
Код:
   s := '   +1';
В ней и пробелы есть, и знак плюс.. а VAL отработает отлично! (К будет равно нулю!)
Так что, пускай TC учит и решает те задачи, которые ему придумывают "умные" доценты.
И не забывает, что не всё, чему учат - можно и нужно применять
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.06.2010, 11:57   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В ней и пробелы есть, и знак плюс
А нечего задавать отрицательные и вещественные...
Цитата:
они потому и учебные, что отрабатываются какие-то простейшие приёмы.
Ага, только ни одну из задач в реале применить нельзя, по себе знаю сколько бяки давали учителя, и ни одна из них нормально на практике не работала.
Ладно. Это уже полемика не по теме...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Множества Solnze2 Паскаль, Turbo Pascal, PascalABC.NET 0 09.06.2010 09:48
Множества Antonio_getscool Помощь студентам 3 11.03.2010 13:38
Множества Antonio_getscool Помощь студентам 1 11.03.2010 12:43
Множества Antonio_getscool Помощь студентам 0 11.03.2010 12:35
Множества Archangelos Паскаль, Turbo Pascal, PascalABC.NET 5 01.06.2009 11:26