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

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

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

> Сортировка списка, введенного из файла
Совсем новичок
сообщение 26.11.2007 16:51
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
Совсем новичок
сообщение 27.11.2007 19:42
Сообщение #2


Новичок
*

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

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


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


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


Новичок
*

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

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


Не могли бы вы подсказать в чем здесь ошибка? Компилер говорит что ошибка чтения диска, из-за чего?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
not_programmer
сообщение 16.12.2007 19:53
Сообщение #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

 



- Текстовая версия 22.06.2025 21:49
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"