Только что решал такую задачу:
//Pascal
var a,s:integer;
begin
s:=0;
repeat
readln(a);
s:=s+a;
until a=0;
writeln(s);
end.
10111(2) = 23(10)
111101(2) = 61(10)
1101100(2) = 108(10)
<span>Описывается список с полями согласно заданию
type
student = Record
fam: String;
inn: string;
Year: integer;
god_p: integer;
kurs: 1..5;
gruppa: string;
b1, b2, b3: 1..5;
End;
Объявляются необходимые переменные и массив с типом записи</span>
<span>var
spisok: Array [1..N] Of student;
b, a: string;
i, j, k1: Integer;
И заполняется от 1 до N (N=5 установлена константа)
for i := 1 To N Do // идем от 1 до N и заполняем список
with spisok[i] Do
begin
Writeln('Введите фамилию');Readln(fam);
{......}
end;
Потом обрабатывается согласно заданию по вариантам
Скорее всего, что-то типо сортировки по году рождения, самых молодых пихают в начало.(глупо. можно было не городить такой кусок кода, а уместить все в один цикл с проверкой и выводом ИМХО)
Затем выводится 3 фамилии самых молодых
</span>
<span>for i := 1 to 3 do
begin
write(spisok[i].fam);
writeln;
end;</span>
===== PascalABC.NET =====
function GCD(a, b: integer): integer;// НОД
begin
while b <> 0 do
begin
a := a mod b;
Swap(a, b)
end;
Result := a
end;
procedure RedFrac(var a, b: integer);// сокращение дроби
begin
var sgna := Sign(a); // мы должны учитывать знак!
var sgnb := Sign(b); // мы должны учитывать знак!
a := Abs(a);
b := Abs(b);
var d := GCD(a, b);
a := (a div d) * sgna;
b := (b div d) * sgnb
end;
begin
var (p1, q1) :=
ReadInteger2('Дробь 1. Введите числитель и знаменатель:');
var (p2, q2) :=
ReadInteger2('Дробь 2. Введите числитель и знаменатель:');
var p3 := p1 * q1 + p2 * q2;
var q3 := q1 * q2;
RedFrac(p3, q3);
Println(p3, '/', q3)
end.