• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie z odc. 11 Znajdowanie liczby najbliższej do średniej.

VPS Starter Arubacloud
+1 głos
688 wizyt
pytanie zadane 4 sierpnia 2016 w C i C++ przez adrian313 Bywalec (2,850 p.)

Witam, rozwiązanie zadania domowego z odc. 11 wyszło mi tak:

float suma=0, srednia=0, szukaj=0, zmienne[1][5]={0};

int main()
{
    cout << "Podaj 5 liczb odzielajac je spacja:" << endl;

    for (int i=0; i<5; ++i)  //pobieranie zmiennych
    {
        cin  >> zmienne[0][i];
        suma += zmienne[0][i];
    }

    srednia = suma / 5;                          // srednia z pobranych zmiennych
    cout <<"Srednia to: "<< srednia<<endl;      // tutaj podglad na srednia

    for (int i=0; i<5; ++i)
    {
        zmienne[1][i]=fabs(zmienne[0][i]-srednia);      //tu powinienem uzyskaac wartosc bezwgledna z roznicy
    }

    szukaj=zmienne[1][0];                           //tutaj powinieni szukac najmniejszej liczby
    if (zmienne[1][1]<szukaj) szukaj=zmienne[1][1];
    if (zmienne[1][2]<szukaj) szukaj=zmienne[1][2];
    if (zmienne[1][3]<szukaj) szukaj=zmienne[1][3];
    if (zmienne[1][4]<szukaj) szukaj=zmienne[1][4];

    if      (szukaj==zmienne[1][0]) szukaj=zmienne[0][0];  //podmienia liczby w tablicy aby pokazac prawdziwy wynik
    else if (szukaj==zmienne[1][1]) szukaj=zmienne[0][1];
    else if (szukaj==zmienne[1][2]) szukaj=zmienne[0][2];
    else if (szukaj==zmienne[1][3]) szukaj=zmienne[0][3];
    else if (szukaj==zmienne[1][4]) szukaj=zmienne[0][4];

    cout <<endl<<"Liczba najblizsza sredniej to: "<<szukaj;

    getchar();
    getchar();
    system("cls");

I parę moich pytań: jak deklarowałem wielkość tablicy: zmienne[1][4] - co zwracało błędne wyniki przy ostatniej zmiennej, przy większej tablicy (zmienne[1][5]) problem znika, nie wiem czemu?

Próbowałem linię :

  szukaj=zmienne[1][0];                           //tutaj powinieni szukac najmniejszej liczby
    if (zmienne[1][1]<szukaj) szukaj=zmienne[1][1];
    if (zmienne[1][2]<szukaj) szukaj=zmienne[1][2];
    if (zmienne[1][3]<szukaj) szukaj=zmienne[1][3];
    if (zmienne[1][4]<szukaj) szukaj=zmienne[1][4];

zamknąć w  takiej o to pętli, ale wtedy program nie działał poprawnie:

 for (int i=0; i<5;  ++i)
        {
        szukaj=zmienne[1][i];                        
        if (zmienne[1][i+1]<szukaj) szukaj=zmienne[1][i+1];
        }

I ostatnie jak całość zamknąłem w pętli while(true) dla pierwszego wprowadzenia zmiennych działał poprawnie dla kolejnych już nie.

1 odpowiedź

+1 głos
odpowiedź 4 sierpnia 2016 przez mrcnsct Nałogowiec (36,390 p.)
wybrane 5 sierpnia 2016 przez adrian313
 
Najlepsza
float zmienne[1][5]. Zrobiłeś tu tablicę dwuwymiarową, z jednym wierszem i pięcioma kolumnami, czyli tak jakby tablicę jednowymiarową pięcioelementową. W tablicach elementy są indeksowane od 0, czyli nie możesz zapisać nic do np. zmienne[1][1], bo nie ma takiego elementu. W tym wypadku w pierwszym nawiasie kwadratowym może być tylko 0, czyli zmienne[0][n], gdzie n to cyfra od 0 do 4 (w sumie 5 elementów). Tablica float tab[5], ma 5 elementów o indeksach 0,1,2,3 i 4. Dlatego były złe wyniki przy zmienne[0][4], gdy zrobiłeś tablicę zmienne[1][4]. Tablica float tab[4] ma elementy o indeksach 0,1,2,3, nie ma elementu o indeksie 4. Twoja tablica float zmienne[1][5] ma tylko takie elementy zmienne[0][0], zmienne[0][1], zmienne[0][2], zmienne[0][3] i zmienne[0][4]. Nie jest Ci potrzebna tablica dwuwymiarowa, aby wykonać to zadanie.

Podobne pytania

0 głosów
1 odpowiedź 294 wizyt
0 głosów
2 odpowiedzi 406 wizyt
0 głosów
2 odpowiedzi 794 wizyt
pytanie zadane 19 lipca 2018 w C i C++ przez Nowacx02 Obywatel (1,060 p.)

92,834 zapytań

141,778 odpowiedzi

320,826 komentarzy

62,164 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...