Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Массив записей

Автор: Ученик 14.01.2009 1:47

Условие
пусть даны 2 массива М1 и М2. М1 - инвентарный массив(сколько изделий, каких видов хранятся на складе). Вид продукции задаётся её порядковым номером. М2 - вспомогательный массив(на сколько уменьшилось или увеличилось количество изделий по некоторым видам продукции). Вспомогательный массив может содержать несколько сведений по продукции одного вида или не содержать такого сообщения. Обновить инвентарный массив на основе вспомогательного.
1. не пойму как это должно выглядеть

type vid=record
izdelie1:integer;
izdelie2:integer;
izdelie3:integer;
end;
var produkcia:array[1..10] of vid;

??? чото я не догоняю
2. "Вспомогательный массив может содержать несколько сведений по продукции одного вида"
как это сделать?
последняя лаба)

Автор: Archon 14.01.2009 2:43

Было бы неплохо увидеть оригинальный текст задания, но я понял его так:
Первый массив хранит сколько товаров какого вида хранится на складе. Второй массив хранит сколько товара какого вида прибыло (убыло) на склад. Пояснительный код:

type
TItem = record
Article: Integer; { Тип изделия }
Count: Integer; { Колличество или изменение колличества }
end;

var
Depository: array[1..n] of TItem; { Склад }
Update: array[1..m] of TItem; { Изменения на складе }
Нужно основываясь на информации второго массива обновить первый.

Автор: Ученик 14.01.2009 3:02

текст задания оригиналный - преподаватель дала списать из учебника.
за разъяснения спасибо.

Автор: Ученик 14.01.2009 3:30

косолапо получилось

const
n=2;
m=3;
type
Item = record
tip:integer;
kolvo:integer;
end;
var
i,j:integer;
sklad:array[1..n] of item;
upd:array[1..m] of Item;
begin
writeln('sklad',' ',n,' tip - kolvo');
for i:=1 to n do readln(sklad[i].tip,sklad[i].kolvo);
for i:=1 to n do writeln('ITEM',sklad[i].tip,' - ',sklad[i].kolvo);
writeln('update',' ',m,' tip - kolvo');
for i:=1 to m do readln(upd[i].tip,upd[i].kolvo);
for i:=1 to m do writeln('ITEM',upd[i].tip,' - ',upd[i].kolvo);

for i:=1 to n do
for j:=1 to m do if upd[j].tip=sklad[i].tip then sklad[i].kolvo:=sklad[i].kolvo+upd[j].kolvo;

writeln('updated sklad');
for i:=1 to n do writeln('ITEM',sklad[i].tip,' - ',sklad[i].kolvo);
readln;
end.

подскажите как упростить/чо неправильно

Автор: Ученик 14.01.2009 4:14


айа скажите чонить а то я спать не лягу

Автор: Archon 14.01.2009 4:18

1. Расставить отступы. Программа сразу станет проще для восприятия.
2. Сделать диалог с пользователем чуть более осмысленным. Первая строчка, которую выводит программа это "sklad 2 tip - kolvo". Довольно сложно понять, что имеется ввиду.
3. "writeln('sklad',' ',n,' tip - kolvo');" - зачем пробел в отдельный параметр отделять?

PS Упрощать особо нечего

Автор: Ученик 14.01.2009 4:19

ееее
мои благодарности
пойду спать

Автор: Lapp 14.01.2009 8:08

Цитата(Ученик @ 13.01.2009 23:30) *
подскажите как упростить/чо неправильно

Есть одно замечание, но оно спорное..
Что, если в массиве Upd встретился новый товар, который еще не присутствует в массиве Sklad? По логике вещей, нужно добавить его в массив.
Если с этим согласиться, то массив Sklad не должен ьыть заполнен до отказа, а число n должно означать, сколько элементов в нем реально используется.

Еще, чисто для удобства отладки и использования, лучше считывать оба массива из файлов.

Добавлено через 4 мин.
Еще, будет удобно использвать оператор with:
for i:=1 to n do with Sklad[i] do
for j:=1 to m do if upd[j].tip=tip then kolvo:=kolvo+upd[j].kolvo;