Помощь - Поиск - Пользователи - Календарь
Полная версия: задача на массив записей
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Galka
Помогите не могу решить задачу. Вот условие:
Дан массив звписей, содержащих сведения о заказах в ателье пошива одежды. Разработать структуру записи и посчитать среднюю стоимость заказа.
Я тут чего зря понаписала:
Код
program mas;
type
  fabrica = record
  par1,par2,par3: 1..3;
  value,sebest,price:integer;
  sst:real;
  end;
var a:array[1..3] of fabrica;
i:integer;
begin
for i:=1 to 3 do
with a[i] do
begin
writeln ('vvedite dannye');
readln(par1,par2,par3);
sst:=(par1+par2+par3)/3;
writeln(sst);
end;
end.
Ozzя
Цитата
par1,par2,par3: 1..3;

Это что такое? почему в пределах от 1 до 3?
sst:real;

Почему средняя стоимость заказа торчит в записи?
Galka
Код
par1,par2,par3: 1..3;

это какие то параметры по которым и вычисляется средняя стоимость, но они почему то не в массиве, вобщем я какие то куски собрала из похожих программ вот и получилось не понятно что wacko.gif
а среднюю стоимость уберу из записи smile.gif
мне бы пример составления массива с этими записями...
Krjuger
Да и почему sst выводится на экран в цикле??И вообще напиши что в твоем понимании означает каждая переменная,так легче понять будет.Тебе тогда дельный совет дадут вместо кучи вопросов.

Так давай рассуждать...У тебя есть список заказов,чем у тебя обзадает каждый заказ??У заказа, как я понимаю, есть номер(сведения) и его цена.Или у тебя есть заказ,состоящий из каких либо вещей и их цена.если второй вариант,то ты создаеш какую нибудь переменную в которую записываеш всю стоимость заказа и какой нибудь счетчик,и в итоге средней стоимостью будет сумма стоимосттец вещей, деленная на счетчик.

Более того,ты говориш что у тебя данн массив,а ты вводиш его с клавиатуры.Если массив дан, то чаще всего его надо считывать из файла,так что тоже уточни.
Ozzя
Цитата
о заказах в ателье пошива одежды. Разработать структуру записи

Сумасйоти! blink.gif И девочка спрашивает у нас какие там, в ателье заказы mega_chok.gif
Вы хоть на пальцах объясните, что там заказывают и какова структа заказа?
Krjuger
Цитата

Цитата
о заказах в ателье пошива одежды. Разработать структуру записи
Сумасйоти! И девочка спрашивает у нас какие там, в ателье заказы
Вы хоть на пальцах объясните, что там заказывают и какова структа заказа?

+1 однако))

Галка тебе нужен пример массива.В общем массив обладает номером названием товара и ценой



type
fabrica = record
number,price:integer;
name:string;
end;
var
a : array of fabrica;
S,n,midl:integer;
begin
n:=1;
while not eof(fin) do
begin
read(fin,a[n].nuber);
read(fin,a[n].name);
read(fin,a[n].price);
S:=S+a[n].prise;
n:=n+1;
end;
midl:=S/n;
writeln(midl);
end.


В общем как то так....За правильность не отвечаю,давно это было.Если что сторожилы поправят.
Galka
Krjuger, спасибо, только вот тут
while not eof(fin) do

на fin - unknown identifier
Ozzя
Не, думается так
Сама запись:
Order = record
NomerZakaz: Integer;
price : real; // цена
naim : string; // наименование товара
// еще необходимые поля/
end;
var
zakaz:array [1..n] of order;
...
читаем в цикле пока не конец файла
в массив
...
summa:=0;
for i:=1 to n do
begin
....
summa:=summa+ zakaz[i].price;
end;
summa:=summa/n;



Добавлено через 1 мин.
Цитата
на fin - unknown identifier

fin : file of fabrica; ?
Krjuger
Тогда это уже никакой не массив записей а обычный одномерный массив.
Цитата

var a:array[1..3] of fabrica;
По сути эта строчка абсурдна.Твоя фабрика показывает что там под каждым i 3 переменные(заказ1,2,3) и таких у тебя ты обьявляеш от 1 до 3.Грубо говоря у тебя 3 заказа,которые ты береш от 1 до 3 раз,более того зачем тебе вводить массив от 1 до 3 если ты 3 раза считываеш введи тогда уж просто var a:array[3] of fabrica;
Цитата

readln(zakaz1,zakaz2,zakaz3);
Тоже бред у тебя их нету, как переменных, они лиш индексы твоего массива и на прямую,если мне не изменяет память, ты к ним обращаться не можеш.посмотри как я считывал из файла и просто удали оттуда fin и будет с клавиатуры.

P.s. Дадада я забыл в var описать fin:text; убейте меня за это,плюс как выяснилось эй это и не надо.

P.P.s.Ozzя ты лучше мою задачку посмотри(стек и дек),а эту я ей, если что сделаю.Кстати озя твой вариант не сильно отличается от моего,но у него есть один существенный минус.У тебя 2 цикла от 1 до n,а у меня один так что твоя медленней,пусть,если учиться прогать,то сразу грамотно,а то от привычек тяжело отучиваться,по себе знаю.
Galka
Всем спасибо большое wub.gif
сделала вот так:
program mas;
type fabrica=record
kol1,kol2,kol3:integer;
cena1,cena2,cena3: integer;
end;
var a: array [1..1] of fabrica;
y: integer; i:integer;
begin
y:= 0;
for i:=1 to 1 do begin
writeln('vvedite kolichestvo zakazov na platie '); readln(a[i].kol1);
writeln('vvedite kolichestvo zakazov na bruki'); readln(a[i].kol2);
writeln('vvedite kolichestvo zakazov na ubki'); readln(a[i].kol3);
writeln('vvedite cenu na platie'); readln(a[i].cena1);
writeln('vvedite cenu na bruki'); readln(a[i].cena2);
writeln('vvedite cenu na ubku'); readln(a[i].cena3);

end;
for i:=1 to 1 do begin
with a[i] do
y:=(y + (cena1*kol1) + (cena2*kol2) + (cena3*kol3))/3;
end;
writeln('srednya stoimost ', y , ' rub.');
readln;
end.


вроде работает yes2.gif
Krjuger
Блин у тебя мания цыкла fоr какая то.Зачет тебе цикл от 1 до 1,это значит что он будет выполятся всего 1 раз при значении i равном 1,цикл нужен будет если таких заказов будет 10, например.Затем ,когда пишеш массив,если он у тебя строго 1 значение хранит,то зачем писать[1..1] это просто безграмотно,[1] и все,не надо мудрить.

program mas;
type
fabrica=record
kol : integer;
cena : integer;
end;
var
a: array [1..3] of fabrica;
y, i:integer;
begin
y:= 0;
for i:=1 to 3 do
begin
writeln('vvedite kolichestvo zakazov '); readln(a[i].kol);
writeln('vvedite cenu'); readln(a[i].cena);
y:=y + cena*kol;
end;
y:=y/3;
writeln('srednya stoimost ', y , ' rub.');
readln;
end.



Вот так будет выглядеть получше,правда я не уверен что тебе это надо уже)
Galka
Krjuger спасибо большое!!!!!!!! так намного лучше и понятнее
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.