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

Błąd po wpisaniu liczby ujemnej

Object Storage Arubacloud
0 głosów
437 wizyt
pytanie zadane 10 października 2015 w C i C++ przez Armando Obywatel (1,870 p.)
edycja 10 października 2015 przez Armando

Cześć! Program po wpisaniu do niego liczby 0 lub jakiejkolwiek liczby ujemnej wysypuje się. Jaki jest tego powód ? Muszę napisać funkcję, która będzie wyświetlała jedynie liczby dodatnie z liczb wpisanych wcześniej. Chodzi o funkcję i_l_d.

​
#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;
//--------------------------------------
void wpisz_liczby(int b[],int *k)
{
  int i;
  double S;
  system("cls");
  cout<<"Podaj ilosc liczb: "; cin>>*k;
  cout<<"\nWpisz kolejne liczby";
  for(i=0;i<*k;i++)
  {
      cout<<"\na["<<i<<"]="; cin>>b[i];
  }
  S=b[i]/(*k);
  return;
}
//--------------------------------------
void wyswietl_liczby(int b[],int k)
{
    int i;
    system("cls");
    cout<<"Oto liczby zapisane w tablicy\n\n";
    for(i=0;i<k;i++)
    {
        cout<<b[i]<<" ";
    }
    return;
}
//--------------------------------------
void srednia(int b[],int k)
{
    int i; float suma, S; S=0;
    system("cls");
    cout<<"Srednia liczb wynosi : ";
    for(i=0;i<k;i++)
    {
        suma+=b[i];
    }
    S=suma/k;
    cout<<S<<endl;
    return;
}
//--------------------------------------
void i_l_d(int b[],int *k)
{
    int i;
    system("cls");
    cout<<"Liczby dodatnie to : \n\n";
    for(i=0;i<*k;i++)
    {
        if(i<0)
        {
            b[i] -= i;
        }
        cout<<b[i]<<" ";
    }
    return;
}
//--------------------------------------
int main()
{

	char w;

	int a[5000];
	int n;

	do
	{
		system("cls");
		cout<<"Wybierz co chcesz zrobic: ";
		cout<<"\n1. Wpisanie liczb do tablicy - 1";
		cout<<"\n2. Wyswietlenie liczb z tablicy - 2";
		cout<<"\n3. Obliczenie sredniej - 3";
		cout<<"\n4. Wyswietl liczby dodatnie - 4";
		cout<<"\n5. Koniec - 5\n";
		cin>>w;
		switch(w)
		{
			case '1': wpisz_liczby(a,&n); break;
			case '2': wyswietl_liczby(a,n); break;
			case '3': srednia(a,n); break;
			case '4': i_l_d(a,&n); break;
		}
		system("pause");
	} while (w!='5');

	return 0;
}

2 odpowiedzi

+1 głos
odpowiedź 10 października 2015 przez Patrycjerz Mędrzec (192,320 p.)
wybrane 10 października 2015 przez Armando
 
Najlepsza
Ale o jaką średnią ci chodzi: arytmetyczną, geometryczną, ważoną, czy jeszcze o inną?
komentarz 10 października 2015 przez Armando Obywatel (1,870 p.)
O średnią arytmetyczną, sorry za nie uściślenie.
komentarz 10 października 2015 przez Patrycjerz Mędrzec (192,320 p.)
No to jest to banał. Dodajesz wszystkie elementy tablicy i dzielisz taką sumę przez ilość elementów.
komentarz 10 października 2015 przez Armando Obywatel (1,870 p.)
edycja 10 października 2015 przez Armando

Wygląda na to, że już sobie poradziłem :)
 

​

void srednia(int b[],int k)
{
    int i; float suma, S; S=0;
    system("cls");
    cout<<"Srednia liczb wynosi : ";
    for(i=0;i<k;i++)
    {
        suma += b[i];
    }
    S=suma/k;
    cout<<k<<endl;
    return;
}
komentarz 10 października 2015 przez Patrycjerz Mędrzec (192,320 p.)

Masz dwa błędy, tzn. zainicjuj zmienną S zerem, ponieważ w przeciwnym razie będzie zawierać śmieci oraz dodawaj w pętli wartości z b[i], nie b[k].

komentarz 10 października 2015 przez Patrycjerz Mędrzec (192,320 p.)

Ma to wyglądać tak:

void srednia(int b[],int k)
{
    int i; float suma, S; S=0;
    system("cls");
    cout<<"Srednia liczb wynosi : ";
    for(i=0;i<k;i++)
    {
        suma+=b[i];
    }
    S=suma/k;
    cout<<S<<endl;
    return;
}

 

komentarz 10 października 2015 przez Patrycjerz Mędrzec (192,320 p.)

Ehh... nie wiem, czy robisz sobie ze mnie żarty, ale wypisuj S, nie k wink

komentarz 10 października 2015 przez Armando Obywatel (1,870 p.)
Nieważne, przecież powinno być cout<<S<<endl; a nie cout<<k<<endl;...
komentarz 10 października 2015 przez Armando Obywatel (1,870 p.)
Dziękuję bardzo za pomoc, ostatni błąd wyniknął z niedopatrzenia :D
komentarz 10 października 2015 przez Armando Obywatel (1,870 p.)
Mógłbym Cię prosić o pomoc raz jeszcze ? Nowy kod umieściłem w głównym pytaniu.
komentarz 10 października 2015 przez Armando Obywatel (1,870 p.)

Pytania nie było, chyba powinienem odpocząć bo zaczynam robić głupoty haha laugh

komentarz 10 października 2015 przez Patrycjerz Mędrzec (192,320 p.)
for(i=0;i<*k;i++)
{
        if(b[i] > 0)
		std::cout << b[i] << " ";
}

 

komentarz 10 października 2015 przez Armando Obywatel (1,870 p.)

Dzięki wielkie za warunek! Co do tamtego pytania to po prostu wpisywałem wartość ujemną jako ilość liczb do podania. Przerwa chyba dobrze mi zrobi wink

+1 głos
odpowiedź 10 października 2015 przez pierep94 Bywalec (2,720 p.)
Bierzesz petle for, i dodajesz kolejne liczby w tablicy, np suma += liczba[i] albo suma = suma + liczba[i]. U Ciebie zamiast liczba będzie oczywiście nazwa tablicy, w tym wypadku b[i]. W kazdym obiegu petli for do zmiennej suma doda sie kolejna liczba z tablicy. Potem juz tylko dzielisz przez ilość liczb w tablicy, czyli chyba Twoje k.

Podobne pytania

0 głosów
3 odpowiedzi 1,456 wizyt
pytanie zadane 4 sierpnia 2017 w C i C++ przez Artur Hajmowicz Początkujący (340 p.)
0 głosów
1 odpowiedź 1,072 wizyt
pytanie zadane 21 kwietnia 2015 w C i C++ przez niezalogowany
0 głosów
3 odpowiedzi 256 wizyt

92,615 zapytań

141,465 odpowiedzi

319,777 komentarzy

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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...