Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2011, 23:24   #1
iReqyz
Новичок
Джуниор
 
Регистрация: 27.03.2011
Сообщений: 2
По умолчанию Delphi 7; Динамические переменные + вектор + строки.

Доброго времени суток. Помогите пожалуйста с заданием:
Одно из возможных представлений "длинного" (не более N строк) текста – это разделить его на строки и создать массив ссылок на эти строки (тип Tekst):
Const N = 100;
Type Ref = ^String;
Tekst = array [1..N] of Ref;
(если в тексте менее N строк, то последние элементы массива равны nil; в начале массива ссылок nil не должно быть).
а) Напишите процедуру Input(f,T), считывающую строки из текстового файла f и помещающую их в кучу (адреса будут храниться в элементах вектора T типа Tekst).
б) Напишите процедуру Output(T), выводящую на устройство Con текст Т построчно (т.е. выводит строки, которые расположены по адресам, хранящимся в элементах вектора Т).

Свой вариант:

program Class26_zad5;
{$APPTYPE CONSOLE}
uses
SysUtils;
const N = 5;
Type Ref = ^String;
Tekst = array [1..N] of Ref;

procedure ImPut(var f:text; T : Tekst);
var i : Integer;
x : string;
begin
Reset(f);
For i:=1 to n do
if not Eof(f) then
begin
read(f,x);
New(T[i]);
if x='' then T[i]:=nil
else T[i]^:=x;
end;
Close(f);
end;

procedure OutPut(T:Tekst);
var i : Integer;
begin
for i:=1 to n do writeln(T[i]^);
end;

var f : Text;
T : Tekst;
begin
Assign(f,'a.txt');
ImPut(f,T);
OutPut(T);
Readln;
end.

Вроде бы правильно, но программа не работает. (В файле a.txt несколько строк на латинице) При запуске моргает окно консоли, успел читануть что-то про адресса. SOS Заранее спасибо
iReqyz вне форума Ответить с цитированием
Старый 28.03.2011, 22:26   #2
iReqyz
Новичок
Джуниор
 
Регистрация: 27.03.2011
Сообщений: 2
По умолчанию

Ну не все сразу!!!
iReqyz вне форума Ответить с цитированием
Старый 29.03.2011, 11:21   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

а ты остряк ))

возможно косяки есть в файле, но, думаю, главный косяк(из-за которого говорит про адреса) - вывод нила, переделай так
Код:
procedure OutPut(T:Tekst);
var i : Integer;
begin
for i:=1 to n 
  do if t[i]<> nil
    then  writeln(T[i]^);
end;
также косяк тут : read(f,x); надо заменить на readln(f,x); а то у тебя файл считывается не построчно, а просто так, в результате чего массив Т заполняется нилами

и во всех процедурах, куда передаёшь Т надо указать var T: tekst , потому что надо передавать по ссылке (раз уж ты себе придумал процедуры которым надо указать, с чем работать), а не по значению(при этом вся работа производится над копией данных, и реально ты не увидишь ничего)

и 2 тебе наставления:
1 юзай специальный тег code для вставки кода (он есть также и в расширенной правке сообщения, кнопочка #)
2 юзай пошаговую трассировку (в дельфи F7), проще будет видно, что и как выполняет прога и где мб ошибка

Ну и велкам на форум ))

Последний раз редактировалось phomm; 29.03.2011 в 11:32.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические переменные Likan15 Помощь студентам 1 24.05.2010 13:15
Динамические переменные Desha Помощь студентам 8 07.09.2009 18:36
Динамические переменные.. NSvirus Паскаль, Turbo Pascal, PascalABC.NET 2 08.06.2009 22:56
Динамические переменные. Delphi svobodys Помощь студентам 0 10.05.2009 16:06
Динамические переменные BIS88 Помощь студентам 3 05.03.2009 17:35