Обработка прямоугольных матриц |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Обработка прямоугольных матриц |
ProtasSoft |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: 0 |
Задана большая матрица вещественных чисел размером 1000 на 2000 в текстовом файле.
Необходимо произвести попарную обработку обработку ее строк, т.е. для каждой пары СТРОКАi и СТРОКАj строк необходимо вычислить функцию от элементов этих строк, например, Ain - элементы СТРОКИi и Bjn - элементы СТРОКИj. Из результатов вычисления функции F(Ai1,...,Ai1000;Bj1,...,Bj2000) сформировать новую матрицу и записать в новый файл. Подскажите как мне действовать. Насколько я понимаю с большими массивами Borland Pascal не работает. |
kent |
Сообщение
#2
|
Пионер Группа: Пользователи Сообщений: 50 Пол: Мужской Реальное имя: Андрей Репутация: 1 |
Цитата(ProtasSoft @ 12.08.05 18:18) Насколько я понимаю с большими массивами Borland Pascal не работает. Используй динамическую матрицу. |
volvo |
Сообщение
#3
|
Гость |
Цитата(ProtasSoft @ 12.08.05 17:18) Насколько я понимаю с большими массивами Borland Pascal не работает. Borland Pascal - нет. Зато Free Pascal прекрасно работает... Вот это только что откомпилировалось у меня в FPC: var И никаких ошибок не возникло. Будем изобретать велосипед, или перенести тему в 32-битные компиляторы, и будем решать задачу? P.S. Цитата(kent @ 12.08.05 17:27) Используй динамическую матрицу. Дело все в том, что Array[1 .. 1000, 1 .. 2000] Of Realэто почти 12Мб. Сможешь получить столько памяти в "куче"? |
ProtasSoft |
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: 0 |
У меня нет Free Pascal. Если поделитесь дистрибутивом, то буду благодарен и готов решать задачу на этом компиляторе.
|
volvo |
Сообщение
#5
|
Гость |
Последнюю версию (2.0.0) можно взять на официальном сайте (российское зеркало): http://www.freepascal.org/down-i386-win32-russia.html (21 Мб)
Ссылка на 1.0.10 - здесь: FPC |
Malice |
Сообщение
#6
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Цитата(ProtasSoft @ 12.08.05 17:18) Насколько я понимаю с большими массивами Borland Pascal не работает. Совсем не обязательно считывать сразу весь массив. Достаточно считать две строки, записать результат и продолжить в том же духе Есть и другие варианты. |
volvo |
Сообщение
#7
|
Гость |
Цитата(Malice @ 12.08.05 19:05) Есть и другие варианты. ... изобретения велосипеда. А зачем? Если на 32-битном компилере задача решается "влет", и нет ограничения на использование этих компиляторов? Тем более, что придется как минимум 2000 раз проходить по файлу (и значительная часть проходов будет "холостыми"), потому как Цитата т.е. для каждой пары СТРОКАi и СТРОКАj строк необходимо вычислить функцию от элементов этих строк . Я бы не заморачивался с построчным чтением... |
Malice |
Сообщение
#8
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Согласен, не подумай, что я против FP, но вдруг это нужно по условию. Если нет, то нет, конечно же.
|
klem4 |
Сообщение
#9
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
А вот мое мнение что FPC тут не выход, так как наверняка задание пишется не "для себя" , а для препода в универе А в универах наших FPC пока не ставят, так что сдать такой код не получится...надо думать.
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
Сообщение
#10
|
Гость |
klem4,
Цитата(ProtasSoft @ 12.08.05 17:51) Если поделитесь дистрибутивом, то буду ... готов решать задачу на этом компиляторе. Если бы тебе предложили тот компилятор, которого нет в институте, ты бы такое написал? Давайте все-таки будем исходить не из своих мнений, а из решений автора... А поэтому - вопрос к автору топика, скачал ли он FPC и будет решать задачу с его помощью или все-таки нужно извращаться с TP? |
ProtasSoft |
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: 0 |
FPC я скачал и установил.
Вопрос следующий: подскажите как считывать матрицы из текстового файла, когда ее элементы расположены в строке и разделены пробелами. К примеру, файл может быть таким ================ 12,3 23,4 34,6 34,98 23,34 34,5 45,78 56,78 1,06 34,08 34,67 34,67 ================ :fire: :fire: |
klem4 |
Сообщение
#12
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Не очень ясен вопрос... могу предположить что тебе нужно следующее :
Считываешь из файла строку, разбиваешь её на числа (наборы символов между пробелами) если надо, сохраняешь в массиве с элементами типа string, и после сохранения или непосредственно после выделения очередного числа переводишь его в числовое представление и работаешь с ним. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
Сообщение
#13
|
Гость |
ProtasSoft,
не путай такое (Паскаль не использует "," в вещественных числах, используется точка: ".") Цитата 12,3 23,4 34,6 34,98 23,34 34,5 45,78 56,78 1,06 34,08 34,67 34,67 и правильный вариант: Цитата 12.3 23.4 34.6 34.98 23.34 34.5 45.78 56.78 1.06 34.08 34.67 34.67 При использовании второго варианта - делать так: j := 1; |
ProtasSoft |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: 0 |
procedure EnterMatrixFromFile (var Matr: Matrix); Что здесь не так? Сообщение отредактировано: volvo - |
klem4 |
Сообщение
#15
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
у тебя файл текстовый и информация в нем записана в виде строк, а ты пытаешься прочитать число, да и вообще странно как-то твоя процедура выглядит ... тебе нужно либо менять файл на file of single (другой вещественный тип), либо делать то что я тебе писал выше, если хочешь оставить файл текстовым
Сообщение отредактировано: klem4 - -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Malice |
Сообщение
#16
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Цитата(ProtasSoft @ 15.08.05 16:32) Что здесь не так? j всегда равен 1 ? Поставь j=1 до цикла While. |
klem4 |
Сообщение
#17
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
примерно это должно выглядеть вот так :
{$N+} -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
Сообщение
#18
|
Гость |
klem4, смысл читать содержимое, как строку? Внимательно читаем условие задачи:
Цитата Задана большая матрица вещественных чисел размером 1000 на 2000 в текстовом файле. И, если читать 2000 чисел строкой, то в какую строку это должно помещаться? Строка в FPC также ограничена 256 символами...Так не проще: ix := 1; iy := 1;? ProtasSoft, в следующий раз, если ты приводишь фрагмент программы с введенными тобой типами, приводи и описания типов тоже. Как, например, я из поста №15 должен знать, что из себя представляет Matrix? И пользуйся тегами [CОDE][/CОDE] P.S. Если хочется воспользоваться EoLn(f), то вот так: ix := 1; iy := 1; |
Malice |
Сообщение
#19
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Цитата(volvo @ 15.08.05 18:44) ix := 1; iy := 1; iy тоже, имхо, сбрасывать надо.. |
volvo |
Сообщение
#20
|
Гость |
Да, тогда iy := 1 между первым и вторым While-ом
|
Текстовая версия | 30.04.2024 1:07 |