Pascal. Запись из массива в файлы.
Здравствуйте!
Решаю следующую задачу: Даны символьные файлы F и G. Определить, совпадают ли компоненты файла F с компонентами файла G. Если нет, то получить номер первого не совпадающего компонента. В общем, до написания проверки основного условия задачи я еще не дошла. На данном этапе реализовала заполнение массива случайными символами. Теперь хочу чтобы этот массив записался в файлы F и G. Но подключить правильно процедуру у меня не получается. Интересно то, что если записывать код по заполнению массива без процедуры, сразу в теле основной программы, то тогда массив символов успешно записывается в оба файла. Значит я что-то не правильно процедуру подключаю. Подскажите, пожалуйста, что нужно поменять. Думаю, что к реализации основной идеи задачи я смогу приступить только после того, как получиться записать символьный массив в файлы :) А иначе не с чем работать :) Преподаватель сказала, что нужно, чтобы присутствовала хотя бы одна процедура или функция. А лучше всего, что бы было и то и другое. Думаю, что это было бы и удобно, использовать процедуру :) Вот код программы, который я написала на данном этапе. Код:
program f_2a; |
Только не подумайте, что я прошу написать за меня код. Просто прошу подсказать.
А то вдруг найдутся те, кто подумает, что я халяву ищу :) |
процедуры ничего не возвращают
в прошлой теме про матрицы был пример процедуры, посмотрите |
Цитата:
Код:
procedure HochuMassivVFajl(mas:array of char; filename:string); типа Код:
SimMas : array [1..m] of char; Код:
|
RostVY, лучше не привыкать передавать массивы в качестве параметра функции/процедуры
lenaustkz84, по хорошему массивы в данном случае - излишнее усложнение - можно сразу писать в файл генерируемые символы |
Цитата:
|
Цитата:
|
Цитата:
Надо относиться аккуратно, т.к. пока массив маленький и вызовов мало, то все в порядке - скорости чтения/записи позволяют. А если возникнет множественный вызов (в цикле) или рекурсивный вызов, то возникнет слишком большая избыточная нагрузка на память. И в какой-то момент ее просто не хватит. Поэтому аккуратно! Если необходимо работать с копией массива - то пересылаем весь (скорее многопоточные приложения). Если мы его все равно вернем в качестве результата, то работаем с указателем на массив. |
Цитата:
здесь вот, например, http://www.freepascal.org/docs-html/ref/refsu59.html написано "In the latter cases the procedure receives a pointer to the actual array. In the former case, it receives a copy of the array." Так что, как минимум, это зависит от версии компилятора или от его настроек и копируется массив в более старых версиях. Кстати, вы какую версию имели в виду? |
Цитата:
Цитата:
Поэтому если я передаю массив, то я передаю массив. Если указатель, то указатель. ПК - это бестолковый калькулятор. У него нет никаких других функций и назначений, кроме выполнения команд пользователя. Да, сейчас инженеры ведущих компиляторов прикладывают массу сил, чтобы оптимизировать убогий код. Поэтому может быть, после оптимизации, будет передаваться указатель вместо массива. Но строго говоря - это не так. |
буду передавать масивы :) мне так удобно. а как передавать пусть компилятор заморачивается. если нормальный -- передаст как надо. По моей теории, строки, массивы и объекты передаются указателями, а не копируются.
|
Вообще-то, в паскале для того, чтоб передать массив по ссылке, необходимо использовать либо var (если массив будет изменяться) или const (если не будет).
Компилятор не будет передавать ссылку, если вы это не указали явно. Оптимизация подразумевает генерацию более эффективного кода без нарушения его семантики. А способ передачи потому и бывает разный, что разные способы передачи имеют разную семантику. |
Время: 23:10. |
Время: 23:10.
© OSzone.net 2001-