Консультация № 165349
19.04.2009, 17:00
0.00 руб.
0 2 0
Помогите реализовать следующую программу с помощью динамических переменных, а то что ни как не могу понять как это сделать. Задание: удалить лишние пробелы
Код:
type Mas=array[1..50] of string;

procedure InputData(var a:Mas; var n:integer);
var FileIn:text;
NameFile:string;
begin
write('Введите имя входного файла ');
readln(NameFile);
assign(FileIn,NameFile);
{$I-}
reset(FileIn);
{$I+}
if IOResult<>0 then
begin
writeln('Ошибка!Файл ',NameFile,' не найден!');
readln;
halt;
end;
n:=0;
while not Eof(FileIn) do
begin
inc(n);
readln(FileIn,a[n]);
end;
Close(FileIn);
end;

procedure DeleteSpacesInString(var S:string);
var p,i:integer;
begin
for i:=1 to length(S) do
begin
repeat
p:=Pos(' ',S[i]);
if p>0 then Delete (S,p,1);
until p=0;
if S[1]=' ' then
Delete(S,1,1);
if S[length(S)]=' ' then
Delete(S,length(S),1);
end;
end;

procedure DeleteSpacesInMas(var a:Mas; n:integer);
var i:integer;
begin
for i:=1 to n do
DeleteSpacesInString(a[i]);
end;

procedure OutputData(a:Mas; n:integer);
var NameFile:string;
FileOut:text;
i:integer;
begin
write('Введите имя выходного файла ');
readln(NameFile);
assign(FileOut,NameFile);
rewrite(FileOut);
for i:=1 to n do
writeln(FileOut,a[i]);
Close(FileOut);
end;

var a:Mas;
n:integer;
begin
clrscr;
InputData(a,n);
DeleteSpacesInMas(a,n);
OutputData(a,n);
end.

Обсуждение

Неизвестный
19.04.2009, 21:58
общий
Ну я думаю можно просто динамически создавать массив, с которым работаешь, описать тип
type
mas=array[1..50] of string;
tmas=^mas;
var
m:tmas;
и создавать его
new(m);
и удалять его
dispose(m);
а работать как с данными @m[i] - i-я строка, если я не ошибаюсь
Неизвестный
20.04.2009, 18:41
общий
Т.е. примерно как то так?
Код:
type Mas=array[1..50] of string;
DinMas=^Mas;

procedure InputData(var a:DinMas; var n:integer);
var FileIn:text;
NameFile:string;
begin
write('Введите имя входного файла ');
readln(NameFile);
assign(FileIn,NameFile);
New(a);
{$I-}
reset(FileIn);
{$I+}
if IOResult<>0 then
begin
writeln('Ошибка!Файл ',NameFile,' не найден!');
readln;
halt;
end;
n:=0;
while not Eof(FileIn) do
begin
inc(n);
readln(FileIn,a^[n]);
end;
Close(FileIn);
end;

procedure DeleteSpacesInString(var S:string);
var p,i:integer;
begin
for i:=1 to length(S) do
begin
repeat
p:=Pos(' ',S);
if p>0 then Delete (S,p,1);
until p=0;
if S[1]=' ' then
Delete(S,1,1);
if S[length(S)]=' ' then
Delete(S,length(S),1);
end;
end;

procedure DeleteSpacesInMas(var a:DinMas; n:integer);
var i:integer;
begin
for i:=1 to n do
DeleteSpacesInString(a^[i]);
end;

procedure OutputData(a:DinMas; n:integer);
var NameFile:string;
FileOut:text;
i:integer;
begin
write('Введите имя выходного файла ');
readln(NameFile);
assign(FileOut,NameFile);
rewrite(FileOut);
for i:=1 to n do
writeln(FileOut,a^[i]);
Dispose(a);
Close(FileOut);
end;

var a:DinMas;
n:integer;
begin
clrscr;
InputData(a,n);
DeleteSpacesInMas(a,n);
OutputData(a,n);
end.
Форма ответа