Помощь - Поиск - Пользователи - Календарь
Полная версия: Очень простая задача с файлом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
setare
Помогите пожалуйста!!! Задача очень простая, но я в ней запуталась. Есть файлб в нем в каждой строчке написана дата (дд/мм/гг). Строчек не больше 20. Нужно вывести даты на экран и сортировать их в порядке возрастания.
Ниже будет примерный код задачи, который я написала, но который не сортирует. Скажите, пожалуйста что где нужно добавить! Спасибо!

Код
program exam_my;
type
 str20=string[20];
  mas=array[1..20]of str20;
   var
    f:text;
    i:byte;
    flname:string[10];
    x:mas;
    y:string[20];
  procedure vivod(var f:text;x:mas);
  var
  i:integer;
   begin
    for i:=1 to 20 do
     writeln(x[i]);
   end;
    function minimum(const x:mas):integer;
     var
     i,min:integer;
      begin
       for i:=1 to 20 do
        for min:=1 to 20 do

        if x[i]<x[min] then
         minimum:=i

        else minimum:=min;
      end;
    procedure change(const x:mas);
     var
      i,min,z:integer;
       begin
        for i:=1 to 20 do
         for min:=1 to 20 do
          if x[i]<x[min] then
          begin
            z:=x[i];
            x[i]:=x[min];
            x[min]:=z;
          end;
       end;
    procedure sort(var x:mas);
     var
     i:integer;
      begin
       for i:=1 to 20 do
        minimum(x);
        change(x);
      end;
   begin
   writeln('ўўҐ¤ЁвҐ Ё¬п д ©« ');
   readln(flname);
   assign(f,flname);
    {$I-}
     reset(f);
    {$I+}
      if Ioresult=0 then
       begin
        for i:=1 to 20 do
       readln(f,y);
         sort(x);
         vivod(f,x);
       end
      else
       writeln('¤ ­­л© д ©« ­Ґ бгйҐбвўгҐв');
       readln;
   end.
volvo
setare
Попробуй вот так:
Код
program exam_my;
type
 str20=string[20];
 mas=array[1..20]of str20;
var
 f:text;
 i:byte;
 flname:string[10];
 x:mas;

procedure vivod(x: mas);
 var
   i:integer;
 begin
   for i:=1 to 20 do
     writeln(x[i]);
 end;

procedure sort(var x: mas);

 function checkdata(s: string): string;
   begin
     checkdata := copy(s, 7, 4) + copy(s, 4, 2) + copy(s, 1, 2)
   end;

 var
   i, j: integer;
   T: str20;

 begin
   For i := 1 To 20 Do
     For j := 20 DownTo i+1 Do
       If checkdata(x[j-1]) > checkdata(x[j]) Then
         Begin
           T := x[j-1]; x[j-1] := x[j]; x[j] := T
         End
 end;


begin
 writeln('ўўҐ¤ЁвҐ Ё¬п д ©« ');
 readln(flname);
 assign(f,flname);
{$I-}
 reset(f);
{$I+}
 if Ioresult=0 then
   begin
     i := 1;
     while not eof(f) do
       begin
         readln(f,x[i]);
         i := i + 1;
       end;
     sort(x);
     vivod(x);
     close(f)
   end
 else
   writeln('¤ ­­л© д ©« ­Ґ бгйҐбвўгҐв');
   readln;
end.

По-моему, должно работать...
(Присоединенный файл - с исходными данными - для теста)
setare
Спасибо большое, сейчас попробую!
setare
Большое вам спасибо!!!!!! Я разобралась!!!!!!!!!!!!!Спасибооо!
setare
Извините! Но можно вам задать ещё один вопрос. А почему ма складываем копируемые символы? Я никак не могу понять. И извините, если вам кажутся мои вопросы глуппыми, просто мне не у кого спрашивать и в учебниках это особо не объясняется, а также я паскалем занимаюсь только 3 месяца, до этого не слышала даже про этот язык прграммирования, поэтому приходится беспокоить вас. Заранее благодарю.
APAL
При складывании символов получается строка.

[OffTop]
setare, Ты он ли она?
Судя по сообщениям - "она"...
А судя по инфе в профиле - "он"...
[/OffTop]
setare
Я она! :P
setare
Ещё раз, извините!!! А как отсортировать массив в обратном порядке. Я пользовалась поиском и faq , но к сожалению не нашла. Там везде сортировка в прямом порядке, а как в обратном.
volvo
setare
В условии:
Код
If checkdata(x[j-1]) > checkdata(x[j]) Then

меняем знак с ">" на "<"
И все... ;)
Altair
offtop
setare, я отредактировал ваш профиль - указал что вы "она" smile.gif
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.