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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2013, 18:55   #1
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
Стрелка Работа с файлами(Record)[Delphi]

дан файл f содержащий сведенья о кубиках размер(длина ребра), цвет(желтый, синий, зеленый, красный)и материал(деревянный металлич картонный).найдите колличество кубиков каждого из перечисленный цветов и их суммарный объем"колличество дерев. кубиков с ребром больше 3, и кол-во металлич. с ребром больше 5.
Код:
program dfhbfyn3;
{$APPTYPE CONSOLE}
uses SysUtils;

type dannie = record
dl:byte;
col:string;
mat:string;
end;
var f:text; n,k,i:Integer;
k1,k2,k3,k4:Integer;
mas:array[1..20] of dannie;
procedure getzapis(t:dannie);
var s:string; c:char;
begin
s:='';
read(f,c);
while c<>' ' do begin
s:=s+c; read(f,c);
end;
t.col:=s; s:='';
while c=' ' do read(f,c);
while c<>' ' do begin
s:=s+c; read(f,c);
end;
t.mat:=s;
Readln(f,t.dl);

end;

begin
//k:=0;
n:=0;
k1:=0;
assign(f,'g.txt');
reset(f);
while NOT EOF(f) do begin
inc(n);
getzapis(mas[n]);
end;
Close(f);
for n:=1 to 20 do with mas[n] do
if col='krasniy' then inc(k1);
Writeln('Krasnih=', k1);
Readln;
end.

программа у меня не очень работает, даже не запускается. как доработать чтобы работала?

Последний раз редактировалось Stilet; 12.01.2013 в 19:01.
MariaD вне форума Ответить с цитированием
Старый 12.01.2013, 19:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

И что говорит компилятор?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2013, 19:39   #3
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
По умолчанию

project dfhbfyn3.exe raised exception class ElnOutError with message 'Invalid numeric input'/Process stopped.Used Step or Run to continue
MariaD вне форума Ответить с цитированием
Старый 12.01.2013, 20:20   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

f:text; для хранения записей не подходит.
Ты файл сама формируешь, или он по заданию уже существует? Если файл обязательно должен быть текстовый то показывай его.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2013, 20:28   #5
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
По умолчанию

файл сама делала.тип и название- g.txt
Содержание
krasniy derevynniy 3
siniy metallicheckiy 5
krasniy kartonniy 4
zeleniy kartonniy 1
siniy metallicheckiy 5
jeltiy derevynniy 2
jeltiy karto
zeleniy derevynniy 8
MariaD вне форума Ответить с цитированием
Старый 12.01.2013, 20:36   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, это очевидно.
Вы файл исходный подготовили совсем не так, как Вы его читаете.
файл должен быть в формате:
цвет материал длина_ребра

например:
Цитата:
Код:
jeltyi kartonnyi 3
sinii kartonnyi 20
krasnyi kartonnyi 22
krasnyi derevyannyi 4
sinii derevyannyi 10
krasnyi metallich 15
krasnyi kartonnyi 3
zelenyi metallich 7
jeltyi metallich 10
zelenyi derevyannyi 17
Это раз.

Цитата:
jeltiy derevynniy 2
jeltiy karto
zeleniy derevynniy 8
Во-вторых, вы теряете количество подсчитанных записей n
сравните с моим кодом:
Код:
  for i := 1 to n do
    with mas[i] do
       if col = 'krasnyi' then inc(k1);

в-третьих, Вы точно уверены, что исходный файл у Вас текстовый?

ну и последнее, я не увидел, чтобы у Вас в задании было подсчитать количество красных кубиков!
Вы то, что у Вас задано сделать в задании - вообще не делаете..
Надеюсь, это только потому, что Вы только приступили к решению данной задачи.
Тогда желаю успехов, верю, у Вас всё получится!

Последний раз редактировалось Serge_Bliznykov; 12.01.2013 в 20:38.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.01.2013, 20:42   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так как увидел ещё одну грубую ошибку (пропущено слово var при задании читаемого параметра) и позволил себе подправить ещё ограничение на количество читаемых записей, получилось такое:
Код:
program dfhbfyn3;
{$APPTYPE CONSOLE}
uses SysUtils;

const MaxCountRec = 20;

type dannie = record
    dl: byte;
    col: string;
    mat: string;
  end;
var f: text; n, k, i: Integer;
  k1, k2, k3, k4: Integer;
  mas: array[1..MaxCountRec] of dannie;

procedure getzapis(var t: dannie);
var s: string; c: char;
begin
  s := '';
  read(f, c);
  while c <> ' ' do begin
    s := s + c; read(f, c);
  end;
  t.col := s; s := '';
  while c = ' ' do read(f, c);
  while c <> ' ' do begin
    s := s + c; read(f, c);
  end;
  t.mat := s;
  Readln(f, t.dl);

end;

begin
  n := 0;
  assign(f, 'g.txt');
  reset(f);
  while (not EOF(f)) and (n<=MaxCountRec) do begin
    inc(n);
    getzapis(mas[n]);
  end;
  Close(f);
  k1 := 0;
  for i := 1 to n do
    with mas[i] do
       if col = 'krasnyi' then inc(k1);
  Writeln('Krasnih=', k1);
  Readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.01.2013, 20:45   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
файл сама делала.тип и название- g.txt
Тогда читать его нужно не так.
Если это Делфи то используй для чтения TStringList - примеры на форуме есть. Ищи по слову LoadFromFile.
Иначе используй типизированный файл
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2013, 20:56   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet
Тогда читать его нужно не так.
не обязательно. можно и так читать.
Просто в предпоследней строке (я выделил красным в цитате) нет данных о длине ребра (нет числа), что и приводит к ошибке чтения!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.01.2013, 21:00   #10
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
По умолчанию

спасибо, в условии еще слово исправила и подсчитывает теперь.
MariaD вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами (Delphi) Olga Sharik Помощь студентам 5 01.05.2012 22:40
Работа с файлами (Delphi). bair42 Помощь студентам 1 30.11.2011 02:07
Delphi. Работа со строками в Record marat-link Помощь студентам 2 07.12.2010 18:33
Работа с файлами Delphi 7 Alkifr Помощь студентам 1 14.05.2010 19:25
Delphi 7. Работа с файлами Flame_of_Death Помощь студентам 8 10.07.2009 12:25