Ввод и вывод матрицы, Вопросы по кодингу |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Ввод и вывод матрицы, Вопросы по кодингу |
Relrin |
29.04.2011 21:10
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
У меня написаны следующие кусочки кода, которые производят ввод и вывод информации, однако возникли вопросы:
1) Что нужно исправить, чтобы при вводе было ограничение по количеству знаков числа (т.е. ограничить пользователя на ввод данных до 7 знаков(включая точку? т.е. например дробное число, состоящее из одного знака в целой части+точка+5 знаков после запятой)) Пример: A 1 2 b 1 2 -35 0.00004 2 4.44 15 174 2) Что нужно исправить, чтобы вывод был схож с предыдущим пунктом Исходный код: Код Procedure InputMatrix(n: integer; var a: matrix; var b: vector); Var i,j,r: Integer; Begin r:=whereY; gotoXY(2,r); write('A'); for i:=1 to n do begin gotoXY(i*6+2,r); write(i); gotoXY(1,r+i+1); write(i:2); end; gotoXY((n+1)*6+2,r); write('b'); for i:=1 to n do begin for j:=1 to n do begin gotoXY(j*6+2,r+i+1); read(a[i,j]); end; gotoXY((n+1)*6+2,r+i+1); read(b[i]); end; End; Procedure PrintMatrix(n: integer; var a: matrix; var b: vector); Var i,j,r: integer; Begin clrscr; r:=WhereY; gotoXY(2,r); write('A'); for i:=1 to n do begin gotoXY(i*6+2,r); write(i); gotoXY(1,r+i+1); write(i:2); end; gotoXY((n+1)*6+2,r); write('b'); for i:=1 to n do begin for j:=1 to n do begin gotoXY(j*6+2,r+i+1); write(a[i,j]:2:2); end; gotoXY((n+1)*6+2,r+i+1); write(b[i]:2:2); end; End; Сообщение отредактировано: Relrin - 29.04.2011 21:11 |
IUnknown |
29.04.2011 21:17
Сообщение
#2
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата чтобы при вводе было ограничение по количеству знаков числа (т.е. ограничить пользователя на ввод данных до 7 знаков(включая точку) Проще всего будет написать свою функцию ввода, а не пользоваться Read-ом. А уж в своей функции, когда у тебя полный контроль над вводимыми символами, можно делать любые проверки. Да, вводить нужно посимвольно (через ReadKey). Я где-то выкладывал примеры (правда тогда я был под другим ником), поищи "защита от дурака", или что-то в этом духе.Сообщение отредактировано: IUnknown - 29.04.2011 21:23 |
IUnknown |
29.04.2011 21:56
Сообщение
#3
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
P.S. По тому сочетанию слов, которое дал выше - не нашел, нашел здесь: Графика
Добавлением нескольких строк (и изъятием всего лишнего) мне удалось превратить ту функцию get_input в исполняющую все условия твоего поста. Но для начала попробуй сделать это сам. |
Relrin |
13.05.2011 0:11
Сообщение
#4
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
Посимвольно получил вот так:
Правда, когда я нажимаю ЛЮБУЮ клавишу, получается, сразу выход из программы
Просьба использовать правильные теги! Прочти Правила Сообщение отредактировано: Lapp - 13.05.2011 0:28 |
IUnknown |
13.05.2011 0:48
Сообщение
#5
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Специально написал сразу после того, как ответил выше:
Разбирайся, вопросы приветствуются (Показать/Скрыть)
|
Relrin |
13.05.2011 1:07
Сообщение
#6
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
А, если я, допустим, хочу жестко контролировать пользователя, каждый символ, что он вводит, (т.е. например, идет минус, потом еще раз его вводит, а я его убираю и возвращаюсь на позицию назад, с точкой также), то что необходимо будет для этого? Вести слежку за кол-вом каждого символа знака в виде некоторого массива?
|
IUnknown |
13.05.2011 1:21
Сообщение
#7
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Тогда тебе нужно строить конечный автомат.
Ввод символа перебрасывает автомат в определенное состояние, в котором он может принимать только определенные символы. Введен не тот символ, который допустим для текущего состояния - ошибка, принимай меры. Введен допустимый - ошибки нет и переходим в другое состояние (или остаемся в предыдущем). В общем, гугли, как строятся конечные автоматы... Начать можешь отсюда: http://www.rsdn.ru/article/alg/checkStr.xml Сообщение отредактировано: IUnknown - 13.05.2011 1:27 |
Lapp |
13.05.2011 2:00
Сообщение
#8
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
например, идет минус, потом еще раз его вводит, а я его убираю и возвращаюсь на позицию назад, с точкой также Извиняюсь за вторжение, но мне кажется, это не очень хорошая идея по своей сути (если это не чисто академический интерес). Я, например, часто случайно повторяю символ и сразу, на автомате, удаляю его (не глядя на экран) - и что тогда будет? Несчастный минус пропадет совсем.. Есть вполне определенные, выработанные долгой практикой, правила ввода. Любое отступление от них вносит бардак. Лучше, по-моему, диагностировать ошибку ввода по нажатии на Enter (или при переходе в другому полю). -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Relrin |
15.05.2011 18:21
Сообщение
#9
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
Поскольку первый вопрос в принципе решен (с 1ого поста), то остался тот 2ой вопрос:
А можно ли выводить цифры также, как и были введены. То есть например, один коэффициент, целое, число, а другое дробное, и, выводим на экран в том виде, как он выглядел при вводе? Или же нечто подобное в Pascale сделать нельзя? |
Lapp |
16.05.2011 3:07
Сообщение
#10
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Поскольку первый вопрос в принципе решен (с 1ого поста), то остался тот 2ой вопрос: А можно ли выводить цифры также, как и были введены. То есть например, один коэффициент, целое, число, а другое дробное, и, выводим на экран в том виде, как он выглядел при вводе? Или же нечто подобное в Pascale сделать нельзя? В Паскале можно сделать ВСЕ. Ты только уясни для себя, чего ты добиваешься (точно). Если ты вводишь число строкой, а потом обрабатываешь, ты можешь распознавать, в каком виде введено число - целое или дробное - и в соответствии с этим действовать. Можешь завести специальную переменную, тип числа (не паскалевский тип, а твой собственный признак). Можешь также хранить строку с точным видом при вводе. Стандартный числовой ввод/вывод - это очень удобная штука для быстрого написания программ. Но при всей своей универсальности он не может охватить всех возможных требований. Если задача требует - всегда можно написать свои средства. В Паскале можно сделать абсолютно ВСЕ. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 29.04.2024 14:12 |