Во-первых, X1 < 8, иначе число 2N в 16-ной записи станет 4-значным. Можно написать такую программу поиска этих чисел Начало k = 0 ' Это счетчик чисел, которые мы ищем Цикл по X1 от 1 до 7 Цикл по Y1 от 0 до 15 Цикл по Z1 от 0 до 15 N = X1*256 + Y1*16 + Z1 M = 2*N X2 = Int (M / 256) Y2 = Int ((M - X2*256) / 16) Z2 = M Mod 16 Если (X1+Y1+Z1 = X2+Y2+Z2) And ((X1 = 2) Or (Y1 = 2) Or (Z1 = 2), То k = k + 1 Конец Если Конец цикла по Z1 Конец цикла по Y1 Конец цикла по X1 Вывод k Конец
1. Надо добавить точку в последней строке программы. Иначе работать не будет. 2. Меняется всего одна строка в программе:
program pr2;
type student = record {объявление нового типа данных student} LastName: string; {фамилия студента} bal: array [1..5] of integer; {массив для 5-ти оценок} average: real {средний студента} end;
var pupil: array [1..100] of student; {массив pupil (максимум из 100 элементов) типа student} n, i, j, s: integer;{переменные целого типа}
begin write('Введите количество студентов: '); readln(n); for i := 1 to n do begin{запрос данных по n студентам} with pupil[i] do begin Write('Введите фамилию студента №', i, ': '); {запрос фамилии студента под номером i} Readln(LastName); s := 0; {целочисленная переменная для определения суммы студента} for j := 1 to 5 do begin{цикл для обработки 5-ти оценок каждого студента} write('Введите оценку за экзамен №:', j, ': ' ); readln(bal[j] ); s := s + bal[j]; {суммирование 5-ти оценок студента} end; average := s / 5; {определение среднего значения и запись в переменную average} end; end; writeln; writeln( 'Студенты, имеющие средний больший или равный 4'); for i := 1 to n do begin if pupil[i].average >= 4 then {если средний студента >=4} write(pupil[i].LastName,', '); end; end.
2N = X2*256 + Y2*16 + Z2
X1 + Y1 + Z1 = X2 + Y2 + Z2
Во-первых, X1 < 8, иначе число 2N в 16-ной записи станет 4-значным.
Можно написать такую программу поиска этих чисел
Начало
k = 0 ' Это счетчик чисел, которые мы ищем
Цикл по X1 от 1 до 7
Цикл по Y1 от 0 до 15
Цикл по Z1 от 0 до 15
N = X1*256 + Y1*16 + Z1
M = 2*N
X2 = Int (M / 256)
Y2 = Int ((M - X2*256) / 16)
Z2 = M Mod 16
Если (X1+Y1+Z1 = X2+Y2+Z2) And ((X1 = 2) Or (Y1 = 2) Or (Z1 = 2), То
k = k + 1
Конец Если
Конец цикла по Z1
Конец цикла по Y1
Конец цикла по X1
Вывод k
Конец
2. Меняется всего одна строка в программе:
program pr2;
type
student = record {объявление нового типа данных student}
LastName: string; {фамилия студента}
bal: array [1..5] of integer; {массив для 5-ти оценок}
average: real {средний студента}
end;
var
pupil: array [1..100] of student; {массив pupil (максимум из 100 элементов) типа student}
n, i, j, s: integer;{переменные целого типа}
begin
write('Введите количество студентов: ');
readln(n);
for i := 1 to n do
begin{запрос данных по n студентам}
with pupil[i] do
begin
Write('Введите фамилию студента №', i, ': '); {запрос фамилии студента под номером i}
Readln(LastName);
s := 0; {целочисленная переменная для определения суммы студента}
for j := 1 to 5 do
begin{цикл для обработки 5-ти оценок каждого студента}
write('Введите оценку за экзамен №:', j, ': ' );
readln(bal[j] );
s := s + bal[j]; {суммирование 5-ти оценок студента}
end;
average := s / 5; {определение среднего значения и запись в переменную average}
end;
end;
writeln;
writeln( 'Студенты, имеющие средний больший или равный 4');
for i := 1 to n do
begin
if pupil[i].average >= 4 then {если средний студента >=4}
write(pupil[i].LastName,', ');
end;
end.