Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] Задача на записи 
:(
    Опции темы
Ripper
Дата 5.11.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

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



Значит задали задачу на работу с записями, я её немного захотел расширить и вообщем суть:
Программа создает файл (если он не создан), туда она должна уметь заносить записи, запись - описание линии, т.е. уравнение лиинии Ax+By+C=0, а в файл заносятся A,B,C,K (K=-A/B). Потом можно будет удалять какую либо линию (к этому я не приступил), искать все линии которые параллельны либо 1 либо последний и т.п. У меня проблема на 1 пункте. Я не могу добавить данные в файл
т.к. Append не используется для таких файлов, я заношу все во временный массив, потом стираю файл и заношу заного. Вообщем см. код
Проблема в строчке temp[len]:=tf. в массив temp вносятся все нули smile Чтожже такое, все перепробывал ничего не помогает smile Кидаю целый код на всякий случай, там все так запутанно. Может ещё где ошибки есть 
Код

program laba5;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

type
 sl = record
  a,b,c:integer;
  k:real;
 end;
 arr=array of sl;

Color = (Red,Green,Blue);

const
 FOL='data.dat';

procedure ShowMenu();
begin
 WriteLn(' [1] Add Straight line to file');
 WriteLn(' [2] Find Parallel lines');
 WriteLn(' [3] Show all lines');
 WriteLn(' [4] Delete line from file');
 WriteLn(' [5] Exit');
end;

procedure SetColor(C:Color);
var
 h:THandle;
begin
h := GetStdHandle(STD_OUTPUT_HANDLE);
 case C of
  Red:   SetConsoleTextAttribute(h,FOREGROUND_RED or FOREGROUND_INTENSITY);
  Blue:  SetConsoleTextAttribute(h,FOREGROUND_BLUE or FOREGROUND_INTENSITY);
  Green: SetConsoleTextAttribute(h,FOREGROUND_GREEN or FOREGROUND_INTENSITY);
 end;
end;

procedure ShowLine(line:sl);
begin
 WriteLn('  A = ', line.a);
 WriteLn('  B = ', line.b);
 WriteLn('  C = ', line.c);
 WriteLn('  K = ', FloatToStr(line.k));
end;

var
 action:byte;
 f:file of sl;
 len,i,n,ka,kb,kc:integer;
 temp:arr;
 tl,tf:sl;

begin
 action:=0;
 i:=0;
 SetLength(temp,0);
 AssignFile(f,FOL);
  if (not(FileExists(FOL))) then
   begin
    Rewrite(f);
    Close(f);
   end;

 SetColor(Green);
 ShowMenu;
 while (action<>5) do
  begin
   SetColor(Green);
   readln(action);
    case action of
     1:
      begin
       reset(f);
       len:=0;
        while(not (EOF(f))) do
         begin
          Inc(len);
          SetLength(temp,len);
          read(f,tf);
          ShowLine(tf);
           temp[len]:=tf; //НЕРАБОТАЕТ КАК НАДО
         end;
       close(f);
       WriteLn('Enter a:');
        ReadLn(ka);
       WriteLn('Enter b:');
        ReadLn(kb);
       WriteLn('Enter c:');
        ReadLn(kc);
        tl.a:=ka;
        tl.b:=kb;
        tl.c:=kc;
        tl.k:=-ka/kb;

       rewrite(f);
       for i:=1 to len do
        begin
         write(f,temp[i]);
        end;

       write(f,tl);
       close(f);
      end;
     3:
      begin
       reset(f);
       n:=0;
        while(not(EOF(f))) do
         begin
          Inc(n);
          WriteLn(' ', chr(16), ' Line ',n,':');
          read(f,tl);
          ShowLine(tl);
         end;
        close(f);
      end;
      5:Exit;
     else
      begin
       SetColor(Red);
       Writeln(' Error. Try again!');
      end;
    end;
  end;
end.



--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Mal Hack
Дата 5.11.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(Ripper @  5.11.2006,  13:26 Найти цитируемый пост)
т.к. Append не используется для таких файлов, я заношу все во временный массив, потом стираю файл и заношу заного. 

Зачем? Добавить в конец файла запись можно сделав seek в конец файла и простой write();.

PM ICQ   Вверх
Ripper
Дата 5.11.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

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



Цитата

Зачем?

Незнаю... собственно пока вопросы отпали smile Ты гений))) 
я верно делаю?
seek(f,filesize(f)) ? Вроде работает %) (Хотя все же интересно. почему прошлый код не работал хоть и корявым способом)



--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Ripper
Дата 5.11.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

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



Блин, все равно 
Допустим мне нужно считать все элементы записей из файла в массив
почему не работает
temp[i]:=tf допустим. переменные одного типа вроде, в массиве все знчения 0 0 0 


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Mal Hack
Дата 5.11.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



filesize() - все кол-во записей, т.е. к примеру, 25.
А нумерация идет с нуля !!!
PM ICQ   Вверх
Ripper
Дата 5.11.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

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



У меня есть файл записей. Как мне занести все записи в массив?
Код

        for i:=1 to fs do
          begin
           read(f,tf);
           setlength(temp,i);
           temp[i]:=tf;
          end;

Менял и i:=0 fs-1 и по другому
в tf значения есть, в temp[i] - нули
а дописывание в файл нормально происходит, или считывание но если только отображать значение записи (ф-ия showline())
причем делал в цикле от 0 до fs-1 и от 1 до fs. - вывод выводятся а в массив не заносятся



--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Mal Hack
Дата 5.11.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Вот последний код - рабочий, с 0 до fs-1
А у тебя старый не работал, т.к. ты перед чтением увеличивал len, а надо после
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

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


 




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


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

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