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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2010, 18:09   #1
ddeman666
Пользователь
 
Регистрация: 24.12.2009
Сообщений: 55
По умолчанию на ПАСКАЛЕ

Написать программу, которая выводит на экран имена, расширения и размеры всех файлов текущего каталога, расположив их в порядке убывания размера файлов.
ddeman666 вне форума Ответить с цитированием
Старый 19.04.2010, 18:14   #2
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

такую наверно за спасибо в паскале решать никто не будет.
Жми на весы!!!
Chudo4258 вне форума Ответить с цитированием
Старый 19.04.2010, 19:57   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А чём там решать то?!

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

Код:
uses Dos;
const MaxFiles = 1500;
var
  sr: SearchRec;
  ArrFiles : array[1..MaxFiles] of SearchRec;
  CountF, i, j, IndexMax : integer;
begin

  {читаем все файлы текущего каталога в массив}
  CountF := 0;
  FindFirst('*.*', AnyFile, sr);
  while DosError = 0 do
  begin
    if (sr.Attr and Directory) = 0 then
       if CountF = MaxFiles then begin
           writeln('Файлов слишком много...');
           Halt(100);
       end
       else begin
          inc(CountF);
          ArrFiles[CountF] := sr;
       end;
    FindNext(sr);
  end;

  {сортируем массив}

  {сортировка методом "пузырька" (методом простого выбора )

  Выбирается максимальный элемент массива
  и меняется местами с первым элементом массива.
  Затем процесс повторяется с оставшимися элементами и т. д. }

  for i:=1 to CountF-1 do begin
    IndexMax := i; {предварительно считаем, что первый элемент наибольший}
    {ищем индекс максимального элемента}
    for j:=i+1 to CountF do
      if ArrFiles[j].Size>ArrFiles[IndexMax].Size then IndexMax := j;

    {меняем местами элементы массива с индексами i и IndexMax
    (ну, если они не равны, конечно) }
    if i<>IndexMax then begin
      sr := ArrFiles[IndexMax];
      ArrFiles[IndexMax] := ArrFiles[i];
      ArrFiles[i] := sr;
    end;
  end;

  {а теперь выводим массив на экран}
  for i:=1 to CountF do
    WriteLn(ArrFiles[i].Size:12,' ',ArrFiles[i].Name);

  Readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pi на Паскале. Anarion Помощь студентам 5 25.03.2009 16:04
L=2*pi*R и S=pi*R на паскале. MjRed Помощь студентам 1 02.02.2009 09:52
привет всем! помогите пожалуйста решить две задачи на паскале. я в паскале полный ноль. Пищенок Саша Паскаль, Turbo Pascal, PascalABC.NET 5 20.01.2009 13:46
БД На Паскале igorjouk Помощь студентам 12 21.11.2008 13:22
На Паскале Bagsi Помощь студентам 13 21.11.2007 21:40