Результаты исследования в проекте Математические здачи в Delphi: различия между версиями
(→Результаты проведённого исследования) |
(→Результаты проведённого исследования) |
||
Строка 18: | Строка 18: | ||
==Результаты проведённого исследования== | ==Результаты проведённого исследования== | ||
Рассмотрим использование языка Delphi для решения математических задач на примере | Рассмотрим использование языка Delphi для решения математических задач на примере | ||
+ | В Нижнем Новгороде достаточно разветвленная трамвайная сеть. По некоторым улицам ходят трамваи более чем десяти маршрутов. Понятно, что от такой нагрузки рельсы быстро изнашиваются. Около остановок пути вообще иногда имеют волнообразный вид. | ||
+ | Если трамвай разгоняется до большой скорости, скажем, до 80 км/ч, а потом резко тормозит перед остановкой, то он проезжает некоторый участок юзом. Это приводит не только к порче рельсов, но и к стиранию колес в месте их соприкасания с рельсами. На колесах появляются плоские участки — так называемые ползуны. Их наличие приводит к стуку колес, дребезжанию вагона и еще большей порче рельсов. | ||
+ | Руководство трамвайного депо решило улучшить ситуацию и провести техобслуживание всех трамваев с ползунами на колесах. Для того чтобы ликвидировать ползуны, колесные пары обтачивают на специальном станке. Колеса одной пары при этом уменьшаются до одного размера, но разные пары могут уменьшиться по-разному. Чтобы оснастить колесами один вагон, ремонтники должны выбрать четыре колесные пары (именно столько их у вагона) с одинаковым диаметром. | ||
+ | Ремонтники закончили обточку всех колес. Некоторые из них уменьшились настолько, что стали непригодны для использования. Такие колеса идут на металлолом. Вместо них можно воспользоваться запасом колесных пар, оставшихся от списанных вагонов. Ремонтники измерили все колесные пары, которые можно устанавливать на вагоны, и теперь хотят понять, на сколько вагонов их хватит. | ||
+ | Исходные данные | ||
+ | В первой строке записано целое число n — количество имеющихся колесных пар (1 ≤ n ≤ 150). В следующих n строках записаны диаметры колес в миллиметрах (целые числа от 600 до 700). | ||
+ | Результат | ||
+ | Выведите количество вагонов, которое удастся оснастить колесными парами из имеющегося набора. | ||
+ | Решение | ||
+ | |||
+ | program Sample2; | ||
+ | |||
+ | {$APPTYPE CONSOLE} | ||
+ | |||
+ | uses | ||
+ | SysUtils; | ||
+ | |||
+ | var | ||
+ | i, n, count, p: integer; | ||
+ | a: array[0..153] of integer; | ||
+ | |||
+ | function check: boolean; | ||
+ | begin | ||
+ | if (a[p]=a[p+1]) and (a[p+1]=a[p+2]) and (a[p+2]=a[p+3]) then | ||
+ | Result:=true else Result:=false; | ||
+ | end; | ||
+ | |||
+ | procedure delit; | ||
+ | var | ||
+ | j:integer; | ||
+ | t:integer; | ||
+ | begin | ||
+ | j:=1; | ||
+ | t:=a[p]; | ||
+ | while (j<=4) and (a[p]=t) do | ||
+ | begin | ||
+ | inc(j); | ||
+ | inc(p); | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | procedure Sort(N: Integer); | ||
+ | var | ||
+ | h: Variant; | ||
+ | c: Boolean; | ||
+ | g: Integer; | ||
+ | i: Integer; | ||
+ | j: Integer; | ||
+ | tmp: Integer; | ||
+ | begin | ||
+ | h:=1; | ||
+ | g:=0; | ||
+ | repeat | ||
+ | h:=3*h+1 | ||
+ | until (h>=n); | ||
+ | |||
+ | if (h>n) then | ||
+ | begin | ||
+ | h:= h/3; | ||
+ | g:=h; | ||
+ | end; | ||
+ | |||
+ | n:=n-1; | ||
+ | |||
+ | repeat | ||
+ | i:=g; | ||
+ | repeat | ||
+ | j:=i-g; | ||
+ | c:=True; | ||
+ | repeat | ||
+ | if a[j]<=a[j+g] then | ||
+ | c:=False | ||
+ | else | ||
+ | begin | ||
+ | Tmp:=a[j]; | ||
+ | a[j]:=a[j+g]; | ||
+ | a[j+g]:=Tmp; | ||
+ | end; | ||
+ | j:=j-1 | ||
+ | until not((j>=0)and(C)); | ||
+ | i:=i+1 | ||
+ | until not(i<=n); | ||
+ | h:=g; | ||
+ | h:=h/3; | ||
+ | g:=h; | ||
+ | until not(g>0); | ||
+ | end; | ||
+ | |||
+ | begin | ||
+ | assign(input, 'input.txt'); | ||
+ | reset(input); | ||
+ | assign(output, 'output.txt'); | ||
+ | rewrite(output); | ||
+ | |||
+ | Readln(n); | ||
+ | |||
+ | for i:=1 to n do | ||
+ | Readln(a[i]); | ||
+ | Sort(n); | ||
+ | count:=0; | ||
+ | p:=1; | ||
+ | while n-p>0 do | ||
+ | begin | ||
+ | if check then inc(count); | ||
+ | delit; | ||
+ | end; | ||
+ | |||
+ | writeln(count); | ||
+ | |||
+ | close(input); | ||
+ | close(output); | ||
+ | end. | ||
==Вывод== | ==Вывод== |
Версия 09:44, 22 ноября 2011
Содержание
Авторы и участники проекта
Тема исследования группы
Учебный проект Математические задачи в Delphi
Проблемный вопрос (вопрос для исследования)
Как составить математическую модель задачи?
Гипотеза исследования
Цели исследования
- Подобрать примеры задач с литературными текстами
- Составить алгоритмы решения задач
- Составить программу на языке Delphi
- Выполнить анализ результата
Результаты проведённого исследования
Рассмотрим использование языка Delphi для решения математических задач на примере В Нижнем Новгороде достаточно разветвленная трамвайная сеть. По некоторым улицам ходят трамваи более чем десяти маршрутов. Понятно, что от такой нагрузки рельсы быстро изнашиваются. Около остановок пути вообще иногда имеют волнообразный вид. Если трамвай разгоняется до большой скорости, скажем, до 80 км/ч, а потом резко тормозит перед остановкой, то он проезжает некоторый участок юзом. Это приводит не только к порче рельсов, но и к стиранию колес в месте их соприкасания с рельсами. На колесах появляются плоские участки — так называемые ползуны. Их наличие приводит к стуку колес, дребезжанию вагона и еще большей порче рельсов. Руководство трамвайного депо решило улучшить ситуацию и провести техобслуживание всех трамваев с ползунами на колесах. Для того чтобы ликвидировать ползуны, колесные пары обтачивают на специальном станке. Колеса одной пары при этом уменьшаются до одного размера, но разные пары могут уменьшиться по-разному. Чтобы оснастить колесами один вагон, ремонтники должны выбрать четыре колесные пары (именно столько их у вагона) с одинаковым диаметром. Ремонтники закончили обточку всех колес. Некоторые из них уменьшились настолько, что стали непригодны для использования. Такие колеса идут на металлолом. Вместо них можно воспользоваться запасом колесных пар, оставшихся от списанных вагонов. Ремонтники измерили все колесные пары, которые можно устанавливать на вагоны, и теперь хотят понять, на сколько вагонов их хватит. Исходные данные В первой строке записано целое число n — количество имеющихся колесных пар (1 ≤ n ≤ 150). В следующих n строках записаны диаметры колес в миллиметрах (целые числа от 600 до 700). Результат Выведите количество вагонов, которое удастся оснастить колесными парами из имеющегося набора. Решение
program Sample2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
i, n, count, p: integer; a: array[0..153] of integer;
function check: boolean; begin
if (a[p]=a[p+1]) and (a[p+1]=a[p+2]) and (a[p+2]=a[p+3]) then Result:=true else Result:=false;
end;
procedure delit; var
j:integer; t:integer;
begin
j:=1; t:=a[p]; while (j<=4) and (a[p]=t) do begin inc(j); inc(p); end;
end;
procedure Sort(N: Integer); var
h: Variant; c: Boolean; g: Integer; i: Integer; j: Integer; tmp: Integer;
begin
h:=1; g:=0; repeat h:=3*h+1 until (h>=n);
if (h>n) then begin h:= h/3; g:=h; end;
n:=n-1;
repeat i:=g; repeat j:=i-g; c:=True; repeat if a[j]<=a[j+g] then c:=False else begin Tmp:=a[j]; a[j]:=a[j+g]; a[j+g]:=Tmp; end; j:=j-1 until not((j>=0)and(C)); i:=i+1 until not(i<=n); h:=g; h:=h/3; g:=h; until not(g>0);
end;
begin
assign(input, 'input.txt'); reset(input); assign(output, 'output.txt'); rewrite(output);
Readln(n);
for i:=1 to n do Readln(a[i]); Sort(n); count:=0; p:=1; while n-p>0 do begin if check then inc(count); delit; end;
writeln(count);
close(input); close(output);
end.