Witam serdecznie, męczę się od wczoraj nad kawałkiem programu, który miałem wykonać na podstawie zadania, umieszczam tutaj treść zadania:
Napisz program, który wczyta dowolną liczbę liczb całkowitych od użytkownika (nie mniej niż jedną, nie więcej niż 1000), jako jeden ciąg liczb oddzielonych spacjami od siebie. Załóż, że wartość -1 nie jest daną, a określeniem końca danych. Następnie wyznacz i wypisz (jako liczby, każda w nowej linii): liczbę elementów tablicy, najmniejszą i największą wartość, średnią oraz iloczyn wszystkich elementów. Przykładowy wektor wejściowy:1 2 3 4 5 6 5 4 3 5 6 7 8 9 9 8 7 6 5 4 1 5 5 5 −1
Przykładowe wyjście:
24
1
9
5.125
1110900736
To jest zadanie które wykonałem i działa, a teraz mam je przerobić w następujący sposób:
Dla tablicy z zadania 5.18 wyświetl dodatkowo indeksy komórek, zawierających wartości najmniejsze i największe tablicy. Zwróć uwagę, że ta samą wartość może być przechowywana w wielu komórkach.
Oto kod który nabazgrałem:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int podana_liczba = 0;
int licznik_petli = 0;
int tablica[299999];
int tablica_minimum[20000];
int tablica_maximum[20000];
int max = -2147483648;
int min = 2147483647;
float sr;
int iloczyn = 1;
int i=0;
int c=0;
int z=0;
puts("Podaj wartosci twojej tablicy. -1 konczy tworzenie tablicy.");
while(1) {
scanf("%i", &podana_liczba);
if(podana_liczba == -1) break;
else {
tablica[licznik_petli] = podana_liczba;
licznik_petli++;
}
}
for(i=0 ; i < licznik_petli ; i++) {
if(tablica[i] <= min) {
min = tablica[i];
tablica_minimum[c] = i;
c++;
if(tablica[i] < min) {
c--;
tablica_minimum[c] = i;
c++;
}
}
if(tablica[i] >= max) {
max = tablica[i];
tablica_maximum[z] = i;
z++;
if(tablica[i] > max) {
z--;
tablica_maximum[z] = i;
z++;
}
}
sr = sr + tablica[i];
iloczyn = iloczyn*tablica[i];
}
sr = sr/licznik_petli;
printf("Ilosc elementow: %i\n", licznik_petli-1);
printf("Wartosc minimalna: %i\n", min);
printf("Wartosc srednia: %.3f\n", sr);
printf("Wartosc maksymalna: %i\n", max);
printf("Iloczyn: %i\n", iloczyn);
puts("\n\nPozycje maximum:");
for(i=0 ; i<z ; i++) {
printf("%i ", tablica_maximum[i]);
}
puts("\nPozycje minimum:");
for(i=0 ; i<c ; i++) {
printf("%i ", tablica_minimum[i]);
}
}
I teraz, przechodzę do meritum mojej udręki. Indeksy najmniejszych oraz największych elementów tablicy.
Program odczytuje te indeksy, ale dajmy na to jeżeli podam ciąg: 20 10 5 0, to wyświetla mi indeksy minimum jako 0 1 2 3, a powinien tylko 3, bo jest ona najmniejszą podaną liczbą w ciągu. Nie potrafię skonstruować mechanizmu który by sprawdzał w tablicy czy jeżeli pojawiła się jakaś cyfra większa od tej która aktualnie jest najmniejsza to żeby indeks tej większej jakoś wyrzucić a zostawić jedynie tej mniejszej. Liczę na waszą pomoc. Pozdrawiam Serdecznie!