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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2010, 21:39   #1
Сеня2007
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 16
По умолчанию Необходимо сделать удаление как в динамическом массиве, сложность в том что массив обычный

Необходимо сделать удаление как в динамическом массиве, сложность в том что массив обычный. Прогу я всю написал кроме этого:

Код:
uses crt;
type
type_rec=record
fio:string[15];
nazvanie:string[20];
god:word;
end;

var
f_in,f_out:text;
spis:array[1..1000] of type_rec;
c:array[1..100] of string[15];
m:array[1..100] of string[15];
x:array[1..100] of string[20];
s:array[1..100] of word;
cy:string[15];
dy:string[20];
kol_zap,i:word;
zap:type_rec;
key:byte;
b:array[1..1000] of word;
y,f:integer;

BEGIN
clrscr;
assign(f_in,'text.dan');
reset (f_in);
i:=0;
while not Eof(f_in) do
begin inc(i);
with spis[i] do
readln(f_in,fio,nazvanie,god);
end;
kol_zap:=i;
writeln('Zapisey:=',kol_zap);
writeln;

assign(f_out,'sor.dan');
rewrite(f_out);
for i:=1 to kol_zap do
with spis[i] do
begin
writeln(fio:15,nazvanie:20,god);
c[i]:=fio;
x[i]:=nazvanie;
b[i]:=god;
end;
writeln;

for i:=1 to kol_zap do
if (b[i]<1985) and (x[i]<>'Ivanov..') then
begin
s[i]:=b[i];
m[i]:=c[i];
f:=f+1;
end;

repeat
key:=0;
for i:=1 to f do
with spis[i] do
if s[i]<s[i+1] then
begin
y:=s[i];
s[i]:=s[i+1];
s[i+1]:=y;
cy:=m[i];
m[i]:=m[i+1];
m[i+1]:=cy;
dy:=x[i];
x[i]:=x[i+1];
x[i+1]:=dy;
key:=1;
end;
until key=0;
writeln('Uporydochenniy massiv');
for i:=1 to f do
begin
write(m[i]:15,x[i]:20,s[i]:6);
writeln;
end;
readkey;
END.
Вот на всякий случай само залдание:
Условие:
Создать текстовый файл, состоящий из записей, имеющих заданную структуру (см. ваш вариант).
Написать программу, решающую следующие задачи:
1) Занесение записей из текстового файла в массив записей с одновременным определение числа записей во входном файле.
2) Вывод на экран полученного массива.
3) Поиск в массиве и вывод на экран записей по заданному полю.
4) Удаление из массива записей в соответствии с заданием.
5) Вывод на экран оставшегося массива.
6) Упорядочение массива по заданному полю.
7) Вывод упорядоченного массива на экран и в новый текстовый файл.
Все выводимые на экран и в файл результаты должны быть снабжены
заголовками, поясняющими этот результат и оформлены в виде таблиц.


Задание:
Фамилия и инициалы автора Название книги Год издания
15 символов 20 символов число

Поиск и вывод на экран записей о всех книгах, изданных до 1985 года.
Удаление записей о книгах, с фамилией автора “Иванов”.
Упорядочение массива по убыванию года издания.


Помогите пожалуйста!!!

Последний раз редактировалось Stilet; 22.11.2010 в 08:27.
Сеня2007 вне форума Ответить с цитированием
Старый 22.11.2010, 06:56   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну можно не удалять из массива физически, а просто сделать пометку - удален. Можно удалять следующим образом - перезаписывать последним элементом, а последний элемент считать свободным. В следующий раз предпоследним и т.д.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 22.11.2010, 08:00   #3
Сеня2007
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 16
По умолчанию

В том то и дело что как это сделать я незнаю. Пытался а толку нет.
Сеня2007 вне форума Ответить с цитированием
Старый 22.11.2010, 08:31   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В type_rec добавь еще поле Deleted:boolean
Когда захочешь элемент удалить просто выставь в его поле True, а во всех циклах, которые проходят по массиву, поставь вначале
Код:
if spis[i].deleted then continue
Уловил месседж?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Out of memory в динамическом массиве Jor1k Общие вопросы Delphi 16 27.10.2010 18:39
Где мой кося в динамическом массиве? Utkin Общие вопросы Delphi 9 09.07.2010 15:35
считает что ReOpArr это обычный массив и не может применить к нему процедуру SetLength. Dunpeal Общие вопросы Delphi 2 24.12.2007 08:07
необходимо сравнить массив С1-С50 на совпадение в массиве А1-А267 Бэн ай нид хелп Microsoft Office Excel 1 10.09.2007 20:10
Количество элементов в динамическом массиве lytkin Общие вопросы Delphi 8 21.02.2007 14:50