Архивировано

Эта тема находится в архиве и закрыта для публикации сообщений.

DoDgY

turbo pascal

Рекомендованные сообщения

Не могу написать прогу!Люди кто знает плиз помогите))))Я бы сам с радостью посидел над ней...просто такая ситуация,что мне к понедельнику надо 5 предметов учить и эту программу тоже к понедельнику сдавать((

 

 

Имеется типизированный файл,состоящий из записей следующей структуры: (фамилия,институт,курс). В зависимости от ключа отсортировать его по первому,второму или третьему полю (т.е. в зависимости от того,как захочет пользователь отсортировать по фамилии или институту или курсу).

 

Плиз помогите))) :D заранее спасибо))) :thanx:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Специально для ленивых и "отдаленных" в этом разделе есть отдельная тема.

 

"Я бы сам с радостью посидел над ней" - охотно верю. :) Вы бы хоть с радостью начали, тогда может я и помог Вам.... :censored:

 

 

P.S. Название темы крайне оригинальное, завлекающее...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не могу написать прогу!Люди кто знает плиз помогите))))Я бы сам с радостью посидел над ней...просто такая ситуация,что мне к понедельнику надо 5 предметов учить и эту программу тоже к понедельнику сдавать((

Имеется типизированный файл,состоящий из записей следующей структуры: (фамилия,институт,курс). В зависимости от ключа отсортировать его по первому,второму или третьему полю (т.е. в зависимости от того,как захочет пользователь отсортировать по фамилии или институту или курсу).

 

Плиз помогите))) :) заранее спасибо))) :)

Я бы тоже с радостью над ней бы посидел, но за $$$$ )))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

вот всё,что я пока написал:

 

 

program vvod;

uses crt;

type students=record

fam:string[40];

inst:string[40];

kurs:byte;

end;

var

f1:file of students;

n:students;

i:integer;

begin

clrscr;

assign(f1,'file1.dat');

rewrite(f1);

for i:=1 to 3 do

begin

write('BBEDITE: ');

writeln;

readln (n.fam);

readln (n.inst);

readln (n.kurs);

end;

write (f1,n);

close(f1);

end.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1-форматируй код

2-почти правильно,но не забывай,что обрабатывается в цикле

program vvod;

uses crt;
type students=record
 fam:string[40];
 inst:string[40];
 kurs:byte;
end;

var
 f1:file of students;
 n:students;
 i:integer;
begin
 clrscr;
 assign(f1,'file1.dat');
 rewrite(f1);
 for i:=1 to 3 do
begin
  write('BBEDITE: ');
  writeln;
  readln (n.fam);
  readln (n.inst);
  readln (n.kurs);
  write (f1,n);		 {если написать вне цикла,то сохраняется одна(последняя) запись,иначе все три}
end;
 close(f1);
end.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Программируй структурно! Не вникнешь в приведенный код - спрашивай. :(

В прикрепленном файле - рабочий пример.

 

PROGRAM SLM;

{$APPTYPE CONSOLE}

USES  SysUtils;

Const MaxStudentsCount : Byte = 30;

Type TStudentData = Record
Name : String [32];
InstituteName : String [32];
CurrentCourse : Byte;
End; { TStudent }

Var StudentsList : array [1..MaxStudentsCount] of TStudentData;
StudentsInList : Byte;
InStr : String;
CurrentMode : Integer;

Procedure ShowMenu;
Begin
 WriteLn ('Job list:');
 WriteLn ('0. Show this menu.');
 WriteLn ('1. Show Current List.');
 WriteLn ('2. Add record to Current List.');
 WriteLn ('3. Edit specified item of Current List.');
 WriteLn ('4. Delete specified item of Current List.');
 WriteLn ('5. Load List from file.');
 WriteLn ('6. Save current List to file.');
 WriteLn ('7. Clear current List.');
 WriteLn ('8. Exit.');
End; { ShowMenu }

Procedure LoadListFromFile;
var FileName : String;
 F : File of TStudentData;
Begin

  Write ('Input a filename :');
  ReadLn ( FileName );
  If not (FileExists (FileName)) then
 WriteLn ('No such file, or access denied.')
  else begin
 StudentsInList := 0;
 AssignFile (F, Filename);
 Reset (F);
 repeat begin
   Inc (StudentsInList);
   Read (F, StudentsList[StudentsInList]);
 end until Eof(F);
 WriteLn ('List of '+IntToStr(StudentsInList)+' record(s) is loaded.');
  end;

End; { LoadListFromFile }


Procedure SaveListToFile;
var FileName : String;
 F : File of TStudentData;
 I : Integer;
Begin

  Write ('Input a filename :');
  ReadLn ( FileName );
  AssignFile (F, Filename);
  Rewrite (F);
  Write ('Saving... ');
  For I := 1 to StudentsInList do
 Write (F, StudentsList[I]);
  WriteLn ('ok.');

End; { LoadListFromFile }


Procedure ShowCurrentList;
var InStr : String;
 I : Integer;
Begin

 If StudentsInList = 0 then begin
WriteLn ('Current List is Empty.');
Write ('Load list from file (y/n)? :');
ReadLn ( InStr );
if InStr = 'y' then LoadListFromFile Else Exit;
 end else begin
WriteLn ('Current List content of '+intToStr(StudentsInList)+' item(s):');
WriteLn ('Numder in List / Person Name / Institute Name / Current Course');
for I:= 1 to StudentsInList do begin
  WriteLn ( '  '+IntToStr(I)+'> '+StudentsList[I].Name+', '+StudentsList[I].InstituteName+', '+intToStr(StudentsList[I].CurrentCourse));
end;
 end;

End; { ShowCurrentList }

Function InputStudentData : TStudentData;
var InStr : String;
 InNum : Integer;
begin
 WriteLn ('Input new item:');
 InStr := '';
 While Trim(InStr)='' do begin
Write ('Input a name of person:');
ReadLn (InStr);
 end;
 Result.Name := InStr;
 InStr := '';
 While Trim(InStr)='' do begin
Write ('Input a name of institute:');
ReadLn (InStr);
 end;
 Result.InstituteName := InStr;
 InStr:='';
 While not(TryStrToInt (InStr, InNum)) do begin
Write ('Input a current course (number) :');
ReadLn (InStr);
 end;
 Result.CurrentCourse := InNum;

End; { InputStudentData }

Procedure ClearList;
begin
 StudentsInList := 0;
 WriteLn ('List cleared.');
end; { ClearList }

Procedure AddToList;
var InStr : String;
begin
 WriteLn ('Let''s input a new List...');
 InStr :='y';
 While (InStr = 'y') do begin
Inc (StudentsInList);
StudentsList[StudentsInList]:=InputStudentData;
Write ('Add another (y,n)? :');
ReadLn (inStr);
 end;
end; { AddToList }

BEGIN

 StudentsInList := 0;
 CurrentMode := 0;

 ShowMenu;
 While CurrentMode <> 5 Do begin
Write ('Select a job :');
ReadLn ( InStr );
If TryStrToInt ( InStr, CurrentMode ) then
  Case CurrentMode of
	0 : ShowMenu;
	1 : ShowCurrentList;
	2 : AddToList;
	5 : LoadListFromFile;
	6 : SaveListToFile;
	7 : ClearList;
	8 : Exit;
  End Else
	WriteLn ('No such job.');
 End;

END.

 

P.S. С сортировкой сам справишься?..

SLM.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

:good::(;);)

круто)))Спасибо)))

 

СУПЕР!!!!СПАСИБО ОГРОМНОЕ!Сортировку я сам смогу написать!!

 

 

:P:good::(:P;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

это на Delphi я так понял программа написана?

 

:lol: аа... пардон)))У меня возникло несколько вопросиков:

 

1)Read (F, StudentsList[studentsInList]); - это он считывает данные из файла а вот я не втыкнул просто в StudentsList[studentsInList]

 

2)WriteLn ('List of '+IntToStr(StudentsInList)+' record(s) is loaded.'); а тут что происходит??мне просто может некоторые операторы тут не известны,потому,что они конкректно отличаются от паскаля!((

 

3) begin

WriteLn ('Current List content of '+intToStr(StudentsInList)+' item(s):');

WriteLn ('Numder in List / Person Name / Institute Name / Current Course');

for I:= 1 to StudentsInList do begin

WriteLn ( ' '+IntToStr(I)+'> '+StudentsList.Name+', '+StudentsList.InstituteName+', '+intToStr(StudentsList.CurrentCourse));

end;

тут я тоже не понял!

 

4)WriteLn ('Input new item:');

InStr := '';

While Trim(InStr)='' Trim-??? и зачем InSTR := ''??

 

5)While not(TryStrToInt (InStr, InNum)) do ???

 

6)Write ('Input a current course (number) :');

ReadLn (InStr);

тут казве не Readln (numStr) ???

 

а остальное вроде всё понятно)))

 

пардон за мой догон)))заранее спасибо ещё разок))) :P:angry:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну,начнём:

процедур IntToStr и TryStrToInt в паскале нет,что не мешает написать их самостоятельно:

function IntToStr(i:integer):string;
var s:string;
begin
 str(i,s);
 IntToStr:=s;
end;

function TryStrToInt (s:string;i:integer):boolean;
var c:integer;
begin
 val(s,i,c);
 TryIntToStr:=(c=0);
end;

Дальше:

1)Read (F, StudentsList[studentsInList]); - это он считывает данные из файла а вот я не втыкнул просто в StudentsList[studentsInList]

StudentsInList := 0;			  {выставляем количество записей равное 0}
AssignFile (F, Filename);		{открываем файл}
Reset (F);							 
repeat begin
 Inc (StudentsInList);		   {увеличиваем количество записей на 1}
 Read (F, StudentsList[StudentsInList]); {считываем последнюю запись}
end until Eof(F);				  {пока не закончится файл}

3) begin

WriteLn ('Current List content of '+intToStr(StudentsInList)+' item(s):');

WriteLn ('Numder in List / Person Name / Institute Name / Current Course');

for I:= 1 to StudentsInList do begin

WriteLn ( ' '+IntToStr(I)+'> '+StudentsList.Name+', '+StudentsList.InstituteName+', '+intToStr(StudentsList.CurrentCourse));

end;

тут я тоже не понял!

ну,смотри:

первая строка-выводим количество записей

третья:в цикле выводим записи

вроде всё ясно

WriteLn ('Input new item:');

InStr := '';

While Trim(InStr)='' Trim-??? и зачем InSTR := ''??

функция TRIM возвращает строку без начальных/конечных пробелов,в принципе можно было написать проще,но тогда остаются пробелы в начале и конце

While InStr='' do begin
Write ('Input a name of person:');
ReadLn (InStr);
 end;

зачем нужен InStr='';?

а посмотри что произойдёт если в InStr уже будет какой-нибудь текст,программа проскочит запрос на ввод

6)Write ('Input a current course (number) :');

ReadLn (InStr);

тут казве не Readln (numStr) ???

смотрим код,он в принципе похож на верхний,НО вместо проверки на наличие текста,проверяется возможность перевести текст в число

InStr:='';
 While not(TryStrToInt (InStr, InNum)) do begin
Write ('Input a current course (number) :');
ReadLn (InStr);
 end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

tz-lom, спасибо что прокомментировал, у самого времени не было... :D

 

DoDgY, есть еще вопросы?.. :D

 

P.S.

 

WriteLn ('Input new item:');

InStr := '';

While Trim(InStr)='' Trim-??? и зачем InSTR := ''??

 

функция TRIM возвращает строку без начальных/конечных пробелов,в принципе можно было написать проще,но тогда остаются пробелы в начале и конце

 

В этом случае "Trim-преобразование" позволяет не пропустить строку из пробелов, а в выходном значении Trim строку не обрабатывает. Уместно было бы сделать и "InStr:=Trim(InStr)". Вообще, считается хорошим тоном "нормализовывать" строки, как то, очищая их от специальных симвовов, лишних и парных пробелов.

 

ВАЖНО

 

Странно, что это пропустил tz-lom, но в моем коде есть вопиющая ошибка: в процедурах Load- и Save- toFile я забыл "закрыть файл". А это нужно делать обязательно. Так что дописываем "CloseFile (F)". Ну и еще кой какие мелочи... Кстати, писал по английски вынужденно, т.к. компилятор, которым я пользовался (FreePascal) не поддерживает кириллицу ANSI. Кстати, принято не "Job" а "Task", а еще там то Records, то Items, но эт так, самокритика.... :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ой! И еще... "While CurrentMode <> 5 Do begin" заменить на "While CurrentMode <> 8 Do begin" и "case 8" можно убрать. Чет я совсем безолаберный...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ой! И еще... "While CurrentMode <> 5 Do begin" заменить на "While CurrentMode <> 8 Do begin" и "case 8" можно убрать. Чет я совсем безолаберный...

НИчего)) бывает))) вот когда ты пишешь примерно такой код:

InitDirectX( HWND );
HWND = CreateWindow();

Но главное потом смущаешься и непонимаешь от чего все не работает... то тогда ты поймешь, что значит безолаберность)))))))

Всему учить надо)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасиб)))втыкнул)))теперь преподу осталось показать)))) :huh:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

хых,вот будет прикол если препод эту ветку читает :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

аа... у меня паскаль пишет што Tream ему не известен!Разве такая функция в паскале есть?Мы просто помню програмки на такую тему писали!

 

иии...всётаки мне вот эта часть не понятна!!!!

 

WriteLn ('List of '+IntToStr(StudentsInList)+' record(s) is loaded.');

паскаль ваще не понимает,что я хочу от него этим допиться!))

 

WriteLn ('Current List content of '+intToStr(StudentsInList)+' item(s):');

WriteLn ('Numder in List / Person Name / Institute Name / Current Course');

for I:= 1 to StudentsInList do begin

WriteLn ( ' '+IntToStr(I)+'> '+StudentsList.Name+', '+StudentsList.InstituteName+', '+intToStr(StudentsList.CurrentCourse));

 

 

и эт также!!!переменная s вообще же не обьявлялась!!!??

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

аа... у меня паскаль пишет што Tream ему не известен!Разве такая функция в паскале есть?Мы просто помню програмки на такую тему писали!

 

иии...всётаки мне вот эта часть не понятна!!!!

 

WriteLn ('List of '+IntToStr(StudentsInList)+' record(s) is loaded.'); // сообщаем, сколько записей загружено из файла

паскаль ваще не понимает,что я хочу от него этим допиться!))

 

WriteLn ('Current List content of '+intToStr(StudentsInList)+' item(s):');

WriteLn ('Numder in List / Person Name / Institute Name / Current Course');

for I:= 1 to StudentsInList do begin

WriteLn ( ' '+IntToStr(I)+'> '+StudentsList.Name+', '+StudentsList.InstituteName+', '+intToStr(StudentsList.CurrentCourse));

и эт также!!!переменная s вообще же не обьявлялась!!!??

 

1. Ну так и забей на "Trim" - это не существенно, а код "IntToStr" уде приводили.

2. Да где ты увидил "переменную s" !?..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ой...ещё забыл спросить про...

 

Result.Name := InStr;

 

не идея понятна,только у нас ведь к записи относится TStudentData а не Result тут просто Result сменить на TStudentData????

 

 

item(S): и ...т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Result - это переменная, значение которой является результатом функции. Переменная Result определена для каждой функции изначально, согласно возвращаемому функцией типу. В твоем случае функция возвращает запись типа TStudentData, соответственно и Result этой функции будет этого типа.

 

P.S. По всему видно, что Pascal ты знаешь очень плохо...

 

Вспомнил, в классическом паскале функция возвращает значение, присваивая в своем коде значение переменной, которая имеет имя самой функции.

 

item(S): и ...т.д.

 

Так ведь "items(s)" заключено в кавычки!!! Это строка!!! Где там переменная-то?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

:)

ну да я его ток начал учить вот и хренова знаю(((

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах