Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Умножение матриц с удаление нулевых строк!

Автор: metamfetamin 7.10.2007 22:00

Люди помогите пожалуста!!!
Нужно написать програму на Pascal умножение 2-ух матриц.
И что бы в программе выполнялась проверка на нулевые строки и столбцы и если в матрицах они есть то что б удаляло....
Матрица А[7x6] и B[6x8]
Матрицы находятся на диске С:\ в текстовом файле (пример С:\1.txt).




Прикрепленные файлы
Прикрепленный файл  1.txt ( 462 байт ) Кол-во скачиваний: 236

Автор: мисс_граффити 8.10.2007 2:07

чем-то не понравилось выложенное умножение?
http://forum.pascal.net.ru/index.php?s=&showtopic=2694&view=findpost&p=23475

Автор: metamfetamin 8.10.2007 13:57

Цитата(мисс_граффити @ 7.10.2007 23:07) *

чем-то не понравилось выложенное умножение?


А чем сообственно не понравилось?????

Автор: мисс_граффити 8.10.2007 14:10

вот и я спрашиваю - чем?

Автор: metamfetamin 8.10.2007 14:25

В самой проге не выполняется не одно действие которое должно выполнятся:
1) Ни вывод матриц.
2)ни удаление нулевых строк и столбцов.
3) А по скольку не выполняется 2 пункт то соответственно и умножение получених матриц не выполняется.

Автор: Ozzя 8.10.2007 17:06

1. Есть по той же ссылке, 2-3 экрана вверх прокрутить.
2. Поищи в "Задачах" - "удаление строк (столбцов)".

Автор: Neznaika 8.10.2007 17:34

Вы определяете матрицы как a:array [1..8,1..8] of string [1];,
то есть как таблицы строк, а не чисел. Это может привести к размягчению мозга.
Чтобы это не произошло нужно работать с числами, а не со строками,
и все преобразования из строк в числа возложить на процедуры ввода/вывода.

Я немного изменил формат файла 1.txt на следующий:
============= Файл 1.txt ====================
М P1
A[1,1] ... A[1,P1]
........................
A[M,1] ... A[M,P1]
P2 N
B[1,1] ... B[1,N]
........................
B[P2,1] ... B[P2,N]
=========================================

В архиве программа умножения матриц A и B - MMUL.
Вызов: MMUL < 1.txt

Попробуйте самостоятельно написать удаление строк/столбцов.
Только необходимо учесть, что после такого удаления матрицы нельзя будет перемножить.


Прикрепленные файлы
Прикрепленный файл  MMUL.rar ( 5 килобайт ) Кол-во скачиваний: 174

Автор: volvo 8.10.2007 17:54

Цитата
Только необходимо учесть, что после такого удаления матрицы нельзя будет перемножить.
Неверно... НЕ ВСЕГДА можно будет перемножить, ибо в приведенном автором примере матрицы и после удаления остаются сцепленными...

Автор: Neznaika 8.10.2007 18:00

volvo, да, с матрицами в 1.txt так и будет.
Но я изменил формат, чтобы можно было вводить любые матрицы до 32x32 включительно,
предупреждение не помешает.
------------------------------------------------------------------------------------------------------------
Поспешил, правильно так:

Цитата
Только необходимо учесть, что после такого удаления матрицы не всегда удастся перемножить.


Автор: metamfetamin 9.10.2007 0:53

Цитата(Neznaika @ 8.10.2007 14:34) *

Вы определяете матрицы как a:array [1..8,1..8] of string [1];,
то есть как таблицы строк, а не чисел. Это может привести к размягчению мозга.
Чтобы это не произошло нужно работать с числами, а не со строками,
и все преобразования из строк в числа возложить на процедуры ввода/вывода.

Я немного изменил формат файла 1.txt на следующий:
============= Файл 1.txt ====================
М P1
A[1,1] ... A[1,P1]
........................
A[M,1] ... A[M,P1]
P2 N
B[1,1] ... B[1,N]
........................
B[P2,1] ... B[P2,N]
=========================================

В архиве программа умножения матриц A и B - MMUL.
Вызов: MMUL < 1.txt

Попробуйте самостоятельно написать удаление строк/столбцов.
Только необходимо учесть, что после такого удаления матрицы нельзя будет перемножить.


А почему после того как я ввожу две матрицы и нажимаю enter то ничего не происходит и оно меня обратно выкидывает к листинку????

Автор: Neznaika 9.10.2007 1:13

Можно перед end. поставить ReadLn, тогда программа остановится и будет ждать нажатия Enter.
Или лучше запускать её в FAR'е так, как я написал выше:
MMUL < 1.txt
Там можно после запуска программы нажать Ctrl+O и посмотреть результат, выводимый на экран.

Автор: metamfetamin 9.10.2007 1:22

Цитата(Neznaika @ 8.10.2007 14:34) *

Попробуйте самостоятельно написать удаление строк/столбцов.
Только необходимо учесть, что после такого удаления матрицы нельзя будет перемножить.



У меня есть кусочки програмы ...... по поводу удаления строк и столбцов......но я не могу сообразить куда и как и кусочки засунуть чтоб они удаляли нулевые строки из вводимы матриц??????
Сами кусочки по удалению строк и столбцов вот.!!!!!!!!

Добавлено через 14 мин.
Цитата(Neznaika @ 8.10.2007 22:13) *

Можно перед end. поставить ReadLn, тогда программа остановится и будет ждать нажатия Enter.
Или лучше запускать её в FAR'е так, как я написал выше:
MMUL < 1.txt
Там можно после запуска программы нажать Ctrl+O и посмотреть результат, выводимый на экран.



У меня есть вот в файле некоторые кусочки с програм которые можно использовать в моей программе....... но я незнаю как и куда ети кусочки нужно повставлять и где и что в переменних нужно дополнительно описать?????????


Прикрепленные файлы
Прикрепленный файл  _________________________.txt ( 1.14 килобайт ) Кол-во скачиваний: 221
Прикрепленный файл  __________________________________.txt ( 2.22 килобайт ) Кол-во скачиваний: 240

Автор: volvo 9.10.2007 17:11

metamfetamin, в аттаче - программа, которая работает с заданным тобой же файлом данных (без изменения формата): читает исходные матрицы A и B из файла, удаляет в них нулевые строки/столбцы, потом проверяет, являются ли полученные после удаления строк/столбцов матрицы сцепленными в любой комбинации (т.е., можно ли производить умножение A * B или B * A), и если умножение матриц допустимо - то оно производится... Иначе выдается сообщение о невозможности операции...

Прикрепленный файл  __m_mx.pas ( 2.51 килобайт ) Кол-во скачиваний: 472


На всякий случай - файл данных, с которым отработала программа:
Прикрепленный файл  mx.txt ( 471 байт ) Кол-во скачиваний: 472


Будут вопросы - задавай, постараюсь объяснить то, что тебе будет неясно...

Update: В случае, когда обе матрицы - квадратные (когда возможны оба варианта перемножения) производится умножение
res = A * B