Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите пожалуйста с файлами 
:(
    Опции темы
volnorez
Дата 17.3.2008, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 22.9.2007

Репутация: нет
Всего: нет



Всем здрасте. У меня проблема с файлами. Кто может подскажите пожалуйста. 
В чем собственно суть:   
Я написал прогу которая должна вводить данные типа запись выдавать их таблицей и сохранять значение в файл.
Все пункты работают правильно но когда приходит время читать из файла то оно мне выводит таблицу только с 0.
вот текст проги помогите кто чем сможетsmile

Код

Program L9_91826;
Uses Crt;
Type xt=RECORD
           nazv:string[14];
            kol:integer;
           cena:real;
        End;
   atype=array[1..100] of xt;
Var
       x : string;
       a : array[1..100] of xt;
       b : atype;
con,item : char;
   i,j,n : byte;
    boof : xt;
       t : boolean;
       f : file of xt;
Procedure OUT (b:atype; n:byte);
Begin
clrscr;
   WriteLn('            ПРАЙС ЛИСТ             ');
   WriteLn('┌───┬──────────────┬──────┬───────┐');
   WriteLn('│ N │   Название   │Кол-во│  Цена │');
   WriteLn('├───┼──────────────┼──────┼───────┤');
   For i:=1 to n do
      With b[i] do
         Begin
            WriteLn('│',i:3,'│',nazv:14,'│',kol:6,'│',cena:7:2,'│');
            If i<>n
            Then  WriteLn('├───┼──────────────┼──────┼───────┤')
            Else  WriteLn('└───┴──────────────┴──────┴───────┘');
         End;
   textcolor(2);
   window(2,8,79,21);
   gotoxy(2,14);
   Write ('Нажмите Enter для возврата в главное меню');
   Readln;
End;
Procedure zap;
  Begin
    Writeln('Vvesti: Kuda i imya faila'); readln(x);
    assign(f,x);
    rewrite(f);
    for i:=1 to n do
     write(f,a[i]);
     close(f);
  End;
BEGIN
   t:=true;
   Repeat
      textbackground(15);
      clrscr;
      window(2,2,79,3);
      textbackground(0);
      clrscr;
      textcolor(2);
      Write ('          Ввод и сортировка массива-вектора с элементом');
      WriteLn (' типа запись.');
      window(2,5,79,6);
      clrscr;
      textcolor(2);
      gotoxy(37,1);
      WriteLn ('M E N U');
      gotoxy(5,2);
      Write ('1-ввод');
      gotoxy(18,2);
      write ('2-Vvod iz faila');
      gotoxy(35,2);
      write ('3-zapis');
      gotoxy(45,2);
      Write ('4-сортировка');
      gotoxy(65,2);
      Write ('5-выход');
      window(2,8,79,21);
      clrscr;
      window(2,23,79,24);
      clrscr;
      textcolor(2);
      WriteLn ('Выберите необходимый пункт меню');
      gotoxy(2,wherey);
      item:=ReadKey;
      clrscr;
         case item of
         '1':
         Begin
            t:=false;
            window(2,23,79,24);
            clrscr;
            textcolor(7);
            window(2,8,79,21);
            clrscr;
          {--------------Создание таблицы данных---------------------------}
            n:=0;
            Repeat
               n:=n+1;
               With b[n] do
                  Begin
                     Write (' Наименование товара  - '); ReadLn (nazv);
                     Write (' Количество товара    - '); ReadLn (kol);
                     Write (' Цена товара          - '); ReadLn (cena);
                  End;
               WriteLn (' Продолжать ввод ? (y/n)');
               con:=ReadKey;
            Until (con='n') or (con='N') or (con='Т') or (con='т');
          OUT(b,n);
         End;
         '2':
         Begin
           Writeln ('Chitat: jtkuda i imya faila'); readln(x);
           assign(f,x);
            reset(f);
            i:=1;
            while not EOF(f) do
             begin
               read(F,a[i]);
               i:=i+1;
             end;
             n:=i-1;
             OUT (b,n);
         end;
         '3':
         begin
         zap;
         end;
         '4':
         Begin
            if t then
            Begin
               window(2,8,79,21);
               gotoxy(2,1);
               writeln ('Сначала введите данные');
               gotoxy(2,14);
               write ('Нажмите Enter для возврата в главное меню');
               readln;
            End
            Else
            Begin
               textcolor(7);
               window(2,8,79,21);
               clrscr;
            {-------------Сортировка "пузырек"-----------------------------}
               For i:=2 to n do
                  Begin
                     For j:=n downto i do
                     If b[j-1].nazv>b[j].nazv Then
                        Begin
                           boof:=b[j-1];
                           b[j-1]:=b[j];
                           b[j]:=boof;
                        End;
                  End;
               OUT (b,n);
            End;
         End;
         '5': exit; End;
   Until (item='5');
END.



Это сообщение отредактировал(а) volvo877 - 20.3.2008, 18:20
PM MAIL   Вверх
volvo877
Дата 20.3.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(volnorez @  17.3.2008,  20:58 Найти цитируемый пост)
когда приходит время читать из файла то оно мне выводит таблицу только с 0.
Потому что когда приходит время писать в файл, ты почему-то пишешь не из массива B, который заполнял, а из пустого массива A. Убери вообще описание второго массива, у тебя что, память безграничная, ты так легко забираешь больше двух Кб под массив?

Почему данные передаются по значению? Стек лишний? Передавай по ссылке, добавь Const:
Код

Procedure OUT (const b:atype; n:byte);

В конце концов, если ты работаешь с глобальными данными, почему массивы вообще передаются в процедуры?
PM MAIL   Вверх
volnorez
Дата 23.3.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 22.9.2007

Репутация: нет
Всего: нет



А как по твоему я должен их ввести?
PM MAIL   Вверх
volvo877
Дата 25.3.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(volnorez @  23.3.2008,  12:14 Найти цитируемый пост)
А как по твоему я должен их ввести? 

А что, вводить в ГЛОБАЛЬНО описанный массив нельзя? И потом работать именно с глобальными данными, не загаживая стек дубликатами - тоже нельзя? Ух ты, "а мужики-то не знают" (С)...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0835 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.