• Предмет: Информатика
  • Автор: Kurbanello
  • Вопрос задан 5 месяцев назад

Программирование на Паскаль, 1-й курс.
Помогите решить задачи

Приложения:

Ответы

Ответ дал: makason512
0

1.  function getRealFromString(str: string): real;

var

 i: integer;

 result: real;

 isNegative: boolean;

begin

 result := 0;

 isNegative := false;

 // Проверяем, начинается ли строка с минуса

 if str[1] = '-' then

 begin

   isNegative := true;

   i := 2; // Начинаем цикл со второго символа

 end

 else

 begin

   i := 1;

 end;

 // Парсим строку, пока не дойдем до конца или не встретим знак десятичной точки

 while (i <= length(str)) and (str[i] <> '.') do

 begin

   result := result * 10 + (ord(str[i]) - ord('0'));

   i := i + 1;

 end;

 // Если нашли знак десятичной точки, парсим дробную часть

 if i <= length(str) then

 begin

   i := i + 1; // Пропускаем точку

   var decimalPlaces := 1;

   while i <= length(str) do

   begin

     result := result + (ord(str[i]) - ord('0')) / power(10, decimalPlaces);

     decimalPlaces := decimalPlaces + 1;

     i := i + 1;

   end;

 end;

 // Если число было отрицательным, домножаем на -1

 if isNegative then

 begin

   result := result * -1;

 end;

 getRealFromString := result;

end;

2. В качестве концевого значения можно использовать пустую строку в качестве значения фамилии:

const

 MAX_STUDENTS = 100;

type

 studentRecord = record

   surname: string;

   height: real;

 end;

var

 students: array[1..MAX_STUDENTS] of studentRecord;

 numStudents: integer;

 i: integer;

begin

 numStudents := 0;

 i := 1;

 // Читаем записи о студентах до тех пор, пока не встретим пустую строку

 while not eof do

 begin

   readln(students[i].surname);

   if students[i].surname = '' then

   begin

     break;

   end;

   readln(students[i].height);

   numStudents := numStudents + 1;

   i := i + 1;

 end;

end;

После этого можно вычислить средний рост студентов и распечатать информацию о студентах, чей рост больше среднего:

var

 averageHeight: real;

 i: integer;

begin

 // Вычисляем средний рост

 averageHeight := 0;

 for i := 1 to numStudents do

 begin

   averageHeight := averageHeight + students[i].height;

 end;

 averageHeight := averageHeight / numStudents;

begin

 // Распечатываем информацию о студентах, чей рост больше среднего

 for i := 1 to numStudents do

 begin

   if students[i].height > averageHeight then

   begin

     writeln('Фамилия: ', students[i].surname);

     writeln('Рост: ', students[i].height);

   end;

 end;

end;

3. Чтобы продублировать данные о студенте, чей рост ближе к среднему по группе, можно вычислить разность между ростом каждого студента и средним ростом, а затем найти студента с минимальной разностью:

var

 minDiff: real;

 closestStudent: integer;

begin

 // Находим студента с минимальной разностью между ростом и средним ростом

 minDiff := abs(students[1].height - averageHeight);

 closestStudent := 1;

 for i := 2 to numStudents do

 begin

   var diff := abs(students[i].height - averageHeight);

   if diff < minDiff then

   begin

     minDiff := diff;

     closestStudent := i;

   end;

 end;

 // Продублируем запись о студенте с минимальной разностью

 writeln('Фамилия: ', students[closestStudent].surname);

 writeln('Рост: ', students[closestStudent].height);

end;

4. var

 expression: string;

 result: real;

begin

 writeln('Введите выражение:');

 readln(expression);

 result := getRealFromString(expression);

 writeln('Результат выражения: ', result);

end;

Вас заинтересует