![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Jahnerus |
![]()
Сообщение
#21
|
![]() Уникальный ![]() ![]() Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo
Цитата Jahnerus Я бы добавил еще кое-что: var x: longint; ... Readln(s); val(s, x, er); if (er<>0) or (er < -maxint) or (er > maxint) then writeln('Error'); Хе ! только щас увидел один нюанс ! ![]() Насколько я знаю процедура val возвращает код ошибки следующим образом, код ошибки - Цитата позиция в которой произошла ошибка при преобразовании, или нуль, если ошибки не было. а тогда встаёт вопрос нафига нужны два последних условия er < -maxint и er > maxint первое так ваще не понятно, потому что позиция по определению не может быть отрецательной, а второе (это что защита от запаршей клавиши или от дурака набирающего число длиной больше 32767 символов ![]() поэтому на мой взгляд оптимальный вариант это: Код var x: longint; ... Readln(s); val(s, x, er); if er<>0 then writeln('Error'); Сообщение отредактировано: Jahnerus - 5.12.2004 1:10 -------------------- Век живи, век учи С © by Jahnerus
|
volvo |
![]()
Сообщение
#22
|
Гость ![]() |
Jahnerus
Ошибка, конечно... Зачем er сравнивать с maxInt? Вот, что я имел в виду... Код var x: longint; ... Readln(s); val(s, x, er); if (er<>0) or (x < -maxint) or (x > maxint) then writeln('Error'); Просто если задана матрица Integer-ов, то я бы и оставил integer (а для этого надо проверить, не выходит ли введенное пользователем число из допустимого диапазона...) Сообщение отредактировано: volvo - 5.12.2004 1:10 |
Jahnerus |
![]()
Сообщение
#23
|
![]() Уникальный ![]() ![]() Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: ![]() ![]() ![]() |
Теперь всё встало на свои места ;)
Да и простите меня за мелочность: Integer -32768..32767 следовательно не (x < -maxint), а (x < (-maxint-1)). -------------------- Век живи, век учи С © by Jahnerus
|
ghost |
![]()
Сообщение
#24
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
Что-то не могу понять что за "er" такое, в идентификаторах его нет.
А как-бы в этой проге сделать так, чтобы можно было вводить матрицу А такого размера, какого захочет пользователь (в разумных пределах), а не только 6х6. |
volvo |
![]()
Сообщение
#25
|
Гость ![]() |
ghost
По-моему, так... Код const max_n = 30; var a,b:array[1..max_n,1..max_n] of integer; i,j,n1,n2:integer; s: string; x: longint; er: integer; bn: boolean; begin repeat write('matrix width = '); readln(n1); until (n1 <= max_n); repeat write('matrix height = '); readln(n2); until (n2 <= max_n); for i := 1 to n1 do for j := 1 to n2 do begin repeat write('a[', i, ',', j, '] = '); Readln(s); val(s, x, er); bn := (er<>0) or (x < -Pred(maxint)) or (x > maxint); if bn then writeln('Error'); until not bn; a[i,j] := x; end; for i := 1 to n1 do for j := 1 to n2 do begin if a[i,j] > 0 then b[i,j] := a[i,j] else b[i,j] := 0; end; for i := 1 to n1 do begin writeln; for j := 1 to n2 do Write(a[i,j]:3); end; for i := 1 to n1 do begin WriteLn; for j := 1 to n2 do Write(b[i,j]:3); end; end. Сообщение отредактировано: volvo - 14.12.2004 17:48 |
ghost |
![]()
Сообщение
#26
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
А можно сделать так чтобы число строк не обязательно было равно числу стобцов. И ещё, при выводе матриц происходит что-то не понятное, их не видно. Выводится лишь часть матрицы А, а в В тоже выводится часть, но если нажать enter, то остальные строки будут выводится по одной.
Сообщение отредактировано: ghost - 14.12.2004 17:04 |
volvo |
![]()
Сообщение
#27
|
Гость ![]() |
ghost
Исправлено... Сообщение отредактировано: volvo - 14.12.2004 17:41 |
ghost |
![]()
Сообщение
#28
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
Как будет выглядет б/с к этой немного переделанной проге
Код uses crt; const max_n = 9; var a,b:array[1..max_n,1..max_n] of integer; i,j,n1,n2,error:integer; s: string; x: longint; er: integer; bn: boolean; label e1; begin clrscr; gotoxy (3,10); writeln ('Данная программа задаёт матрицу А. После чего создаёт'); gotoxy (57,10); writeln ('новую матрицу B, где '); gotoxy (12,11); writeln ('а) B(i,j) = A(i,j), если A(i,j) > 0'); gotoxy (12,12); writeln ('б) B(i,j) не равно 0, если A(i,j) <= 0'); gotoxy (7,14); writeln ('Элементами матрицы могут быть только целые числа от -32768 до 32767,'); gotoxy (18,15); writeln ('максимальный размер матрицы 9х9!'); gotoxy (12,17); writeln ('текст'); gotoxy (27,18); writeln ('текст'); gotoxy (18,20); writeln ('Нажмите любую клавишу для продолжения'); readkey; e1: clrscr; repeat write('Введите кол-во строк = '); {$I-} readln(n1); error:=ioresult;{$I+} IF (n1<2) or (n1>max_n) or (error<>0) then writeln ('Кол-во строк от 2 до 9!'); until (n1 >= 2) and (n1<=max_n) and (error=0); repeat write('Введите кол-во столбцов = '); {$I-} readln(n2); error:=ioresult;{$I+} IF (n2<2) or (n2>max_n) or (error<>0) then writeln ('Кол-во столбцов от 2 до 9!'); until (n2 >= 2) and (n2<=max_n) and (error=0); for i := 1 to n1 do for j := 1 to n2 do begin repeat write('a[', i, ',', j, '] = '); Readln(s); val(s, x, er); bn := (er<>0) or (x < -Pred(maxint)) or (x > maxint); if bn then writeln('Введённый вами символ вне диапозона от -32768 до 32767'); until not bn; a[i,j] := x; end; for i := 1 to n1 do for j := 1 to n2 do begin if a[i,j] > 0 then b[i,j] := a[i,j] else b[i,j] := 0; end; clrscr; write('matrix A'); for i := 1 to n1 do begin writeln; for j := 1 to n2 do Write(a[i,j]:7); end; writeln; write('matrix B'); for i := 1 to n1 do begin writeln; for j := 1 to n2 do Write(b[i,j]:7); end; writeln (''); write('Вы хотите сделать ещё одну матрицу? y/n'); case readkey of #89: goto e1; #121: goto e1; #78: exit; #110: exit; end; end. |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 12:41 |