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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2012, 15:30   #1
Маленыч
Пользователь
 
Аватар для Маленыч
 
Регистрация: 04.04.2012
Сообщений: 23
Лампочка Файлы и дин. переменные. Изменить с использованием дин. переменных.

Здравствуйте!
Написал программу, которая выводит количество цифр в текстовых файлах определенного каталога и их сумму.
Как ее переделать с использованием динамических переменных?
Текст программы:

Код:
Program lab5;
Uses crt,dos;
Const mn=['0'..'9'];
var
  catadress:string;
  amfig,sum:longint;
{---------------------------------------------------------------------------}
{Процедура подсчета цифр и их суммы в текстовом файле}
procedure CalcFile(filename:string; var amfig,sum:longint);
var
  fileval:text;
  symbol:char;
  intervalue:longint;
  code:integer;
Begin
  assign(fileval,filename);
  reset(fileval);
  symbol:=' ';
  amfig:=0;
  sum:=0;
  while not eof(fileval) do
    begin
      while not eoln(fileval) do
        begin read(fileval,symbol);
          if (symbol in mn) then
          begin
            val(symbol,intervalue,code);
            amfig:=amfig+1;
            sum:=sum+intervalue;
          end;
        end;
      readln(fileval);
    end;
  close(fileval);
end;
{---------------------------------------------------------------------------}
{Процедура поиска текстовых файлов в каталоге}
procedure FileSearch(catadress:string; amfig,sum:longint);
var
  list:SearchRec;
  select:char;
  bool:boolean;
begin
  repeat
    write('Введите адрес каталога:');
    readln(catadress);
    FindFirst(catadress+'*.txt',AnyFile,list);
    if DosError<>0 then
      begin
        write('Каталог ',catadress);
        case DosError of
          2:writeln(' не найден, либо был введен неверно.');
          18:writeln(' пуст.');
        end;
        writeln('Если хотите ввести другой адрес, нажмите "y" или нажмите "n" для выхода.');
        repeat
          select:=readkey;
        until (select='y') or (select='Y') or (select='n') or (select='N');
        if (select='y') or (select='Y') then
          bool:=true
        else
          bool:=false;
      end;
  until bool=false;
  write('|-----------------|----------------|----------------------|--------------------|');
  write('|     Имя файла   |   Размер файла | Кол-во цифр в файле  | Сумма цифр в файле |');
  write('|-----------------|----------------|----------------------|--------------------|');
  while DosError=0 do
  begin
    CalcFile(list.name,amfig,sum);
    write('|',list.name:12,'     |  ',list.size:6,' байт   |     ',amfig:7,'          |',sum:12,'        |');
    write('|-----------------|----------------|----------------------|--------------------|');
    FindNext(list);
  end;
  readkey;
end;
{---------------------------------------------------------------------------}
{Сама программа }
begin
  ClrScr;
  write('-------------------------------------------------------------');
  writeln('Программа подсчитывает сумму и количество цифр в текстовых файлах.');
  write('-------------------------------------------------------------');
  FileSearch(catadress,amfig,sum);
end.
Заранее спасибо!
Маленыч вне форума Ответить с цитированием
Старый 06.06.2012, 16:22   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а зачем в этой задаче вообще нужны ДИНАМИЧЕСКИЕ переменные?
чтобы ЧТО в них сохранять?!



p.s. интуитивно чувствую, что ждут от вас того, чтобы Вы все файлы с характеристикой количество цифр и их сумма хранили в виде динамического связного списка...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.06.2012, 16:29   #3
Маленыч
Пользователь
 
Аватар для Маленыч
 
Регистрация: 04.04.2012
Сообщений: 23
По умолчанию

Честно говоря это вопрос не ко мне, дабы мне было дано задание переделать программу другого задания, т.е. эту с помощью динамики. Я в динамических переменных разбираюсь плохо, но походу тут надо понатыкать динамические переменные с помощью new, dispose вместо статических переменных?
P.S. Преподы прикалываются :D
Маленыч вне форума Ответить с цитированием
Старый 06.06.2012, 19:05   #4
Маленыч
Пользователь
 
Аватар для Маленыч
 
Регистрация: 04.04.2012
Сообщений: 23
По умолчанию

Хотя знаете, если переписать эту программу в виде массив типа запись, тогда возможно что-то будет? Не так ли?
Маленыч вне форума Ответить с цитированием
Старый 07.06.2012, 11:17   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Маленыч
Хотя знаете, если переписать эту программу в виде массив типа запись, тогда возможно что-то будет? Не так ли?
да всё возможно.
я же сразу в пост #2 сказал, что ЕДИНСТВЕННЫЙ вариант, когда применение подобного подхода хоть как-то оправдано - это СОХРАНЕНИЕ в динамической структуре результатов работы программы (в вашем случае - информация о найденных файлах и их характеристики).

Т.е должно быть - описание структуры для хранения данных (запись подойдёт отлично).
описание динамической структуры для хранения записей (тут возможно использование или "хакерского" подхода с динамическим массивом
Код:
type
  RArrays=array[0..0] of ВашТипДАнных;
  dyn_array=^RArrays;
...
var
  pArr  : dyn_array;
...
  GetMem( pArr, Количество*SizeOf(ВашТипДАнных) );
  ....
  
  FreeMem( pArr, Количество*SizeOf(ВашТипДАнных) );
либо использовать связные списки:
Код:
type
  ВашТипДАнных = record
     .....
  end;
  plist = ^node;
  node = record
    data: ВашТипДАнных;
    next: plist;
  end;

var Head, 
     Cur: plist;
...
     new(Cur);
     Cur^.xxxxxxxx := заполнение данных;
     Cur^.yyyyyyy := заполнение данных;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
из дин. дека в дин. стек (Borland С++) mego4el Помощь студентам 1 07.07.2011 14:41
Дин. масс и текстовые файлы! Марат05 Общие вопросы Delphi 0 21.12.2010 17:04
Дин.массивы на C++ Уася Помощь студентам 3 15.11.2010 13:22
Дин.стуктуры и файлы. pascal velgelmina Помощь студентам 5 07.06.2007 21:54