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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.04.2010, 21:32   #1
Kipyatok
Новичок
Джуниор
 
Регистрация: 03.04.2010
Сообщений: 3
По умолчанию Лабораторная работа.

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

Код программы:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Memo1: TMemo;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

Type
Tavt=record
Nmar: integer;
Tipavt: string[20];
Punkt: string[20];
VrOtpr: TDateTime;
VrPr: TDateTime;
end;

Var
Fz:File of Tavt;
Ft:TextFile;
Avto:array[1..100] of Tavt;
nzap:integer;
FileNameZ, FileNameT : string;

var
Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject); {кнопка добавления записи}
begin
nzap:=nzap+1;
with Avto[nzap] do begin
Nmar:=StrToInt(Edit1.Text);
Tipavt:=Edit2.Text;
Punkt:=Edit3.Text;
VrOtpr:=StrToTime(Edit4.Text);
VrPr:=StrToTime(Edit5.Text);
Memo1.Lines.Add(IntToStr(Nmar)+' '
+Tipavt+' '
+Punkt+' '
+timeToStr(VrOtpr)+' '
+timeToStr(VrPr));
end;
Write(fz,Avto[nzap]);// Запись в файл
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit5.Text:='';

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit5.Text:='';
Memo1.Clear;
// Сделать невидимой кнопку "Ввести запись"
nzap:=0;
Button1.Hide;

end;

procedure TForm1.Button2Click(Sender: TObject); {кнопка создания файла}
begin
Memo1.clear;
OpenDialog1.Title :='Создать новый файл'; // Изменение заголовка окна диалога
if OpenDialog1.Execute then // Выполнение стандартного диалога выбора имени файла
begin
FileNameZ:= OpenDialog1.FileName; // Возвращение имени дискового файла
AssignFile(Fz,FileNameZ); // Связывание файловой переменной Fz c именем файла
Rewrite(Fz); // Создание нового файла
end;
Button1.Show;

end;

procedure TForm1.Button3Click(Sender: TObject); {кнопка открытия файла}
begin
Memo1.clear;
if OpenDialog1.Execute then // Выполнение стандартного диалога выбора имени файла
begin
FileNameZ:= OpenDialog1.FileName; // Возвращение имени дискового файла
AssignFile(Fz, FileNameZ); // Связывание файловой переменной Fz c именем файла
Reset(Fz); // Открытие существующего файла
end;
while not eof(fz) do begin
nzap:=nzap+1;
Read(fz,Avto[nzap]); // Чтение записи из файла
with Avto[nzap] do

Memo1.Lines.Add(IntToStr(Nmar)+' '
+Tipavt+' '
+Punkt+' '
+TimeToStr(VrOtpr)+' '
+TimeToStr(VrPr));
end;
Button1.Show; // Сделать видимой кнопку "Ввести запись"

end;

procedure TForm1.Button6Click(Sender: TObject); {кнопка закрытия формы}
begin
form1.Close;
end;

procedure TForm1.Button5Click(Sender: TObject); {кнопка сохранения данных в другом файле}
var i:word;
begin
if SaveDialog1.Execute then // Выполнение стандартного диалога выбора имени файла
begin
FileNameT:= SaveDialog1.FileName; // Возвращение имени дискового файла
AssignFile(Ft, FileNameT); // Связывание файловой переменной Ft c именем файла
Rewrite(Ft); // Открытие нового текстового файла
end;
for i:=1 to nzap do
with Avto[i] do Writeln(ft,
IntToStr(Nmar)+' '
+Tipavt+' '
+Punkt+' '
+TimeToStr(VrOtpr)+' '
+TimeToStr(VrPr));
CloseFile(Ft); // Закрытие текстового файла
end

end.
я создаю файл «1» забиваю в него необходимые данные. Жму кнопку «сохранить» и создаю файл «2», куда все это дело сохраняется.
Собственно, с кнопкой 5 «Сохранение» и возникает проблема. Данные сохраняются в файле «2», но в искаженном виде и не полностью. Вылезают какие-то лишние цифры, иероглифы и т.д.
Про нахождение рейсов с минимальным временем пути я вообще молчу. Не понимаю даже алгоритма решения задачи.
Заранее спасибо за помощь.
Изображения
Тип файла: jpg интерфэйс.jpg (52.9 Кб, 156 просмотров)
Kipyatok вне форума
Старый 04.04.2010, 18:01   #2
Kipyatok
Новичок
Джуниор
 
Регистрация: 03.04.2010
Сообщений: 3
По умолчанию

Если необходимо - вот исходник
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Memo1: TMemo;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
Tavt=record
Nmar: integer;
Tipavt: string[20];
Punkt: string[20];
VrOtpr: TDateTime;
VrPr: TDateTime;
end;

Var
Fz:File of Tavt;
Ft:TextFile;
Avto:array[1..100] of Tavt;
nzap:integer;
FileNameZ, FileNameT : string;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
nzap:=nzap+1;
with Avto[nzap] do begin
Nmar:=StrToInt(Edit1.Text);
Tipavt:=Edit2.Text;
Punkt:=Edit3.Text;
VrOtpr:=StrToTime(Edit4.Text);
VrPr:=StrToTime(Edit5.Text);
Memo1.Lines.Add(IntToStr(Nmar)+' '
+Tipavt+' '
+Punkt+' '
+timeToStr(VrOtpr)+' '
+timeToStr(VrPr));
end;
Write(fz,Avto[nzap]); // Запись в файл
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit5.Text:='';

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit5.Text:='';
Memo1.Clear;
// Сделать невидимой кнопку "Ввести запись"
nzap:=0;
Button1.Hide;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.clear;
OpenDialog1.Title :='Создать новый файл'; // Изменение заголовка окна диалога
if OpenDialog1.Execute then // Выполнение стандартного диалога выбора имени файла
begin
FileNameZ:= OpenDialog1.FileName; // Возвращение имени дискового файла
AssignFile(Fz,FileNameZ); // Связывание файловой переменной Fz c именем файла
Rewrite(Fz); // Создание нового файла
end;
Button1.Show;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.clear;
if OpenDialog1.Execute then // Выполнение стандартного диалога выбора имени файла
begin
FileNameZ:= OpenDialog1.FileName; // Возвращение имени дискового файла
AssignFile(Fz, FileNameZ); // Связывание файловой переменной Fz c именем файла
Reset(Fz); // Открытие существующего файла
end;
while not eof(fz) do begin
nzap:=nzap+1;
Read(fz,Avto[nzap]); // Чтение записи из файла
with Avto[nzap] do

Memo1.Lines.Add(IntToStr(Nmar)+' '
+Tipavt+' '
+Punkt+' '
+TimeToStr(VrOtpr)+' '
+TimeToStr(VrPr));
end;
Button1.Show; // Сделать видимой кнопку "Ввести запись"

end;

procedure TForm1.Button6Click(Sender: TObject);
begin
form1.Close;
end;

procedure TForm1.Button5Click(Sender: TObject);
var i:word;
begin
if SaveDialog1.Execute then // Выполнение стандартного диалога выбора имени файла
begin
FileNameT:= SaveDialog1.FileName; // Возвращение имени дискового файла
AssignFile(Ft, FileNameT); // Связывание файловой переменной Ft c именем файла
Rewrite(Ft); // Открытие нового текстового файла
end;
for i:=1 to nzap do
with Avto[i] do Writeln(ft,
IntToStr(Nmar)+' '
+Tipavt+' '
+Punkt+' '
+TimeToStr(VrOtpr)+' '
+TimeToStr(VrPr));
CloseFile(Ft); // Закрытие текстового файла
end;


end.
Kipyatok вне форума
Старый 04.04.2010, 20:13   #3
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Цитата:
Про нахождение рейсов с минимальным временем пути я вообще молчу. Не понимаю даже алгоритма решения задачи.
у тебя же есть структура и массив этих структур! Минимальное время находится в цикле: в переменную заносим число время отправл - время прибытия первого автобуса, далее как поиск минимального элемента в массиве

и зачем тебе мемо, удобнее стрингрид пользовать
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума
Старый 04.04.2010, 20:20   #4
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

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

Код:
function StrToSum(const s: String): int64;  // находит из любой строки цифры и выводит результат как число
var
    i, m: integer;
    sum: string;
begin
    m:= Length(s);
    for i:= 1 to m do begin
        case s[i] of
            '0'..'9': sum:= sum + s[i];
        end;
    end;
    Result:= StrInt(sum);
end;
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума
Старый 05.04.2010, 21:47   #5
Kipyatok
Новичок
Джуниор
 
Регистрация: 03.04.2010
Сообщений: 3
По умолчанию

RUSt88. Пока понимаю с трудом.Мне по условию надо, чтобы программа выбирала минимальное время пути до Пункта Назаначения "XYZ". Как сделать так, чтобы программа выбирала маршруты только до этого пункта и из маршрутов выбирала минимальное время. Как написать алгоритм нахождения. Я его не понимаю

Если необходимо - во вложении проэкт.
Вложения
Тип файла: rar #6.rar (171.2 Кб, 25 просмотров)
Kipyatok вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
лабораторная работа! nikolayz Помощь студентам 2 20.12.2010 19:04
[C++]Лабораторная работа Sudeki Помощь студентам 0 17.11.2009 20:02
Лабораторная работа Дініс Фриланс 4 17.11.2009 13:26
Delphi лабораторная работа Дмитрий666 Помощь студентам 3 06.05.2009 12:18