IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> задача подсчитать сколько за 1 час сделано компов, сделал но не до конца не знаю как доделать
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 324
Пол: Мужской
Реальное имя: maksim

Репутация: -  1  +


Задачка
Компьютерного производства рабочее время с 0.00 до 23.59 часов. Когда произвели компьютер сразу комп попадает в погрузочный отдел и зразу грузит в машину. Компьютеры в машину грузят не больше чем один час от изготовления первого компа. Загрузивши последний комп машина уежает. Другая машина приезжает когда новый комп произвели. В последнию машину грузят комп до конца рабочего времени.
Напишите программу которая находит сколько машин за день было и сколько компов погрузилось в каждую машину.
Первичные данный записаны в файле duom.txt . На первой строчке написан натуральное число n(<=1440), обозначает сколько компьютеров произведено всего. На второй строчке записаны два натуральных числа h и m обозначающее час и минуты которые показывают время погрузки компа.
Результаты записываем в файл rez.txt На первой строчке пишем сколько машин погрузили на остальных строчках пишим сколько в каждой машине компов.
Пример начальные данные
8
12 30
23 59
13 29
11 0
0 30
13 31
0 0
13 30
результат
5
2
1
2
2
1
Объяснение
В первую машину погрузили компы в 0.00 и 0.30 час.
во вторую машину погрузили в 11.00 час.
в третию машину погрузили в 12.30 и 13.29 час.
в четвертую машину погрузили в 13.30 и 13.31 час.
в пятую машину погрузили компы в 23.59 час.

В программе сделал сортировку времени по возрастанию
Потом сравниваю время и там только пары показывает ну остальные показывает но не так как я хотел они просто повторяются несколько раз бессмысленно и все
program masdvi;
var n,i,j,p,c:0..1440;
h:array [0..1440] of 0..23;
m:array [0..1440] of 0..59;
duom,rez:text;
a:0..24;
b:0..59;

begin
assign(duom,'duom.txt');
Assign (rez,'rez.txt');
reset (duom);
rewrite (rez);
Readln(duom,n);
for i:=1 to n do
readln(duom,h[i],m[i]);
{********************cortirovka******************************}
for j:=1 to n do
for i:=1 to n-1 do
if (h[i]=h[i+1]) and (m[i]>m[i+1])
then begin
a:=h[i];
h[i]:=h[i+1];
h[i+1]:=a;
b:=m[i];
m[i]:=m[i+1];
m[i+1]:=b;
end
else if (h[i]>h[i+1]) then begin
a:=h[i];
h[i]:=h[i+1];
h[i+1]:=a;
b:=m[i];
m[i]:=m[i+1];
m[i+1]:=b;
end;


{*****************vv error*********************************}
for i:=1 to n do
begin
p:=1;
j:=0;
for j:=i+1 to n do
begin
{writeln('i= ',i,' j= ',j);}
a:=h[i];
inc(a);
if h[i]=h[j] then begin inc(p); writeln('p= ',p,' ',h[i],' = ',h[j],' ',m[i],' ',m[j]); end;
if (a=h[j]) and (m[i]>m[j]) then begin inc(p); writeln('kjh p= ',p,' ',h[i],' = ',h[j],' ',m[i],' ',m[j]); end;
{if (h[i]<>h[j]) and (a<>h[j]) and (p=1) then begin inc(p) writeln(h[i],' ',m[i]); inc(i); end; }
{if (h[i]<>h[j]) and (a<>h[j]) and (p>1) then begin writeln('kkmj') writeln('p= ',p); i:=i+p-1; j:=i;p:=1; writeln('i= ',i); end; }
end;
{writeln('p= ',p);} i:=i+p-1; {writeln('i= ',i);}
end;

{*****************vivod*******************************}
for i:=1 to n do
writeln(h[i],' ',m[i]);
readln;
close(duom);
close(rez);
end.


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 324
Пол: Мужской
Реальное имя: maksim

Репутация: -  1  +


Посмотрел еще получилось это без последних цифр подсчета
program masdvi;
var n,i,j,p,c:0..1440;
h:array [0..1440] of 0..23;
m:array [0..1440] of 0..59;
k:array [0..1440] of 0..1440;
duom,rez:text;
a:0..24;
b:0..59;

begin
assign(duom,'duom.txt');
Assign (rez,'rez.txt');
reset (duom);
rewrite (rez);
Readln(duom,n);
for i:=1 to n do
readln(duom,h[i],m[i]);
{********************cortirovka******************************}
for j:=1 to n do
for i:=1 to n-1 do
if (h[i]=h[i+1]) and (m[i]>m[i+1])
then begin
a:=h[i];
h[i]:=h[i+1];
h[i+1]:=a;
b:=m[i];
m[i]:=m[i+1];
m[i+1]:=b;
end
else if (h[i]>h[i+1]) then begin
a:=h[i];
h[i]:=h[i+1];
h[i+1]:=a;
b:=m[i];
m[i]:=m[i+1];
m[i+1]:=b;
end;


{*****************vv error*********************************}
c:=0;
for i:=1 to n do
begin
j:=0;
p:=0;
for j:=i+1 to n do
begin
{writeln('i= ',i,' j= ',j); }
a:=h[i];
inc(a);
if h[i]=h[j] then begin
if p=0 then p:=2
else inc(p);
writeln('p= ',p,' ',h[i],' = ',h[j],' ',m[i],' ',m[j]);
end;
if (a=h[j]) and (m[i]>m[j]) then begin
if p=0 then p:=2
else inc(p);
writeln('kjh p= ',p,' ',h[i],' = ',h[j],' ',m[i],' ',m[j]);
end;
if (h[i]<>h[j]) and (a<>h[j]) and (p=0) then begin
inc(p);
writeln(h[i],' ',m[i]);
end;
{if (h[i]<>h[j]) and (a<>h[j]) and (p>1) then begin writeln('kkmj') writeln('p= ',p); i:=i+p-1; j:=i;p:=1; writeln('i= ',i); end;}
end;
{writeln('p= ',p);
writeln('i= ',i);}
inc©;
k[c]:=p;
if i=n-2 then i:=n
else i:=i+p-1;
{writeln('i:=i+p-1: =',i); }

end;
writeln;
writeln©;
writeln;
for j:=1 to c do
writeln(k[j]);

{*****************vivod*******************************}
for i:=1 to n do
writeln(h[i],' ',m[i]);
readln;
close(duom);
close(rez);
end.


Добавлено через 4 мин.
И еще мне не нравится что идет циклы после сравнения и что дальше нечего сравнивать уже если один раз неравно


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
Потом сравниваю время и там только пары показывает ну остальные показывает но не так как я хотел
Вот так хотел? smile.gif
type
pair = record
hr, min: integer;
end;
const
n = 8;
ar: array[1 .. n] of pair = (
(hr:12; min:30),
(hr:23; min:59),
(hr:13; min:29),
(hr:11; min: 0),
(hr: 0; min:30),
(hr:13; min:31),
(hr: 0; min: 0),
(hr:13; min:30)
);

function more(a, b: pair): boolean;
begin
more := ((a.hr > b.hr) or ((a.hr = b.hr) and (a.min > b.min)));
end;
function diff(a, b: pair): integer;
begin
diff := 60 * (b.hr - a.hr) + (b.min - a.min);
end;

var
i, j: integer;
T, start: pair;
begin
for i := 1 to n do
for j := n downto i+1 Do
if more(ar[Pred(j)], ar[j]) then begin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
end;

start := ar[1];
for i := 1 to n do begin
if diff(start, ar[i]) >= 60 then begin
writeln;
start := ar[i];
end;
write(ar[i].hr, ':', ar[i].min, ' ');
end;

end.
(я для теста вбил твои данные в программу, но ничего не мешает тебе читать их из файла. Как видишь, время полностью совпадает с тем, что ты привел. Осталось только подсчитать количество компьютеров в каждой машине и все...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

Группа: Пользователи
Сообщений: 324
Пол: Мужской
Реальное имя: maksim

Репутация: -  1  +


Спасибо теперь все работает все доделал и разобрался только есть несколько вопросов Почему в в type использовали integer о не byte или 0..59? Сколько памети берет 0..59 меньше чем byte? И я не ошибся что взял 0..59 ?
type
pair = record
hr, min: 0..59;
end;
var
n,a:0..1440;
ar: array[1 .. 1440] of pair;
mas:array [1..1440] of 0..1440;
function more(a, b: pair): boolean;
begin
more := ((a.hr > b.hr) or ((a.hr = b.hr) and (a.min > b.min)));
end;
function diff(a, b: pair): integer;
begin
diff := 60 * (b.hr - a.hr) + (b.min - a.min);
end;

var
i, j: integer;
T, start: pair;
duom,rez:text;
begin
assign(duom,'duom.txt');
Assign (rez,'rez.txt');
reset (duom);
rewrite (rez);
Readln(duom,n);
for i:=1 to n do
readln(duom,ar[i].hr,ar[i].min);
for i := 1 to n do
for j := n downto i+1 Do
if more(ar[Pred(j)], ar[j]) then begin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
end;
a:=0;
j:=0;
start := ar[1];
for i := 1 to n do begin
if diff(start, ar[i]) >= 60 then begin
if a>0 then begin inc(j); mas[j]:=a end;
a:=0;
start := ar[i];
end;
inc(a);
end;
if a>0 then begin inc(j); mas[j]:=a end;
writeln(rez,j);
for i:=1 to j do
writeln(rez,mas[i]);
close(duom);
close(rez);
end.



А я еще попробовал и у меня получилось с циклом while только последний элемент не выводит
program masdvi;
var n,i,j,p:0..1440;
h:array [0..1440] of 0..23;
m:array [0..1440] of 0..59;
duom,rez:text;
a:0..24;
b:0..59;

begin
assign(duom,'duom.txt');
Assign (rez,'rez.txt');
reset (duom);
rewrite (rez);
Readln(duom,n);
for i:=1 to n do
readln(duom,h[i],m[i]);
{********************cortirovka******************************}
for j:=1 to n do
for i:=1 to n-1 do
if (h[i]=h[i+1]) and (m[i]>m[i+1])
then begin
a:=h[i];
h[i]:=h[i+1];
h[i+1]:=a;
b:=m[i];
m[i]:=m[i+1];
m[i+1]:=b;
end
else if (h[i]>h[i+1]) then begin
a:=h[i];
h[i]:=h[i+1];
h[i+1]:=a;
b:=m[i];
m[i]:=m[i+1];
m[i+1]:=b;
end;


{*****************vv error*********************************}
i:=1;
while i<n do
begin
j:=i+1;
p:=0;
while j<n do
begin
writeln('i= ',i,' j= ',j);
a:=h[i];
inc(a);
if h[i]=h[j] then begin
if p=0 then p:=2
else inc(p);
writeln('p= ',p,' ',h[i],' = ',h[j],' ',m[i],' ',m[j]);
end;
if (a=h[j]) and (m[i]>m[j]) then begin
if p=0 then p:=2
else inc(p);
writeln('kjh p= ',p,' ',h[i],' = ',h[j],' ',m[i],' ',m[j]);
end;
if (h[i]<>h[j]) and (a<>h[j]) and (p=0) then begin
inc(p);
writeln(h[i],' ',m[i]);
end;
if (h[i]<>h[j]) and (p>=1) or (a<>h[j]) then begin
writeln('kkmj'); writeln('p= ',p); i:=i+p; j:=i; p:=0; writeln('i= ',i); end;
inc(j)
end;

end;

{*****************vivod*******************************}
for i:=1 to n do
writeln(h[i],' ',m[i]);
readln;
close(duom);
close(rez);
end.

теперь мне кажется что моя програмка огромная по сравнению с вашей. Вашее решение понравилось больше что компактное меньше писать надо.


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
Сколько памети берет 0..59 меньше чем byte?
Меньше чем байт ничего брать по определению не может. Это - минимальный размер. Ты не можешь выделить памяти меньше одного байта, хотя тебе для хранения 0 .. 59 достаточно 6 бит.

Почему я взял Integer - просто по привычке. Если будет большой массив (1440 элементов - уже достаточно много), то имеет смысл сделать байтовые элементы, чтобы не тратить память впустую. С другой стороны, возможно, что обращения к массиву Integer-ов будут выполняться быстрее, чем к Byte-ам. Мне привычнее использовать Integer в таких случаях.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 15.05.2024 17:02
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name