Помощь - Поиск - Пользователи - Календарь
Полная версия: сравнение строк...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
kleks
ТАкой вот вопросик: имеется матрица MxN типа integer, при заполнении данной матрицы, мне необходимо вводить такие числа, что бы они удовлетворяли промежутку -32768..32767, т.е. типу integer. Ничего умнея я не придумал, как вот:
Код
Program rer;
Uses CRT;
VAr a,b:string;
   i,m,n,error:integer;

Begin
 clrscr;
 a:='32767';
   repeat
 Write('Vvedite stroku b= ');   REadln(b);
  for i:=1 to length(a) do
    begin
 val (a[i],m,error);
 val (b[i],n,error);
 if length(b)>length(a) then writeln('Oshibka!!!')
   else if length(b)<length(a) then break
    else  if  n<m then break
       else if n=m then fl:=true
           else if n>m  then writeln('Oshibka!!!');
     end;
   until (length(b)<=length(a));
end.

Это конечно же не вся программа, а всего лишь кусочек; т.е я ввожу некую строку и сравниваю её с шаблоном, при этом проверяя различные условия. Но это только для '32767', а мне же ещё необходимо сравнивать и с '-32768' (отдельно, сравнение для данного шаблона я написать то смогу), а вот как это дело всё объеденить, т.е. чтобы я сразу сравнивал и c '32767' и '-32768' и потом это всё заключить в цикл.
P.S. Прошу не очень критично относится к моим предположениям, я только начиная изучать Pascal... unsure.gif :p2: И поэтому буду очень благодарен помощи!!!
klem4
Цитата
ТАкой вот вопросик: имеется матрица MxN типа integer, при заполнении данной матрицы, мне необходимо вводить такие числа, что бы они удовлетворяли промежутку -32768..32767, т.е. типу integer. Ничего умнея я не придумал, как вот:


for i := 1 to n do
 for j := 1 to m do 
   repeat
       readln(x[i,j]);
   until (x[i,j]>-32768)and(x[i,j]<32767);



ЗЫ
Цитата
имеется матрица MxN типа integer


причем тут строки ? blink.gif
volvo
Небольшое уточнение:
for i := 1 to n do
 for j := 1 to m do 
   repeat
       readln(x[i,j]);
   until (x[i,j]>-32768)and(x[i,j]<32767);
- избыточный вариант, т.к. Integer на 16-битных компиляторах физически не может содержать числа, НЕ попадающие в этот интервал... :yes:
Главное, чтобы не произошло Range-Check Error ... Вот это надо проверять.
kleks
Ах да, простите, забыл сказать: просто преподаватель в качестве задачки предложил придумать другой более сложный (идиотский) способ, да бы вспомнить (а в моём случае научиться) работу различных операторов...и работу со строками в целом!!!! Ещё раз извиняюсь...
klem4
Да ничего smile.gif Вот тебе на всякий пожарный FAQ Сроки
kleks
Цитата(volvo @ 22.09.2005 15:24)
....
Integer на 16-битных компиляторах физически не может содержать числа, НЕ попадающие в этот интервал...  :yes:
Главное, чтобы не произошло Range-Check Error ... Вот это надо проверять.

Вот как раз, наверное, из-за этого преподаватель нас и попросил сделать иначе, ведь если я введу например 32769, то компилятор примет моё число, хотя по идее оно и не попадает в заданное ограничение!!!!! Отсюда вопрос, как этого избежать...???
volvo
var
  s: string;
  num: longint;
  err: integer;
...
for i := 1 to n do
  for j := 1 to m do begin
    repeat
      readln(s);
      val(s, num, err);
    until (err = 0) and ((num > -32768) and (num < 32767));
    x[i, j] := num;
  end;
kleks
Спасибо ОГРОМНОЕ!!!!!!! :thanks: Всё гениальное - просто!!!!!!!!!!!! Ещё раз ОГРОМНЕЙШЕЕ СПАСИБО!!!!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.