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

IF vs warunek logiczny zbudowany z elementu tablicy - problem

VPS Starter Arubacloud
0 głosów
132 wizyt
pytanie zadane 21 października 2016 w C i C++ przez Tinsonu Początkujący (280 p.)

Witam

Mam problem z funkcją 'if' (proszę o wyrozumiałość z programowaniem mam styczność od 1,5 tygodnia). 

W kodzie jak poniżej. Gdy do funkcji logicznej wstawię warunek, gdzie jego elementem jest tablica 'tab_od', funkcja 'if' nie działa (nie ma co prawda komunikatu błędu, jednak funkcja nie działa). Przekopałem się już przez wszystko w 'googlach' i nie wiem dlaczego warunek z użyciem tablicy nie działa, natomiast wstawienie w tym miejscu dowolnej innej zmiennej np. if (suma>0) powoduje, że 'if' działa, to jest wyświetla komunikat "Najblizej..." 

#include <iostream>
#include <windows.h>
#include <cstdlib>

using namespace std;

float tab[5], tab_od[5];
float suma=0,sr,mini;

int main()
{
    cout << "Podaj 5 liczb " << endl;
   
    for (int i=0;i<5;i++)
     {
      cin>>tab[i];
      suma+=tab[i];
     }
     sr=suma/5;
     
    for (int i=0;i<5;i++)  tab_od[i]=tab[i]-sr;
    
    mini=tab[0];
    if (tab_od[1]>0) // warunek w tym miejscu był oczywiście rozbudowany ale nawet zmniejszony do takiego minimum nie działa 
        cout<<"Najblizej sredniej jest ";


    return 0;
}

 

1
komentarz 21 października 2016 przez Szahid Pasjonat (20,930 p.)
Jeżeli jakaś liczba jest równa średniej to wtedy ona jest najnliżej średniej dlatego warunek w ifue musi być if (tab_od[1]>=0)

Wtedy działa. Ale ten program i tak nie będzie spełniał swojej funkcji. Musisz go lepiej przemyśleć

3 odpowiedzi

0 głosów
odpowiedź 21 października 2016 przez hmyk Użytkownik (960 p.)

Warunek jak najbardziej działa. Pytanie jest jakie wprowadzasz liczby?

Twoje tab_od[1] może być przecież mniejsze od zera, wtedy 'najbliżej średniej jest...' w ogóle się nie wyświetli. W linii 21 odejmujesz średnią liczb od podanych liczb.

Daj na wejście np. 50,1000, 20, 20, 20 i warunek zostanie spełniony.

0 głosów
odpowiedź 21 października 2016 przez Piotr Batko Stary wyjadacz (13,190 p.)
Mógłbyś podać pełny warunek, jaki miałeś wcześniej i nie działał? Fajnie, gdybyś jeszcze podał te pięć liczb które wpisywałeś przy testach.
0 głosów
odpowiedź 21 października 2016 przez Tinsonu Początkujący (280 p.)
Program jak widać jest nieskończony i dotarł do miejsca ustalenia która z liczb jest najbliżej średniej.

Wasze odpowiedzi oczywiście mi pomogły. Program testowałem na komórce tablicy w której liczba była dokładnie równa średniej, czyli różnica między średnią a liczbą musiał być ZERO (nie wiem dlaczego ale nie zwróciłem na to uwagi) stąd mój kłopot (tester ze mnie marny).

Dziękuję za pomoc :-)))

Przepraszam za zaśmiecanie forum tak banalnymi zapytaniami  - jeśli moderator uzna za stosowne to wątek można usunąć.
komentarz 21 października 2016 przez draghan VIP (106,230 p.)

Przepraszam za zaśmiecanie forum tak banalnymi zapytaniami  - jeśli moderator uzna za stosowne to wątek można usunąć.

Bez przesady. ;) Problem być może i banalny, ale przynajmniej poprawnie opisany.

Temat zamknij, a jeśli któraś z odpowiedzi naprowadziła Cię na właściwy trop, zaznacz ją jako najlepszą.

Powodzenia w dalszej nauce. :)

komentarz 21 października 2016 przez Tinsonu Początkujący (280 p.)
edycja 21 października 2016 przez Tinsonu

Ok. Oznaczyłem komentarz który mnie 'oświecił' 

Program skończony. Liczy średnią z 5 liczb i określa, która z nich jest najbliższa średniej. Być może część określającą liczbę zbliżoną do średniej można zoptymalizować ale na chwile obecną nie ma takiej wiedzy/umiejętności.

 

#include <iostream>
#include <windows.h>
#include <cstdlib>

using namespace std;

float tab[5], tab_od[5];
float suma=0,sr,mini;

int main()
{
    cout << "Podaj 5 liczb " << endl;

    for (int i=0;i<5;i++)
     {
      cin>>tab[i];
      suma+=tab[i];
     }
     sr=suma/5;

    for (int i=0;i<5;i++)
    {
        tab_od[i]=tab[i]-sr;
        if (tab_od[i]<0) tab_od[i]=tab_od[i]*(-1);
    }

    if ((tab_od[0]<=tab_od[1])&&(tab_od[0]<=tab_od[2])&&(tab_od[0]<=tab_od[3])&&(tab_od[0]<=tab_od[4]))
        {
            mini=tab[0];
            cout<<"najblizsza sredniej jest "<<mini<<endl;
        }
    if ((tab_od[1]<=tab_od[0])&&(tab_od[1]<=tab_od[2])&&(tab_od[1]<=tab_od[3])&&(tab_od[1]<=tab_od[4]))
        {
            mini=tab[1];
            cout<<"najblizsza sredniej jest "<<mini<<endl;
        }

     if ((tab_od[2]<=tab_od[0])&&(tab_od[2]<=tab_od[1])&&(tab_od[2]<=tab_od[3])&&(tab_od[2]<=tab_od[4]))
            {
            mini=tab[2];
            cout<<"najblizsza sredniej jest "<<mini<<endl;
            }

      if ((tab_od[3]<=tab_od[0])&&(tab_od[3]<=tab_od[1])&&(tab_od[3]<=tab_od[2])&&(tab_od[2]<=tab_od[4]))
            {
                mini=tab[3];
                cout<<"najblizsza sredniej jest "<<mini<<endl;
            }

       if ((tab_od[4]<=tab_od[0])&&(tab_od[4]<=tab_od[1])&&(tab_od[4]<=tab_od[2])&&(tab_od[4]<=tab_od[3]))
                {
                    mini=tab[4];
                    cout<<"najblizsza sredniej jest "<<mini<<endl;
                }

                        cout<<"srednia to "<<sr;
    return 0;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 297 wizyt
pytanie zadane 25 stycznia 2016 w C i C++ przez Alex5 Początkujący (420 p.)
0 głosów
1 odpowiedź 187 wizyt
0 głosów
3 odpowiedzi 314 wizyt
pytanie zadane 13 kwietnia 2017 w C# przez pingwin1993 Użytkownik (570 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...