Здравствуйте, я новичок в программировании и учусь на 2-ом курсе. К сожалению в процессе учебы у меня сформировался на сегодня слабый опыт работы по теме множеств и их записи. Пожалуйста кто может помочь новичку с задание по лабораторной работе : фирма реализует изделия клиентам. Имеются следующие данные о продажах: изделие, цена, клиент, количество, дата продажи ( вывести сведения о продажах с подсчетом вырученной суммы в порядке возрастания даты продажи, для заданного изделия вывести сведения о продажах его клиентам в порядке убывания количества проданных изделий. Рассчитать общую вырученную сумму от продаж изделия).
Я понимаю что по сути прошу написать код с нуля , но я вот уже 2 дня подряд бьюсь над этой задачей , в плане реализации записи, и как итог я столкнулся с тем что Delphi имеет строгую типизацию из-за чего мои попытки написать код рушились на стадии вывода элементов множества по средством использования проверки с использованием диапазона значений в цикле. В конце в терминале выводились лишь символы или ошибка. Из-за этого я постоянно закрывал среду разработки без сохранения проекта (это было на эмоциях).
Пожалуйста можете помочь.
Так а в чем именно проблема, чем типизация мешает?
Автосохранение в настройках можно включить )
Если быть точным , то итог у меня получился такой
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
date = set of 1..31;
quantity= set of 1..100;
d_1 = array[1..100] of date;
q_1= array[1..100] of quantity;
{В константах клиенты и установленная цена на общие изделие n-ой фирмы}
const clients:array[1..3] of string [100] = ('Иванов И.П','Федоров В.С','Семнов С.С' );
price = 100 ;
{Продедуры ввода информациии о клиенте:количество купленного и дата покупки}
procedure vvod_1(var a:date);
var a_1,i:byte;
begin
a:=[];
for i:=1 to 3 do
begin
write('Дата покупки изделия клиентом ',' ',clients[i],' :');
readln(a_1);
if a_1 in a then a:=a+[a_1]
end;
end;
procedure vvod_2(var b:quantity);
var b_1,i:byte;
begin
b:=[];
for i:=1 to 3 do
begin
write(' количество купленного изделия клиентом ',' ',clients[i],' :');
readln(b_1);
if b_1 in b then b:=b+[b_1]
end;
end;
procedure print(a:date;b:quantity);
var i:byte;
begin
for i:=1 to 3 do
begin
if i in a then write(clients[i]);if i in b then write(clients[i]);
writeln;
end;
end;
procedure rez_1(a:d_1;b:q_1; var s:date;g:quantity);
var z,y,i:byte;
begin
y:=price;
s:=[1..31];
g:=[1..100];
for i:=1 to 3 do
begin
g:=g*a[i];
end;
end;
var a:d_1;b:q_1;
i:byte;
c:date;n:quantity;
begin
write('---------------------');
for i:=0 to 1 do vvod_1(a[i]);
for i:=0 to 1 do vvod_2(b[i]);
readln;
end.
Как видно не самый лучший. Можно сказать что я написал полный бред из-за не понимания реализации кода по условию задания, и как итог все печально.
Зачем set
? Просто число, для которого не надо и свой тип объявлять.
И для дат есть например TDateTime
.
лучше сделать record
(или класс) со всеми полями, и один массив объектов этого типа.