Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Pascal. Запись из массива в файлы.

Ответить
Настройки темы
Разное - Pascal. Запись из массива в файлы.

Аватара для lenaustkz84

Новый участник


Сообщения: 26
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: lenaustkz84
Дата: 23-01-2012
Здравствуйте!

Решаю следующую задачу: Даны символьные файлы F и G. Определить, совпадают ли компоненты
файла F с компонентами файла G. Если нет, то получить номер первого не совпадающего компонента.

В общем, до написания проверки основного условия задачи я еще не дошла.
На данном этапе реализовала заполнение массива случайными символами.

Теперь хочу чтобы этот массив записался в файлы F и G.
Но подключить правильно процедуру у меня не получается.

Интересно то, что если записывать код по заполнению массива без процедуры,
сразу в теле основной программы, то тогда массив символов успешно записывается
в оба файла.

Значит я что-то не правильно процедуру подключаю.
Подскажите, пожалуйста, что нужно поменять.

Думаю, что к реализации основной идеи задачи я смогу приступить только после того, как
получиться записать символьный массив в файлы А иначе не с чем работать

Преподаватель сказала, что нужно, чтобы присутствовала хотя бы одна процедура или функция.
А лучше всего, что бы было и то и другое.
Думаю, что это было бы и удобно, использовать процедуру

Вот код программы, который я написала на данном этапе.

Код: Выделить весь код
program f_2a;
{Даны символьные файлы F и G. Определить, совпадают ли компоненты
файла F с компонентами файла G. Если нет, то получить номер первого
не совпадающего компонента.}

uses crt;

const m=10;

simvolij : array [0..38] of char = ('a','b','c','d','e','f','g','h','i','j',
                                    'k','l','m','n','o','p','q','r','s','t',
                                    'u','v','w','x','y','z','0','1','2','3',
                                    '4','5','6','7','8','9','+','-','*');
type file1 = file of char;
     file2 = file of char;

var f1 : file1;
    f2 : file2;

procedure input_massiv;

var i : byte;
    SimMas : array [1..m] of char;

begin

   randomize;
   for i:=1 to m do
   begin
      SimMas[i]:=simvolij[random(38)];
   end;
end;

BEGIN
   clrscr;

   assign(f1,'F.txt');
   rewrite(f1);

   write(f1,input_massiv);

   assign(f2,'G.txt');
   rewrite(f2);

   write(f2,input_massiv);

   close(f1);
   close(f2);

END.

Отправлено: 13:05, 23-01-2012

 

Аватара для lenaustkz84

Новый участник


Сообщения: 26
Благодарности: 0

Профиль | Отправить PM | Цитировать


Только не подумайте, что я прошу написать за меня код. Просто прошу подсказать.
А то вдруг найдутся те, кто подумает, что я халяву ищу

Отправлено: 13:31, 23-01-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


процедуры ничего не возвращают

в прошлой теме про матрицы был пример процедуры, посмотрите

Отправлено: 17:21, 23-01-2012 | #3


Старожил


Сообщения: 280
Благодарности: 54

Профиль | Отправить PM | Цитировать


Цитата lenaustkz84:
хочу чтобы этот массив записался в файлы F и G. »
Код: Выделить весь код
procedure HochuMassivVFajl(mas:array of char; filename:string);
var f: file of char;
i:integer;
begin
   assign(f,filename);
   rewrite(f);
   for i:=1 to length(mas) do
        write(f,mas[i]);
   close(f);
end;
массив описать в программе, а не в процедуре.

типа
Код: Выделить весь код
    SimMas : array [1..m] of char;

procedure input_massiv(mas);
var i : byte;
begin
   randomize;
   for i:=1 to length(mas) do
   begin
      mas[i]:=simvolij[random(38)];
   end;
end;
потом вызвать процедуру

Код: Выделить весь код
 
input_massiv(SimMas);
HochuMassivVFajl(SimMas, 'F.txt');
потом забить, выйти замуж, нарожать детей и учиться, как варить борщ, вместо Pascal'я.

-------
carpe diem


Отправлено: 17:27, 23-01-2012 | #4


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


RostVY, лучше не привыкать передавать массивы в качестве параметра функции/процедуры

lenaustkz84, по хорошему массивы в данном случае - излишнее усложнение - можно сразу писать в файл генерируемые символы

Отправлено: 09:42, 26-01-2012 | #5


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата Busla:
лучше не привыкать передавать массивы в качестве параметра функции/процедуры »
почему?

Отправлено: 11:02, 26-01-2012 | #6


Старожил


Сообщения: 280
Благодарности: 54

Профиль | Отправить PM | Цитировать


Цитата Busla:
лучше не привыкать передавать массивы в качестве параметра функции/процедуры »
и действительно, совет как-то слабо аргументирован

-------
carpe diem


Отправлено: 12:01, 26-01-2012 | #7


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата Busla:
лучше не привыкать передавать массивы в качестве параметра функции/процедуры »
Потому что происходит его полное дублирование в динамическую память (соотв. накладные расходы на выделение памяти, пересылку и т.д.), выделяемую под процедуру/функцию.
Надо относиться аккуратно, т.к. пока массив маленький и вызовов мало, то все в порядке - скорости чтения/записи позволяют. А если возникнет множественный вызов (в цикле) или рекурсивный вызов, то возникнет слишком большая избыточная нагрузка на память. И в какой-то момент ее просто не хватит.

Поэтому аккуратно! Если необходимо работать с копией массива - то пересылаем весь (скорее многопоточные приложения). Если мы его все равно вернем в качестве результата, то работаем с указателем на массив.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:11, 26-01-2012 | #8


Старожил


Сообщения: 280
Благодарности: 54

Профиль | Отправить PM | Цитировать


Цитата lxa85:
Потому что происходит его полное дублирование в динамическую память »
да ну. а я всегда думал, что просто передается указатель на массив и работа ведется с ним.
здесь вот, например, 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."
Так что, как минимум, это зависит от версии компилятора или от его настроек и копируется массив в более старых версиях.

Кстати, вы какую версию имели в виду?

-------
carpe diem


Отправлено: 13:52, 26-01-2012 | #9


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата RostVY:
Кстати, вы какую версию имели в виду? »
Я имел в виду теорию вообще, как таковую, без оптимизаций и пр.
Цитата RostVY:
Так что, как минимум, это зависит от версии компилятора или от его настроек и копируется массив в более старых версиях. »
Это зависит от того, насколько грамотно я пишу код и от того, насколько я буду требовать точного его выполнения.
Поэтому если я передаю массив, то я передаю массив. Если указатель, то указатель.
ПК - это бестолковый калькулятор. У него нет никаких других функций и назначений, кроме выполнения команд пользователя.
Да, сейчас инженеры ведущих компиляторов прикладывают массу сил, чтобы оптимизировать убогий код. Поэтому может быть, после оптимизации, будет передаваться указатель вместо массива. Но строго говоря - это не так.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 15:29, 26-01-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Pascal. Запись из массива в файлы.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Всё о TURBO PASCAL (обсуждение, помощь в написание программ, ошибки, Pascal ABC) Loading Программирование и базы данных 41 20-05-2015 15:28
2008 R2 - Распределение массива twinzzz75 Windows Server 2008/2008 R2 10 19-01-2012 17:00
[решено] Отключенная учетная запись и запись с истекшим сроком действия. В чем разница? CaminoDeFlores Microsoft Windows NT/2000/2003 4 01-06-2009 09:30
Создание динамического массива на Pascal-е Skynet Программирование и базы данных 3 09-10-2004 18:05
PHP. Запись массива в файл. Hemp Вебмастеру 3 08-10-2004 20:50




 
Переход