3 / 3 / 3
Регистрация: 17.11.2012
Сообщений: 40
1

Создать типизированный файл, который содержит сведения об автомобилях

04.01.2013, 00:27. Показов 1727. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
program n1;
 
type
  rec = record
    marka: string[20];
    firma: string[20];
    cost: integer;
  end;
 
var
  cars: file of rec;
 
procedure addCar;
begin
  with cars do
  begin
    write('марка: ');
    readln(marka);
    write('фирма: ');
    readln(factory);
    write('цена: ');
    readln(cost);
  end;
end;
 
begin
  Assign(cars, 'C://cars');
  {$I-}
  Reset(cars);
  {$I+}
  if IOresult = 0 then
  addCar;
  with cars do
  begin
  write(marka,'%');
  writeln(factory,'%');
  writeln(cost);
  end;
end.
кричит, мол Program.pas(18) : Неизвестное имя 'marka'
хотя объявил в начале.
что не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2013, 00:27
Ответы с готовыми решениями:

Создать типизированный файл, который содержит несколько вещественных чисел, после чего вывести эти вещественные числа из типизированного файла на эк
Создать типизированный файл, который содержит несколько вещественных чисел, после чего вывести эти...

Создать типизированный файл, который содержит несколько вещественных чисел, после чего вывести на экран монитора эти вещественные числа в двоичну сис
Создать типизированный файл, который содержит несколько вещественных чисел, после чего вывести на...

Создать типизированный файл avto, содержащий сведения об автомобилях
Program zadanie1; type avto = record marka:string; nomer:string; fam:string; end;...

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

13
Почетный модератор
7966 / 3937 / 2464
Регистрация: 30.10.2011
Сообщений: 5,377
04.01.2013, 00:32 2
вы используете для записи тип rec, а записывать пытаетесь в cars
Цитата Сообщение от mrflo Посмотреть сообщение
with cars do
то есть рассматриваете файл как запись, а не файл записей...
0
3 / 3 / 3
Регистрация: 17.11.2012
Сообщений: 40
04.01.2013, 00:56  [ТС] 3
так то да.
а теперь ещё раз
Цитата Сообщение от КонецСвета Посмотреть сообщение
что же касается программы, то вы используете для записи тип rec, а записывать пытаетесь в cars
Сообщение от mrflo
with cars do
то есть рассматриваете файл как запись, а не файл записей...
но для школьника

Добавлено через 14 минут
вы предлагаете чесать через cars.marka и cars.factory етс?
0
Почетный модератор
7966 / 3937 / 2464
Регистрация: 30.10.2011
Сообщений: 5,377
04.01.2013, 01:09 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
type
  rec = record
    marka: string[20];
    firma: string[20];
    cost: integer;
  end;
 
var cars: file of rec;
    c: char;
 
procedure Vvod(var car: rec);
begin
  with car do
  begin
    write('марка: ');
    readln(marka);
    write('фирма: ');
    readln(firma);
    write('цена: ');
    readln(cost);
  end;
end;
 
procedure addCar;
var car: rec;
begin
Vvod(car);
  if FileExists('D:\cars.dta') then
    begin
    reset(cars);
    seek(cars,filesize(cars));
    write(cars,car);
    end else
      begin
      rewrite(cars);
      write(cars,car);
      end;
end;
 
procedure VyvodF;
const l='----------------------------------------';
      s='|    Марка    |     Фирма     |  Цена  |';
var car: rec;
begin
reset(cars);
writeln(l);
writeln(s);
writeln(l);
while not eof(cars) do
  begin
  read(cars,car);
  with car do
    writeln('|',marka:10,'|':4,firma:14,'|':2,cost:7,'|':2);
  end;
writeln(l); 
end;
 
begin
  Assign(cars,'D:\cars.dta');
repeat
write('Записать данные в файл? (y/n) '); readln(c);
if c='y' then addCar;
until c='n';
VyvodF;
end.
2
3 / 3 / 3
Регистрация: 17.11.2012
Сообщений: 40
04.01.2013, 01:53  [ТС] 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

upd: глянул в книжке, там это делают через доп. переменную.
замутил
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
program n1;
 
type
  rec = record
    marka: string[20];
    firma: string[20];
    cost: integer;
  end;
 
var
  cars: file of rec;
  temp:rec;
 
procedure addCar;
begin
  with temp do
  begin
    write('марка: ');
    readln(marka);
    write('фирма: ');
    readln(factory);
    write('цена: ');
    readln(cost);
    write(cars,temp);
  end;
end;
 
begin
  Assign(cars, 'C://cars');
  {$I-}
  Reset(cars);
  {$I+}
  if IOresult = 0 then
  addCar;
  with cars do
  begin
  write(marka,'%');
  writeln(factory,'%');
  writeln(cost);
  end;
end.
теперь ругается так
Program.pas(21) : Неизвестное имя 'factory'

Добавлено через 1 минуту
отсюда вопрос: откуда у меня руки?

Добавлено через 9 минут
если я объявил firma а использую factory
это лечится?

Добавлено через 32 минуты
КонецСвета, а что делать, если он просит ; в начале строки?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
begin
  Assign(cars, 'C://cars.txt');
  Reset(cars);
  repeat
  begin
  write('есть что записать?(Y/N)' ); readln(q);
  if q= 'Y' or q='y' then begin
  addCarData;
  addCarToFile;
  end
  else halt(1);
end;
end.
в последнюю строку
Program.pas(54) : Ожидалось ';'
0
3 / 3 / 3
Регистрация: 17.11.2012
Сообщений: 40
04.01.2013, 19:40  [ТС] 6
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
program n1;
type 
rec=record
marka:string[20];
model:string[20];
cost:integer;
end;
var
cars:file of rec;
temp:rec;
q:char;
procedure addcar;
begin
with temp do
begin
write('марка: ');
readln(marka);
write('модель: ');
readln(model);
write('цена: ');
readln(cost);
end;
end;
procedure cartofile;
begin
if fileexists('C://cars.base')
then
begin
reset(cars);
seek (cars); filesize(cars);
write(cars, temp);
end
else
begin
rewrite(cars);
write(cars,temp);
end;
end;
procedure screenoutput;
var car:rec;
begin
reset(cars);
writeln('--------------------------------------------------------------');
writeln('I  Марка            I  Модель            I  Цена             I');
writeln('I-------------------I--------------------I-------------------I');
while not eof(cars) do 
begin
read(cars,car);
with car do
begin
writeln('I',marka[20],'I',model[20],'I',cost[20],'I');
writeln('I-------------------I--------------------I-------------------I');
end;
writeln('--------------------------------------------------------------');
end;
end;
 
begin;
assign(cars, 'C://cars.base');
reset(cars);
repeat;
begin;
write('есть что записать?(Y/N) ');
readln(q);
if q='Y' or q='y' then begin;
addcar;
cartofile;
end;
if q='n' or q='N' then screenoutput;
end;
end.
второй день мучаюсь
0
3451 / 2389 / 2135
Регистрация: 04.12.2011
Сообщений: 3,966
04.01.2013, 20:27 7
1. repeat без until
2. в процедуре seek не хватает параметра seek(cars,15) (например);
3. в 51 строке - cost - без квадратных скобок, (марка и модель вероятно тоже)..
4. вот так верно: if (q='Y') or (q='y') then begin; (у вас не было скобок)
5. точки с запятой после begin
6. форматированный код более читабелен

вот так прога пытается запуститься, далее - сами..
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
program n1;
 
type
  rec = record
    marka: string[20];
    model: string[20];
    cost: integer;
  end;
 
var
  cars: file of rec;
  temp: rec;
  q: char;
 
procedure addcar;
begin
  with temp do
  begin
    write('марка: ');
    readln(marka);
    write('модель: ');
    readln(model);
    write('цена: ');
    readln(cost);
  end;
end;
 
procedure cartofile;
begin
  if fileexists('C://cars.base')
  then
  begin
    reset(cars);
    seek(cars,5); filesize(cars);
    write(cars, temp);
  end
  else
  begin
    rewrite(cars);
    write(cars, temp);
  end;
end;
 
procedure screenoutput;
var
  car: rec;
begin
  reset(cars);
  writeln('--------------------------------------------------------------');
  writeln('I  Марка            I  Модель            I  Цена             I');
  writeln('I-------------------I--------------------I-------------------I');
  while not eof(cars) do 
  begin
    read(cars, car);
    with car do
    begin
      writeln('I', marka[20], 'I', model[20], 'I', cost, 'I');
      writeln('I-------------------I--------------------I-------------------I');
    end;
    writeln('--------------------------------------------------------------');
  end;
end;
 
begin
  assign(cars, 'C://cars.base');
  reset(cars);
  repeat
    begin
      write('есть что записать?(Y/N) ');
      readln(q);
      if (q = 'Y') or (q = 'y') then 
      begin;
        addcar;
        cartofile;
      end;
      if (q = 'n') or (q = 'N') then screenoutput;
    end;
  until q = 'n';
end.
1
Почетный модератор
7966 / 3937 / 2464
Регистрация: 30.10.2011
Сообщений: 5,377
05.01.2013, 00:10 8
mrflo, у меня смутное чувство, что вы используете не PascalABC.NET, а Турбо паскаль. Я не ошибаюсь?
тогда все надо немного по другому оформлять..
пишите, если актуально =)
0
3 / 3 / 3
Регистрация: 17.11.2012
Сообщений: 40
05.01.2013, 15:52  [ТС] 9
именно pascalABC.NET
0
3 / 3 / 3
Регистрация: 17.11.2012
Сообщений: 40
05.01.2013, 16:07  [ТС] 10
ermolay,
2. там нужно конец файла найти. seek (cars, filesize(cars)); так вроде
3. как тогда cost ограничить на 20 символов?(в моей индусской интерпретации это ещё на 10 строк кода)

Добавлено через 6 минут
и табличка некорректно выводится

Добавлено через 10 секунд
и табличка некорректно выводится
0
3451 / 2389 / 2135
Регистрация: 04.12.2011
Сообщений: 3,966
05.01.2013, 16:16 11
Цитата Сообщение от mrflo Посмотреть сообщение
cost ограничить на 20 символов?
ограничивается длина строки при описания типа записи для экономии используемой памяти. В Вашем случае - длина строки при описании марки и модели. То есть когда вы будете забивать данные, программа будет игнорировать символы после 20-го в названии.. ээ.. например тех же жигулей) А в 51 строке программа считывает данные из файла, там скобки просто не нужны.
0
3 / 3 / 3
Регистрация: 17.11.2012
Сообщений: 40
05.01.2013, 16:40  [ТС] 12
надо чтобы в 51 строке ровная таблица получилась
0
3451 / 2389 / 2135
Регистрация: 04.12.2011
Сообщений: 3,966
05.01.2013, 17:06 13
Цитата Сообщение от mrflo Посмотреть сообщение
ровная таблица
аа.. тогда так:
Pascal
1
model:20
для данного случая ровнее будет так
Pascal
1
writeln(marka,' ':20-length(marka),model,' ':20-length(model),cost);
1
3 / 3 / 3
Регистрация: 17.11.2012
Сообщений: 40
05.01.2013, 18:29  [ТС] 14
мм
спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2013, 18:29
Помогаю со студенческими работами здесь

Дан типизированный файл, который содержит сведения о кубиках
Очень большая просьба помогите! Дан типизированный файл, который содержит сведения о кубиках :...

Создать типизированный файл, который содержит несколько вещественных чисел
Создать типизированный файл, который содержит несколько вещественных чисел, после чего вывести эти...

Создать типизированный файл, который содержит данные о билетах на авиарейсы
Создать типизированный файл, который содержит данные о билетах на авиарейсы. Поля записи – страна,...

Создать типизированный файл, который содержит несколько целых чисел
кто шарит файлы Создать типизированный файл, который содержит несколько целых чисел, после чего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru