IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> сравнение строк...
kleks
сообщение 22.09.2005 14:14
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


ТАкой вот вопросик: имеется матрица 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: И поэтому буду очень благодарен помощи!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 22.09.2005 14:16
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
ТАкой вот вопросик: имеется матрица 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

Сообщение отредактировано: klem4 - 22.09.2005 14:18


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.09.2005 14:24
Сообщение #3


Гость






Небольшое уточнение:
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
сообщение 22.09.2005 14:35
Сообщение #4





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Ах да, простите, забыл сказать: просто преподаватель в качестве задачки предложил придумать другой более сложный (идиотский) способ, да бы вспомнить (а в моём случае научиться) работу различных операторов...и работу со строками в целом!!!! Ещё раз извиняюсь...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 22.09.2005 14:38
Сообщение #5


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Да ничего smile.gif Вот тебе на всякий пожарный FAQ Сроки


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kleks
сообщение 22.09.2005 17:41
Сообщение #6





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 22.09.2005 15:24)
....
Integer на 16-битных компиляторах физически не может содержать числа, НЕ попадающие в этот интервал...  :yes:
Главное, чтобы не произошло Range-Check Error ... Вот это надо проверять.

Вот как раз, наверное, из-за этого преподаватель нас и попросил сделать иначе, ведь если я введу например 32769, то компилятор примет моё число, хотя по идее оно и не попадает в заданное ограничение!!!!! Отсюда вопрос, как этого избежать...???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.09.2005 18:09
Сообщение #7


Гость






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
сообщение 22.09.2005 18:26
Сообщение #8





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Спасибо ОГРОМНОЕ!!!!!!! :thanks: Всё гениальное - просто!!!!!!!!!!!! Ещё раз ОГРОМНЕЙШЕЕ СПАСИБО!!!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 7:26
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"