Найти минимальную площадь прямоугольника - C (СИ)
Формулировка задачи:
Дано целое число N и набор из N прямоугольников, заданных своими сторонами – парами чисел (a, b). Найти минимальную площадь прямоугольника из данного набора.
Ввод
В первой строке находится натуральное число N (1≤N≤100) – количество прямоугольников. Далее идут N строк, по два положительных вещественных числа в каждой строке.
Вывод
Вывести минимальную площадь прямоугольника из набора в виде вещественного числа с двумя знаками после запятой.
Пример ввода
3
1.0 2.0
2.0 1.5
1.5 1.0
Пример вывода
1.50
Решено на паскале. Подскажите, а как на си то же сделать?
{task minmax2}
var
n,i,a,b,min_s:integer;
f:boolean;
begin
repeat
write('Введите целое n=');
readln(n);
until n>0;
writeln('Введите ',n, ' пар сторон прямоугольников');
f:=false;
for i:=1 to n do
begin
repeat
write('a,b=');
readln(a,b);
until (a>0) and (b>0);
if not f then
begin
f:=true;
min_s:=a*b;
end
else if a*b<min_s then
min_s:=a*b;
end;
writeln('Минимальная площадь=',min_s);
readln;
end.Решение задачи: «Найти минимальную площадь прямоугольника»
textual
Листинг программы
#include <stdio.h>
#include <stdbool.h>
int main()
{
int count = 0 , flag = true;
float res = 0.0, min = 0.0, a = 0.0, b = 0.0;
while(flag){
printf("\nКоличество прямоугольников: ");
scanf("%d", &count);
if (count<=0){
printf("Некорректное значение");
count = 0 ;
} else {
int j = 0;
while(j<count){
printf("Прямоугольник(ширина и высота через пробел)#%2d: ",j);
scanf("%f %f", &a, &b);
if ((a<=0) || (b<=0)){
printf("Некорректное значение\n");
a = 0;
b = 0;
j = 0;
} else {
res = a*b;
if (!j)
min = res;
min = res<min ? res : min;
a = 0;
b = 0;
j++;
}
}
}
printf("Минимальная площадь введенного прямоугольника: %.2f\n", min);
flag = false;
}
return 0;
}
Объяснение кода листинга программы
- Объединение
и для ввода-вывода и работы с булевыми значениями соответственно. - Создание переменных count, flag, res, min, a, b типа int и float соответственно. Значение count инициализируется как 0, а flag как true.
- Ввод количества прямоугольников с помощью функции scanf и вывод сообщения об ошибке при некорректном вводе.
- Организация цикла while по переменной flag. Внутри цикла происходит ввод ширины и высоты прямоугольников с помощью функции scanf.
- Проверка корректности введенных значений ширины и высоты прямоугольников (больше 0).
- Вычисление площади каждого прямоугольника как произведение его ширины и высоты.
- Если это первый прямоугольник, то присваиваем минимальную площадь его значению.
- Если это не первый прямоугольник, то проверяем новое значение площади и обновляем минимальную площадь, если новое значение меньше текущего значения минимальной площади.
- После завершения цикла while выводим сообщение с минимальной площадью прямоугольника.
- Обнуляем переменную count и завершаем программу.