• 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
151 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,970 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 341 wizyt
pytanie zadane 25 stycznia 2016 w C i C++ przez Alex5 Początkujący (420 p.)
0 głosów
1 odpowiedź 290 wizyt
0 głosów
3 odpowiedzi 336 wizyt
pytanie zadane 13 kwietnia 2017 w C# przez pingwin1993 Użytkownik (570 p.)

92,957 zapytań

141,916 odpowiedzi

321,147 komentarzy

62,287 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...