Úloha 3.7
Napíšte program, zdrojový kód, v jazyku C použitím štandardu C17, ktorý realizuje nasledovnú činnosť. Definujte funkciu int druhe_najvacsie(int n) s parametrom celé číslo n. Funkcia načíta n čísiel z klávesnice a vráti druhé najväčšie načítané číslo (druhé maximum). V prípade, že má parameter n hodnotu menšiu ako 2, funkcia vypíše chybovú hlášku, že hodnota vstupného argumentu funkcie musí byť aspoň 2 a ukončí program.
Príklady vstupov / výstupov programu
- Volanie
druhe_najvacsie(1)vypíše chybu a skončí. - Volanie
druhe_najvacsie(5)načíta 5 čísiel z klávesnice. Ak sú tieto čísla napríklad 5,-2,1,2,3 funkcia vráti číslo 3, pretože -2 ≤ 1 ≤ 2 ≤ 3 ≤ 5 - Volanie
druhe_najvacsie(3)načíta 3 čísla z klávesnice. Ak sú tieto čísla napríklad -10, -5, 0 funkcia vráti číslo -5, pretože -10 ≤ -5 ≤ 0
Tip
Pri implementácia môžte použiť knižnicu limits.h. #include <limits.h>, ktorá obsahuje konštanty pre maximálne
a minimálne hodnoty dátových typov.
Rozbaľ pre ukážku riešenia
#include <stdio.h>
#include <limits.h>
int druhe_najvacsie(int n) {
if (n < 2) {
printf("Chyba: hodnota vstupného argumentu musí byť aspoň 2.\n");
return -1;
}
int max1 = INT_MIN; // Najväčšie číslo
int max2 = INT_MIN; // Druhé najväčšie číslo
int num;
for (int i = 0; i < n; i++) {
printf("Číslo %d: ", i + 1);
scanf("%d", &num);
// Ak je nové číslo väčšie ako max1, posunieme max1 do max2
if (num > max1) {
max2 = max1;
max1 = num;
}
// Ak je nové číslo menšie ako max1, ale väčšie ako max2
else if (num > max2 && num != max1) {
max2 = num;
}
}
if (max2 == INT_MIN) {
printf("Nie je možné určiť druhé najväčšie číslo.\n");
return -1;
}
return max2;
}
int main() {
int output = druhe_najvacsie(5);
if (output == -1) return 1;
else printf("%d\n", output);
output = druhe_najvacsie(3);
if (output == -1) return 1;
else printf("%d\n", output);
output = druhe_najvacsie(1);
if (output == -1) return 1;
else printf("%d\n", output);
return 0;
}