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

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

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

 
 Ответить  Открыть новую тему 
> Сортировка списка, введенного из файла
сообщение
Сообщение #1


Новичок
*

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

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


Привет.
Вот задачу решал, не могу коечто одолеть:

Напишите процедуру создания линейного списка, в информационные поля элементов которого заносятся числа, считываемые из файла (файл может оказаться пустым). Имя файла вводится с клавиатуры в главной программе и передается в процедуру в качестве параметра. Рассмотрите следующие варианты создания списка:
а)первый включенный в список элемент оказывается в хвосте списка (последним);
б)первый включенный в список элемент оказывается в голове списка (первым);
в)элементы включаются в список в порядке возрастания: в информационном поле первого элемента списка должно быть записано минимальное значение, а последнего элемента – максимальное;
г)элементы, содержащие отрицательные значения, заносятся всегда в конец списка, а положительные – в начало (в порядке считывания из файла), нулевые – между положительными и отрицательными.

Программа недописана нет последней процедуры под г).
И когда я начинаю создавать файл (цифра 3) говорит что "файл закрыт или подобное", пять я с процедурами перехимичил (.
И вообще есть ли помимо этих недочетов еще какиенибудь.

Вот сама прога:


Program work_N3_spiski;

Uses
Crt;

Type
Point = ^List;
List = Record
Inf : Integer;
Next : Point;
END;

Var
Head, Temp, First : Point;
Data : Integer;
FileOfData : File Of Integer;
NameOfFile : String;
Buffer, K, I : Integer;
V1, V2 : Point;
FlagExitMenu : Boolean;
FlagSelect : Integer;

{CREATE NAME OF FILE}

Procedure CreateName;
BEGIN
WriteLn('Enter name of file: ');
Read(NameOfFile);
END;

{CREATE FILE}

Procedure CreateFile;
BEGIN
CreateName;
WriteLn('Enter count elements of the file: ');
ReadLn(K);
Assign(FileOfData,NameOfFile);
Rewrite(FileOfData);
For I := 1 To K Do
BEGIN
WriteLn('Enter element: ');
ReadLn(Data);
Write(FileOfData,Data);
END;
Close(FileOfData);
END;

{HEAD IN THE END}

Procedure Inp(Var NameOfFile : String);
BEGIN
Assign(FileOfData,'NameOfFile');
Reset(FileOfData);
If FileSize(FileOfData) = 0 Then
BEGIN
WriteLn('File is empty');
ReadLn;
Exit;
END;
While Not EOF(FileOfData) Do
BEGIN
Read(FileOfData,Data);
New(Temp);
Temp^.Inf := Data;
Temp^.Next := Head;
Head := Temp;
END;
Close(FileOfData);
END;

{HEAD IN THE BEGIN}

Procedure _Inp(Var NameOfFile : String);
BEGIN
Assign(FileOfData,'NameOfFile');
Reset(FileOfData);
If FileSize(FileOfData) = 0 Then
BEGIN
WriteLn('File is empty');
ReadLn;
Exit;
END;
While Not EOF(FileOfData) Do
BEGIN
Read(FileOfData,Data);
New(Temp);
Temp^.Inf := Data;
Temp^.Next := NIL;
If Head = NIL Then
Head := Temp
Else
First^.Next := Temp;
First := Temp;
END;
Close(FileOfData);
END;

{OUTPUT OF THE LIST}

Procedure Out;
BEGIN
Temp := Head;
WriteLn('Elements of the list: ');
While (Temp <> NIL) Do
BEGIN
WriteLn(Temp^.Inf);
Temp := Temp^.Next;
END;
END;

{DELETE OF ELEMENTS OF THE LIST}

Procedure Del;
BEGIN
While (Head <> NIL) Do
BEGIN
Dispose(Head);
Head := Temp;
END;
END;

{SORTING OF LIST}

Procedure S(L : Point);
BEGIN
V1 := L;
While V1^.Next <> NIL Do
BEGIN
V2 := V1^.Next;
While V2 <> NIL Do
BEGIN
If V1^.Inf > V2^.Inf Then
BEGIN
Buffer := V1^.Inf;
V1^.Inf := V2^.Inf;
V2^.Inf := Buffer;
END;
V2 := V2^.Next;
END;
V1 := V1^.Next;
END;
END;

{=======MAIN PROGRAM=======}

BEGIN
ClrScr;
FlagExitMenu := False;
Repeat
WriteLn('Choose point: ');
WriteLn('0 - Create of file');
WriteLn('1 - FIFO');
WriteLn('2 - LIFO');
WriteLn('3 - Sorting of list');
WriteLn('4 - Sorting of list number two');
WriteLn('5 - Exit');
ReadLn(FlagSelect);
Case FlagSelect Of
0 : BEGIN
CreateFile;
END;
1 : BEGIN
_Inp(NameOfFile);
Out;
Del;
END;
2 : BEGIN
Inp(NameOfFile);
Out;
Del;
END;
3 : BEGIN
Inp(NameOfFile);
S(Temp);
Out;
Del;
END;
{ 4 : BEGIN

END;}
5 : FlagExitMenu := True;
END;
WriteLn('Please, push batton "Enter"');
ReadLn;
ClrScr;
Until FlagExitMenu;
END.



Добавлено через 3 мин.
Файл логический.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

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

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


Ктонить посмотрите эту задачку.
Вот на всякий случай исходник выкладываю:


Прикрепленные файлы
Прикрепленный файл  SPISOKN3.PAS ( 3.64 килобайт ) Кол-во скачиваний: 152
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Не могли бы вы подсказать в чем здесь ошибка? Компилер говорит что ошибка чтения диска, из-за чего?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

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

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


Решил таки... Если есть ошибки - пожалуйста напищите.


Program work_N3_spiski;

Uses
Crt;

Type
Point = ^List;
List = Record
Inf : Integer;
Next : Point;
END;

Var
Head, Temp, First : Point;
Data : Integer;
FileOfData : File Of Integer;
NameOfFile : String;
Buffer, K, I : Integer;
V1, V2 : Point;
FlagExitMenu : Boolean;
FlagSelect : Integer;

{CREATE NAME OF FILE}

Procedure CreateName;
BEGIN
WriteLn('Enter name of file: ');
Read(NameOfFile);
END;

{CREATE FILE}

Procedure CreateFile;
BEGIN
CreateName;
Write('Enter count elements of the file: ');
ReadLn(K);
Assign(FileOfData,NameOfFile);
Rewrite(FileOfData);
For I := 1 To K Do
BEGIN
Write('Enter element: ');
ReadLn(Data);
Write(FileOfData,Data);
END;
Close(FileOfData);
END;

{BROWSE}

Procedure browse(var NameOfFile : String);
BEGIN
Write('Enter name of file: ');
ReadLn(NameOfFile);
Assign(FileOfData,NameOfFile);
{$I-}{otkl prover oshib}
Reset(FileOfData);
{$I+}
If IOResult = 0 Then
BEGIN
If FileSize(FileOfData) = 0 Then WriteLn('File is empty ')
Else
Seek(FileOfData,0);
WriteLn('Output from file');
While (NOT EOF(FileOfData)) Do
BEGIN
Read(FileOfData, Data);
Write(Data:3);
END;
END
Else
WriteLn('File with this name is not ');
END;

{HEAD IN THE END}

Procedure Inp(Var NameOfFile : String);
BEGIN
Assign(FileOfData,NameOfFile);
Reset(FileOfData);
If FileSize(FileOfData) = 0 Then WriteLn('File is empty ')
Else WriteLn;
While Not EOF(FileOfData) Do
BEGIN
Read(FileOfData,Data);
New(Temp);
Temp^.Inf := Data;
Temp^.Next := Head;
Head := Temp;
END;
Temp := Head;
Close(FileOfData);
END;

{HEAD IN THE BEGIN}

Procedure _Inp(Var NameOfFile : String);
BEGIN
Assign(FileOfData,NameOfFile);
Reset(FileOfData);
If FileSize(FileOfData) = 0 Then WriteLn('File is empty ')
Else WriteLn;
While Not EOF(FileOfData) Do
BEGIN
Read(FileOfData,Data);
New(Temp);
Temp^.Inf := Data;
Temp^.Next := NIL;
If Head = NIL Then
Head := Temp
Else
First^.Next := Temp;
First := Temp;
END;
Close(FileOfData);
END;

{OUTPUT OF THE LIST}

Procedure Out;
BEGIN
Temp := Head;
WriteLn('Elements of the list: ');
While (Temp <> NIL) Do
BEGIN
WriteLn(Temp^.Inf);
Temp := Temp^.Next;
END;
END;

{DELETE OF ELEMENTS OF THE LIST}

Procedure Del;
BEGIN
While (Head <> NIL) Do
BEGIN
Dispose(Head);
Head := Temp;
END;
END;

{SORTING OF LIST}

Procedure S(L : Point);
Var
V1, V2 : Point;
Buffer : Integer;
BEGIN
V1 := L;
While V1^.Next <> NIL Do
BEGIN
V2 := V1^.Next;
While V2 <> NIL Do
BEGIN
If V1^.Inf > V2^.Inf Then
BEGIN
Buffer := V1^.Inf;
V1^.Inf := V2^.Inf;
V2^.Inf := Buffer;
END;
V2 := V2^.Next;
END;
V1 := V1^.Next;
END;
END;

Procedure S2(L : Point);
Var
V1, V2 : Point;
Buffer : Integer;
BEGIN
V1 := L;
While V1^.Next <> NIL Do
BEGIN
V2 := V1^.Next;
While V2 <> NIL Do
BEGIN
If V1^.Inf < V2^.Inf Then
BEGIN
Buffer := V1^.Inf;
V1^.Inf := V2^.Inf;
V2^.Inf := Buffer;
END;
V2 := V2^.Next;
END;
V1 := V1^.Next;
END;
END;

{=======MAIN PROGRAM=======}

BEGIN
ClrScr;
FlagExitMenu := False;
Repeat
WriteLn('Choose point: ');
WriteLn('0 - Create file');
WriteLn('1 - Browse file');
WriteLn('2 - List # 1');
WriteLn('3 - Sorting # 1');
WriteLn('4 - Sorting # 2');
WriteLn('5 - List # 2');
WriteLn('6 - Sorting # 1');
WriteLn('7 - Sorting # 2');
WriteLn('8 - Exit');
WriteLn;
WriteLn('9 - Delete');
ReadLn(FlagSelect);
Case FlagSelect Of
0 : CreateFile;
1 : browse(NameOfFile);
2 : BEGIN
Inp(NameOfFile);
Out;
Del;
END;
3 : BEGIN
Inp(NameOfFile);
s(Temp);
Out;
Del;
END;
4 : BEGIN
Inp(NameOfFile);
s2(Temp);
Out;
Del;
END;
5 : BEGIN
_Inp(NameOfFile);
Out;
Del;
END;
6 : BEGIN
_Inp(NameOfFile);
s(Temp);
Out;
Del;
END;
7 : BEGIN
_Inp(NameOfFile);
s2(Temp);
Out;
Del;
END;
8 : FlagExitMenu := True;
9 : Del;
END;
WriteLn('Please, push batton "Enter"');
ReadLn;
ClrScr;
Until FlagExitMenu;
END.



Добавлено через 11 мин.
)) *напишите
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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