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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2008, 20:34   #1
Sweeney
 
Регистрация: 10.12.2008
Сообщений: 6
По умолчанию Тяжелая задачка

Помогите решить, ребята)) пожалуйста) Нужно решение в среду, в четверг уже сдаю))))

Текст задания:

1. Описать пользовательский тип данных с именем TRAIN типа запись
(RECORD), содержащий следующие поля:
- NAZN - название пункта назначения - (тип STRING);
- NUMR - номер поезда (тип INTEGER);
- TIME - время отправления (тип STRING).
2. Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив RASP, состоящий из 8-и эле-
ментов типа TRAIN; записи должны быть упорядочены по номерам поездов.
- вывод на экран информации о поезде, номер которого введен с
клавиатуры;
- если таких поездов нет - выдать на дисплей соответствующее со-
общение
Выбор режима работы программы и ввод исходных данных осуществля-
ется через окно диалога. Формируемый массив RASP отображаетя в окне
исходных данных. Результаты поиска отображаются в окне результатов.


Заранее спасибо)
Sweeney вне форума Ответить с цитированием
Старый 15.12.2008, 22:32   #2
slips
Форумчанин
 
Аватар для slips
 
Регистрация: 28.10.2008
Сообщений: 350
По умолчанию

программа не тяжёлая, и тем уйма аналогичных тем, советую просто поискать
slips вне форума Ответить с цитированием
Старый 15.12.2008, 23:11   #3
Sweeney
 
Регистрация: 10.12.2008
Сообщений: 6
По умолчанию

Да блин, интересно, конечно, какие задачи для вас действительно сложные))
Sweeney вне форума Ответить с цитированием
Старый 15.12.2008, 23:25   #4
slips
Форумчанин
 
Аватар для slips
 
Регистрация: 28.10.2008
Сообщений: 350
По умолчанию

вот один из наиболее распространенных примеров работы с record
Код:
type
  TMember = record
    Name : string[50];
    eMail : string[30];
    Posts : LongInt;
  end;
  
var Members : array[1..50] of TMember;
var F : file of TMember;

Запись
Предположим, что у нас есть массив, заполненный именами, e-мейлами и т.д., и мы хотим сохранить эту информацию на диск. Делается это следующим образом:

 var F : file of TMember;
begin
 AssignFile(F,'members.dat');
 Rewrite(F);
 try
  for i:= 1 to 50 do
   Write (F, Members[i]);
 finally
  CloseFile(F);
 end;
end;

Чтение
Для получения всей информации из файла 'members.dat' используется следующий код:

 var Member: TMember
     F : file of TMember;
begin
 AssignFile(F,'members.dat');
 Reset(F);
 try
  while not Eof(F) do begin
   Read (F, Member);
 {  Что-нибудь делаем с данными; }
  end;
 finally
  CloseFile(F);
 end;
end;

Поиск и позиционирование
Обычно, доступ к файлам осуществляется последовательно. При чтении из файла (используя стандартную процедуру Read) или при записи (используя стандартную процедуру Write), текущая позиция в файле перемещается на следующий по порядку компонент (следующая запись). К файлам typed так же можно обращаться через стандартную процедуру Seek, которая перемещает текущую позицию в файле на указанный компонент. Для определения текущей позиции в файле и размера файла можно использовать функции FilePos и FileSize.
{устанавливаем на начало -  на первую запись}
Seek(F, 0);

{устанавливаем на 5-ю запись}
Seek(F, 5);

{Переходим в конец - "после" последней записи}
Seek(F, FileSize(F));

Изменение и обновление
Мы разобрались как записывать и считывать из файла массив Members. А что, если нам нужно найти десятую запись и изменить в ней e-mail? Давайте посмотрим на процедуру, которая делает это:

procedure ChangeEMail
  (const RecN : integer; const NewEMail : string);
var DummyMember : TMember;
begin
 {связывание, открытие, блок обработки исключений}
 Seek(F, RecN);
 Read(F, DummyMember);
 DummyMember.Email := NewEMail;
 {чтение перемещается на следующую запись, для этого необходимо
 вернуться на первоначальную запись, а затем записать}
 Seek(F, RecN);
 Write(F, DummyMember);
 {закрываем файл}
end;
slips вне форума Ответить с цитированием
Старый 15.12.2008, 23:36   #5
Oleg_453
 
Регистрация: 13.11.2008
Сообщений: 5
По умолчанию

чет я пару таких же задач на С++ писал(мож для одногруппников твоих). Sweeney, тебе точно на паскале?=)
Oleg_453 вне форума Ответить с цитированием
Старый 16.12.2008, 00:06   #6
Sweeney
 
Регистрация: 10.12.2008
Сообщений: 6
По умолчанию

Ну да.. как бы у нас программа в униере - неособо умная) задания изначально писались с учетом работы в СИ. Но программу изменили и сначала мы проходим паскаль) А задания остались)) если что-то невозможно написать в Паскале - тогда не опускается.
Так что пожалуйста, помогите лучше написанием программы)) пожалуйста)
Sweeney вне форума Ответить с цитированием
Старый 16.12.2008, 01:27   #7
Oleg_453
 
Регистрация: 13.11.2008
Сообщений: 5
По умолчанию

Если ты с Йолы и пойдет на С++, то стучи 424713331 договоримся!
Oleg_453 вне форума Ответить с цитированием
Старый 16.12.2008, 03:40   #8
Sweeney
 
Регистрация: 10.12.2008
Сообщений: 6
По умолчанию

Нет, нужен именно Паскаль
Sweeney вне форума Ответить с цитированием
Старый 16.12.2008, 13:10   #9
YuraPascal
Новичок
Джуниор
 
Регистрация: 27.11.2008
Сообщений: 1
По умолчанию

Я напишу тебе ее на Pascal. Пиши на yura30682@rambler.ru
Договоримся.
YuraPascal вне форума Ответить с цитированием
Старый 16.12.2008, 19:25   #10
Sweeney
 
Регистрация: 10.12.2008
Сообщений: 6
По умолчанию

Всем спасибо, уже сделали
Цитата:
PROGRAM Time_Table;

TYPE

TRAIN = Record
Nazn: STRING;
NUMBER:INTEGER;
TIME:STRING;
END;

VAR

RASP,RASP_bef: ARRAY[1..8] of TRAIN;
Hours, Minutes, S:String;
Hr, Min, i, j, i0, Max, Num, Train_Number:Integer;
Train_Exists:BOOLEAN;

BEGIN

{Ввод данных в расписание}
FOR i:=1 TO 8 DO
BEGIN
Write('Введите номер поезда '); ReadLn(RASP_bef[i].NUMBER);
Write('Введите пункт назначения '); ReadLn(RASP_bef[i].Nazn);
Write('Время отправления. Введите часы '); Readln(Hr);
Str(Hr,S);
IF Hr>=10 THEN Hours:=S ELSE Hours:='0'+S[1];
Str(Min,S);
Write('Время отправления. Введите минуты '); Readln(Min);
IF Min>=10 THEN Minutes:=S ELSE
Minutes:='0'+S[1];
RASP_bef[i].Time:=Hours+'.'+Minutes;
END;

{Упорядочение по номерам поездов}
Num:=8;
FOR j:=1 TO 8 DO
BEGIN
Max:=10000;
FOR i:=1 TO Num DO
IF RASP_bef[i].NUMBER<Max THEN
BEGIN
Max:= RASP_bef[i].NUMBER;
i0:=i;
END;
RASP[j]:=RASP_bef[i0];
IF i0=Num THEN Dec(Num) ELSE
BEGIN
FOR i:=i0+1 TO Num DO RASP_bef[i-1]:=RASP_bef[i];
Dec(Num);
END;
END;

{Показ расписания}
WriteLn;
WriteLn('Расписание:');
FOR i:=1 TO 8 DO
BEGIN
Write('Поезд N: ', RASP[i].NUMBER);
Write(' Пункт: ', RASP[i].Nazn);
Write(' Время: ', RASP[i].TIME);
Writeln;
END;
WriteLn('Для продолжения нажмите "ENTER"');
ReadLn;

{Выдача информации о поедах}
WriteLn;
Writeln('Для выхода из программы введите нулевой номер поезда');
REPEAT
Train_Exists:=FALSE;
Write('Введите номер поезда '); ReadLn(Train_Number);
IF Train_Number>0 THEN
BEGIN
i:=0;
REPEAT
Inc(i);
IF i<9 THEN
IF RASP[i].NUMBER=Train_Number THEN
BEGIN
Train_Exists:=TRUE;
Writeln('Поезд N: ', Train_Number);
Writeln('Пункт назначения: ', RASP[i].Nazn);
Writeln('Время отправления: ', RASP[i].TIME);
END;
UNTIL (Train_Exists) OR (i=9);
IF i=9 THEN WriteLn('Такого поезда нет!');
WriteLn;
END;
UNTIL Train_Number = 0;

END.
Sweeney вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачка Mihael-Vlz Паскаль, Turbo Pascal, PascalABC.NET 1 03.12.2008 23:18
Задачка spirit0k Общие вопросы C/C++ 7 11.11.2008 17:36
Задачка Claster Помощь студентам 2 24.09.2008 17:53