While not eof(input) do begin
В вестибулярной норме форма коронки ромбовидная, но с закругленными углами. Жевательная поверхность двухбугорковая. Размеры бугорков практически одинаковы. Корень одиночный. На аппроксимальной поверхности корня хорошо видны вертикальные бороздки, особенно на дистальной поверхности. 1. О каком зубе идет речь? 2. Какие возможны аномалии развития этих зубов? Ответ 1. Речь идет о втором верхнем премоляре. 2. Часто встречается адентия и гиподентия второго верхнего премоляра. Адентия сопровождается появлением трем между клыком и первым премоляром. Редкая аномалия - транспозиции, при котором первый второй премоляр меняются местами (или первый премоляр меняется с клыком). Краудинг (скученность зубов) также достаточно часто встречается у дистальных премоляров.
Type zvonki = record {Задаем запись} name: string; time: integer; pow: integer; end;
Var wizard: array [1..10000] of zvonki; {масссив записей} I, n, j, tmp, ps, kod: integer; tmp1, s, times: string;
// ПРОЦЕДУРЫ procedure time_sort(x: integer); { процедуры обмена значениями двух переменных} Begin tmp:= wizard[x].time; wizard[x].time:= wizard[x + 1].time; wizard[x + 1].time:= tmp; end;
procedure power_sort(x: integer); Begin tmp:= wizard[x].pow; wizard[x].pow:= wizard[x + 1].pow; wizard[x + 1].pow:= tmp; end;
procedure names_sort(x: integer); Begin tmp1:= wizard[x].name; wizard[x].name:= wizard[x + 1].name; wizard[x + 1].name:= tmp1; end;
Begin
/ / СЧИТЫВАНИЕ ИЗ ФАЙЛА assign(input, 'input.txt'); reset(input); {открываем input.txt} assign(output, 'output.txt'); rewrite(output); readln(n); {считываем количество волшебников} for I:= 1 to n do Begin readln(s); {считываем всю строку из файла.} PS:= Pos(' ', s); {функция pos() определяет позицию любого символа в строке. если символов несколько, выводит координату первого} wizard[I].name:= Copy(S, 1, PS - 1); {Копируем имя без пробела} Delete(s, 1, PS); {Удаляем имя с пробелом} PS:= Pos(' ', S); {Определяем позицию пробела} times:= Copy(S, 1, PS - 1); {Копируем строку во временную переменную} Val(times, wizard[I].time, kod); {Используем стандартную функцию преобразования типов.} Delete(S, 1, PS); {Удаляем все лишнее} Val(S, wizard[I].pow, kod); {Трансформируем оставшуюся строку в целое число.} end; // ТЕЛО ПРОГРАММЫ for I:= 1 to n - 1 do {сортируем пузырьком} for j:= 1 to n - i do Begin if wizard[j + 1].time > wizard[j].time then { Если время разговора волшебника больше времени следующего волшебника} Begin time_sort(j); {обмениваем значения времени} names_sort(j); {обмениваем значения имен} power_sort(j); {обмениваем значения сил. таким образом мы перемещаем волшебника с меньшим временем разговора вниз} end; if wizard[j + 1].time = wizard[j].time then begin {Если время разговора волшебников одинаково, то} if wizard[j + 1].pow < wizard[j].pow then {Если сила одного меньше силы другого, то} Begin power_sort(j); {обмениваем значения сил} names_sort(j); {обмениваем значения имен} // Время у них и так одинаковое, поэтому нет смысла производить обмен времени. End Else if wizard[j + 1].pow = wizard[j].pow then {Если же сила у них равна} if wizard[j + 1].name < wizard[j].name then {Сравниваем имена.} names_sort(j); {обмениваем значения имен} // Время и сила у них одинаковое, поэтому мы обмениваем только имена. end; end; // ВЫВОД for i:= 1 to n do writeln(output, wizard[i].name); close(input); close(output); End.
Решение задачи Перевозка грузов Обозначим: k - номер рейса судна, i - номер очередного груза, s - масса груза на судне в k-том рейсе. Решать задачу будем так: если на судно в k-том рейсе можно поместить ещё один груз, то мы грузим его и берём следующий, если груз не может быть размещен, то перевозим его следующим рейсом (увеличиваем k). program perevozka; type massiv=array of integer; Var m:massiv; k,s,i:integer; input, output: text;
Begin assign(input,'input.txt'); reset(input); i:= -1; while not eof(input) do begin Inc(i); SetLength(m, i + 1); Read(input, m[i]); //writeln(m[i]); Readln(input); end; close(input);
assign(output,'output.txt'); rewrite(output); i:=1; k:=1; s:=0; repeat if s+m[i]<=50 then Begin s:=s+m[i]; i:=i+1; End else if m[i]<=50 then begin k:=k+1; s:=0; End Else Begin k:=0; Break; end; until i>m[0]; if k<>0 then write(output,'Vsego potrebovalos ', k,' reysov') else write(output,'Odin iz gruzov vesit bolshe 50 tonn'); Close (output); m:=nil; //readln(); End. Решение задачи Встреча автомобилей
Выберем координатную систему так, чтобы горизонтальная ось совпадала с дорогой, по которой движется первый автомобиль, а вертикальная была перпендикулярна горизонтальной. Основной подводный камень задачи состоит в том, что нам дан угол между направлениями движения, а не между дорогами, поэтому если скорости автомобилей имеют разные знаки, то угол между дорогами будет 180° - A. Найдём зависимость координат каждого автомобиля от времени, выразим через них зависимость расстояния между ними от времени и найдём момент времени, в который это расстояние будет наименьшим. Координаты автомобилей:
где b - угол между дорогами. Поскольку расстояние - величина положительная, то вместо него можно минимизировать его квадрат:
Момент времени, в который расстояние между автомобилями будет минимально, можно найти как вершину параболы: t = -b/2a, где a и b - коэффициенты при t2 и t соответственно. Область определения функции r2(t) - множество неотрицательных целых чисел, поэтому если t < 0, то минимумом r2(t) будет r(0). Второй подводный камень заключается в вычислении угла между направлениями движения когда одна из скоростей равна нулю. Строго математически, угол между нулевым вектором и каким-либо другим есть величина неопределённая, но мы имеем дело с приближённой физической моделью, поэтому углом между дорогами можно считать как угол A, так и угол 180° - A - нужно найти минимальное расстояние в обоих случаях и выбрать меньшее из них.
Program Cars; Type Real = Extended; { На всякий случай } Var V1,V2,S1,S2,A: Real;
Function Solve(A: Real): Real; { Решение для угла A между дорогами } Var CosA,R,ParA,ParB,ParC,T: Real; Begin If V1 * V2 < 0 Then A:= 180 - A; CosA:= Cos(Pi * A / 180); { Коэффициеты квадратного уравнения } ParA:= Sqr(V1) + Sqr(V2) - 2 * V1 * V2 * CosA; ParB:= S1 * V1 + S2 * V2 - (S1 * V2 + S2 * V1) * CosA; ParB:= ParB * 2; ParC:= Sqr(S1) + Sqr(S2) - 2 * S1 * S2 * CosA; T:= -ParB / (2 * ParA); If T < 0 Then R:= Sqr(S1) + Sqr(S2) - 2 * S1 * S2 * CosA Else R:= Sqr(T) * ParA + T * ParB + ParC; Solve:= Sqrt(R); End;
Var R,RR: Real;
BEGIN { Assign(Input,'cars.in'); Reset(Input); Assign(Output,'cars.out'); ReWrite(Output);} Read (A,V1,V2,S1,S2); R:= Solve(A); If (V1 = 0) Or (V2 = 0)
|