Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 8848
∙ повысить рейтинг »
Орловский Дмитрий
Статус: Советник
Рейтинг: 6895
∙ повысить рейтинг »
lamed
Статус: Академик
Рейтинг: 5640
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Pascal (Паскаль)

Номер выпуска:1223
Дата выхода:02.01.2012, 08:00
Администратор рассылки:Boriss (Академик)
Подписчиков / экспертов:159 / 171
Вопросов / ответов:1 / 1

Консультация # 184944: Здравствуйте, уважаемые эксперты! Прошу вас решить в среде Turbo Pascal следующую задачу: дан исходный файл записей, в нём содержится информация о кубиках(длина ребра, цвет(белый, чёрный, розовый и оранжевый) а также материал(железо, пластик, дерево). Требуется выдать в текстовый файл количество кубиков по отдельным цветам, количество пластиковых ...


Консультация # 184944:

Здравствуйте, уважаемые эксперты! Прошу вас решить в среде Turbo Pascal следующую задачу: дан исходный файл записей, в нём содержится информация о кубиках(длина ребра, цвет(белый, чёрный, розовый и оранжевый) а также материал(железо, пластик, дерево). Требуется выдать в текстовый файл количество кубиков по отдельным цветам, количество пластиковых с объёмом больше 18. Также нужно сделать меню с возможностью просмотра файлов, редактирования файла записей(добавлять, редактировать, удалять записи из файла (не используя массив записей)). Предусмотреть проверку на существование файлов.

Дата отправки: 24.12.2011, 15:49
Вопрос задал: Татьяна Турунжева (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Сергей Бендер (Бакалавр):

Здравствуйте, Татьяна Турунжева!

Исходя из того, вы сказали в мини-форуме, предлагаю вам переделать процедуру следующим образом:

Код :
Procedure outputdat(var f1:f_st_rec);
begin
  if not FileExiststwo(n2) then
      writeln('исходного файла не существует')
  else
  repeat
  clrscr;
  reset(f1);
        writeln('1-белый 2-чёрный 3-розовый 4-оранжевый');
        writeln('1-железо 2-пластик 3-дерево');
    i:=0;
    while not eof(f1) do begin
      i:=i+1;
      read(f1,st);
      writeln('кубик №',i,' длина=',st.dl,' цвет=',st.color,' материал',st.mat);
    end;
  close(f1);
    writeln ('1-',i,' - изменение записи ');
    writeln ('0-в меню');
      repeat
        write ('ваш выбор:');
        write ('  ');
        readln(m);
      until (m>=0) and (m<=i);
      if m<>0 then
      with st do begin
        reset(f1);
        seek(f1,m-1);
        writeln('длина:   ');readln(dl);
        writeln('цвет :   '); readln(color);
        writeln('материал :'); readln(mat);
        write(f1, st);
      end;
  until m = 0;
End;


С точки зрения заданного вопроса (работать напрямую с файлом, не используя массив в оперативной памяти,) ключевой момент тут -- это использование команды seek. Благодаря использованию вами типизированного файла, seek позволяет переходить к любой интересующей записи, т.е. осуществлять произвольный доступ, что является главным достоинством массива. (Разумеетсмя с учётом низкой скорости отдельного обращения.)

Замечания по остальному коду:
1) В процедуре outputdat нет обнуления i перед циклом while. Очевидно должно быть.
2) Перменная i -- глобальная. Лучше объявить её в процедуре. Перменной стоит быть глобальной, если она а) предназначена для передачи данных между подпрограммами, или б) имеет большой размер. А индексы циклов настоятельно рекомендую всегда делать локальными.
3) Опечатка в процедуре transname. Под условием if m=1 у вас стоит Rename(f2,n2). Должно быть, конечно, Rename(f1,n1);
4) Там же под m=2 есть close , а под m=1 -- нет. Вероятно, это какие-то недоделанные изменения.
5) Вообще, мне кажется лучше в каждой процедуре специально открывать нужные файлы, а в конце -- закрывать. Оставлять их открытыми, как, например, в create, не стоит -- источник путаницы и ошибок, а преимуществ почти никаких.

Если есть вопросы или требуется ещё какая-либо переделка, пишите в мини-форум.

Консультировал: Сергей Бендер (Бакалавр)
Дата отправки: 28.12.2011, 18:46
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное