IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Динамические структуры (Очередь), Чтение из очереди в массив
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Задание таково. Даны детские сады (наименовани, номер, кол-во детей, район, плата). Нужно последовательно сделать такие операции (насколько я понял для каждой нужна своя процедурка).
1) Записать данные в файл. (Написано, работает)
2) Считать из этого файла в очередь. (Написано, но не знаю правильно или нет, так как не знаю как проверить)
3) Из очереди считать в массив. (Не соображу как подскажите?)
4) Отсортировать массив в зависимости от ключа сортировки. (Готово, работает)
5) Записать отсортированные данные в отдельный файл. (Готово, работает)


Program Lab1;
uses crt;
type
det_ptr=^tdetsad;
Tdetsad = record
name: string;
number: integer;
child: integer;
rayon: string;
plata: integer;
next:det_ptr;
End;
TArDetsad = array [1..100] of Tdetsad;
Var
cur:det_ptr; i:integer;
f,ff:text;
Detsad: TArDetsad;
Kol: integer;


procedure vvod (var A:TArDetsad);
Var
i:byte;
Begin
Assign(f,'C:\lab.txt');
Rewrite(f);
For i:=1 to kol do
Begin
Writeln('vvedite nazvanie', i ,':'); Readln(A[i].name); Writeln(f,A[i].name);
Writeln('vvedite nomer sada', i ,':'); Readln(A[i].number);Writeln(f,A[i].number);
Writeln('vvedite kolichestvo detey', i ,':'); Readln(A[i].child); Writeln(f,A[i].child);
Writeln('vvedite rayon', i ,':'); Readln(A[i].rayon); Writeln(f,A[i].rayon);
Writeln('vvedite platu', i ,':'); Readln(A[i].plata); Writeln(f,A[i].plata);
End;
Close(f);
End;

procedure add_to_och (var b:det_ptr);
var
run:det_ptr;
Begin
For i:=1 to kol do
Begin
If cur=nil then cur:=b else
Begin
run:=cur;
while run^.next<>nil do
run:=run^.next;
run^.next:=b;
End;
New(b);
With b^do
Begin
Reset(f);
Readln(f,name);
Readln(f,number);
Readln(f,child);
Readln(f,rayon);
Readln(f,plata);
End;
Close(f);
b^.next:=nil;
End;
End;

procedure obmen( var c2:tardetsad; i:byte; j:byte);
Var
t:tdetsad;
Begin
T:=c2[j+1];
c2[j+1]:=c2[j];
c2[j]:=t;
End;


procedure sort(var C:TArDetsad);
var
d,i,j:byte;
Begin
Writeln('vvedite pole po kotoromu nuzhno sortirovat');
Writeln('1:nazvanie 2:nomer 3:kolicestvo detey 4:rayon 5:plata');

Readln(d);
For i:=1 to kol-1 do
For j:=1 to kol-1 do
Case d of
1: If c[j].name> c[j+1].name then obmen(c,i,j);
2: If c[j].number> c[j+1].number then obmen(c,i,j);
3: If c[j].child> c[j+1].child then obmen(c,i,j);
4: If c[j].rayon> c[j+1].rayon then obmen(c,i,j);
5: If c[j].plata> c[j+1].plata then obmen(c,i,j);
End;
End;
procedure vivod(var B:TArDetsad);
var
i:byte;
Begin
Assign(ff,'C:\vvivod.txt');
Rewrite(ff);
For i:=1 to kol do
Begin
Writeln( ff, B[i].name);
Writeln(ff,B[i].number);
Writeln(ff,B[i].child);
Writeln(ff,B[i].rayon);
Writeln(ff,B[i].plata);
End;
Close(ff);
End;


Begin
clrscr;
Writeln('vvedite kolichestvo detskih sadov');
Readln(kol);
vvod(detsad);
add_to_och(detsad[i].next);
sort(detsad);
vivod(detsad);
Readln;
End.



Сообщение отредактировано: Ametist -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


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


Program Lab1;
uses crt;
type
det_ptr=^tdetsad;
Tdetsad = record
name: string;
number: integer;
child: integer;
rayon: string;
plata: integer;
next:det_ptr;
End;
TArDetsad = array [1..10] of Tdetsad;
Var
cur:det_ptr; i:integer;
f,ff:text;
Detsad,Detsad2: TArDetsad;
Kol: integer;
procedure add_to_och ;
var
b:det_ptr;
run:det_ptr;
Begin
New(b);
With b^do
Begin
Reset(f);
Readln(f,name);
Readln(f,number);
Readln(f,child);
Readln(f,rayon);
Readln(f,plata);
Close(f);
End;
If cur=nil then cur:=b else
Begin
run:=cur;
while run^.next<>nil do
run:=run^.next;
run^.next:=b;
End;
b^.next:=nil;
End;
procedure schitivanie(var A:TARDetsad);
var
j:integer;
Begin
j:=1;
Repeat
With A[j] do
Begin
name:=cur^.name;
number:=cur^.number;
child:=cur^.child;
rayon:=cur^.rayon;
plata:=cur^.plata;
End;
j:=j+1;
cur:=cur^.next;
Until cur<>nil;
End;
procedure vvod (var A:TArDetsad);
Var
i:byte;
Begin
Assign(f,'C:\lab.txt');
Rewrite(f);
For i:=1 to kol do
Begin
Writeln('vvedite nazvanie', i ,':'); Readln(A[i].name); Writeln(f,A[i].name);
Writeln('vvedite nomer sada', i ,':'); Readln(A[i].number);Writeln(f,A[i].number);
Writeln('vvedite kolichestvo detey', i ,':'); Readln(A[i].child); Writeln(f,A[i].child);
Writeln('vvedite rayon', i ,':'); Readln(A[i].rayon); Writeln(f,A[i].rayon);
Writeln('vvedite platu', i ,':'); Readln(A[i].plata); Writeln(f,A[i].plata);
End;
Close(f);
End;

procedure vivod(var B:TArDetsad);
var
i:byte;
Begin
Assign(ff,'C:\vivod.txt');
Rewrite(ff);
For i:=1 to kol do
Begin
Writeln(ff,B[i].name);
Writeln(ff,B[i].number);
Writeln(ff,B[i].child);
Writeln(ff,B[i].rayon);
Writeln(ff,B[i].plata);
End;
Close(ff);
End;

procedure obmen( var c2:tardetsad; i:byte; j:byte);
Var
t:tdetsad;
Begin
T:=c2[j+1];
c2[j+1]:=c2[j];
c2[j]:=t;
End;


procedure sort(var C:TArDetsad);
var
d,i,j:byte;
Begin
Writeln('vvedite pole po kotoromu nuzhno sortirovat');
Writeln('1:nazvanie 2:nomer 3:kolicestvo detey 4:rayon 5:plata');

Readln(d);
For i:=1 to kol-1 do
For j:=1 to kol-1 do
Case d of
1: If c[j].name> c[j+1].name then obmen(c,i,j);
2: If c[j].number> c[j+1].number then obmen(c,i,j);
3: If c[j].child> c[j+1].child then obmen(c,i,j);
4: If c[j].rayon> c[j+1].rayon then obmen(c,i,j);
5: If c[j].plata> c[j+1].plata then obmen(c,i,j);
End;
End;
Begin
clrscr;
Writeln('vvedite kolichestvo detskih sadov');
Readln(kol);
vvod(detsad);
For i:=1 to kol do
add_to_och;
schitivanie(detsad2);
sort(detsad2);
vivod(detsad2);
Readln;
End.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Все, уже ничего не надо, я сам во всем разобрался=) Тему можно удалить, дабы не засорять форум=)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.11.2020 14:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name