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

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

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

> Матрица в типизированном файле
iFool
сообщение 25.09.2007 20:09
Сообщение #1


Гость






Задача.
Пусть матрица А целых чисел размером 100*100 записана по строкам в файле. Определите, является ди она единичной.

Мне не понятно как запихнуть матрицу в типизированный файл и, самое главное, как потом проверить условие....
Помогите, пожалуйста...
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Neznaika
сообщение 27.09.2007 11:04
Сообщение #2


Пионер
**

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

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


Вот, что получилось у меня:

program My_TEST2; { Проверка единичной матрицы 100x100. }
const
N = 100;
var
F : File of Integer;
I, J, K : Integer;
label
LabelMatrixIsNotE, LabelCloseFile;
begin
if ParamCount <> 1 then
begin
Write('Необходимо имя файла!');
Exit
end;
Assign(F,ParamStr(1));
Reset(F);
for I := 1 to N do
for J := 1 to N do
begin
Read(F,K);
if (Ord(I<>J) + K) <> 1 then
goto LabelMatrixIsNotE
end;
Write('Матрица единичная.');
goto LabelCloseFile;
LabelMatrixIsNotE:
Write('Матрица НЕ единичная!');
LabelCloseFile:
Close(F)
end.



Объяснение "(Ord(I<>J) + K) <> 1":
I и J изменяются от 1 до 100. Для диагональных элементов матрицы I = J. K - соответствующий элемент матрицы.
Возможны два ПРАВИЛЬНЫХ варианта:
1) I = J, K = 1.
2) I <> J, K = 0.
Первые условия могут быть либо TRUE, либо FALSE и отрицают друг друга.
Пусть (I=J) будет эквивалентно FALSE, тогда (I<>J) будет эквивалентно TRUE. Получим
1) FALSE, K = 1.
2) TRUE, K = 0.
Здесь уже видна СИММЕТРИЯ(которая собственно и нужна для создания подобных выражений), а именно
порядковые номера FALSE и TRUE равны соответственно 0 и 1(Ord(FALSE) = 0, Ord(TRUE) = 1). Получили
1) 0, K = 1.
2) 1, K = 0.
Видно, что когда матрица ЕДИНИЧНАЯ, то (0 + 1) = (1 + 0) = 1. Когда матрица НЕ ЕДИНИЧНАЯ, то
складывая 0(для 1)) или 1(для 2)) с K получить 1 не удастся. Следовательно
if (Ord(I<>J) + K) <> 1 then МАТРИЦА НЕ ЕДИНИЧНАЯ

В архиве простенькая программа генерации единичной матрицы и программа "простой" проверки(My_TEST1).

P.S.
Так используются два цикла for и оба они прерываются при первой ошибке(при появлении первого "неправильного" элемента матрицы), Break для выхода из циклов применить нельзя, поэтому
используется оператор GOTO. Даже целых два GOTO(бонус smile.gif ).


Прикрепленные файлы
Прикрепленный файл  EMATRIX.rar ( 30.07 килобайт ) Кол-во скачиваний: 199
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
iFool   Матрица в типизированном файле   25.09.2007 20:09
volvo   Это какой файл? Файл целых var f: file of integer ...   25.09.2007 20:17
iFool   Ну пусть integer... матрица получается выглядит в ...   25.09.2007 20:23
volvo   А тебе надо не только диагональ выделять... Надо в...   25.09.2007 20:57
Гость   А можно ещё вопрос.... как мне осуществить ввод......   25.09.2007 21:22
Горсть   while not eof(f) do begin read(f, X); if...   26.09.2007 1:56
volvo   Понимаешь, в чем дело... Если б оно не отработало ...   26.09.2007 2:38
Гость   Понимаешь, в чем дело... Если б оно не отработало...   26.09.2007 14:15
volvo   Volvo, можно тогда увидеть весь исходник? Можно....   27.09.2007 11:27
Горсть   Хорошо, например все элементы матрицы равны 2. Тог...   26.09.2007 4:43
Neznaika   Вот, что получилось у меня: program My_TEST2; ...   27.09.2007 11:04
Neznaika   volvo, так бы сразу и написали ok := true; i ...   27.09.2007 12:03
volvo   Угу... Если хочешь увеличить время работы программ...   27.09.2007 12:08
Neznaika   volvo, извините, но мне кажется, что (Ord(I<...   27.09.2007 13:21
Neznaika   слепил тест Интересно, правда компилятор TP, для е...   27.09.2007 13:43
volvo   Только в соответствующем разделе :) Я говорил имен...   27.09.2007 13:49
Neznaika   Тьфу, чёрт! Если посмотреть в отладчике(Turbo ...   27.09.2007 14:26
Neznaika   Один вопрос, volvo. Ещё неделю назад хотел спросит...   6.10.2007 11:12


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

 



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