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

C++ program porównujący liczby

Object Storage Arubacloud
0 głosów
1,224 wizyt
pytanie zadane 11 sierpnia 2018 w C i C++ przez XezolPL Obywatel (1,530 p.)

Witam, próbuje napisać program liczący średnią i wypisujący liczbe najbliżej średniej.

1.Dlaczego nie działa, co jest nie tak?

2.Jak zrobić by pokazywało 2 liczby jeśli są tak samo blisko średniej np 3,5 i 6,5 dla sredniej 5?

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main()
{
float suma=0;
int x;
float tab[x];
cout << "Ile liczb chcesz podać: ";
cin >> x;

for (int i=0;  i<x; i++)
{
cout<< "Podaj liczbe: ";
cin>> tab[i];
tab[i] += suma;
}

float srednia;
srednia= suma/x;
cout << "Srednia wynosi:  " << srednia<<endl;
float naj;
naj=tab[0];
for (int i=0; i<x;)
{

if (abs(tab[i]-srednia)<= naj)
{
tab[i]=naj;
}
i++;
}
cout <<"Liczba najblizsza sredniej to: " << naj ;


return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 11 sierpnia 2018 przez k222 Nałogowiec (30,150 p.)
Błąd masz już na początku, bo najpierw tworzysz tablicę o wielkości x a potem podajesz ile to jest x - bez sensu (linijki 8-11), a w linijce 30 powinno być odwrotnie - maj = tab[i]
komentarz 11 sierpnia 2018 przez XezolPL Obywatel (1,530 p.)
Ok, poprawiłem ale nadal niestety nie działa, dałem sobie w linijce 18 cout << suma; i pokazuje cały czas zero czyli suma mi się nie liczy. Może przez operator +=?
+1 głos
odpowiedź 11 sierpnia 2018 przez AleX1010 Obywatel (1,320 p.)

Witaj!

Po pierwsze to rozmiar tablicy musi być znany w momencie kompilacji programu u ciebie tak nie jest, bo chcesz, aby użytkownik wprowadzał jej ,,rozmiar" poprzez ilość liczb, z których chce wyciągnąć średnią. Najlepiej byłoby tutaj użyć dynamicznej tablicy.

Drugi problem pojawia się, gdy w pierwszej pętli for chcesz dodać do sumy wpisaną przez użytkownika liczbę. W C++ operator skróconego dodawania wygląda tak: x += y. Do X dodajesz Y nie odwrotnie :) U ciebie wygląda to tak, że do i - tego elementu tablicy dodajesz sumę czyli w twoim przypadku 0, bo nie było w programie okazji, żeby zmienić jej wartość.

To tyle jeżeli chodzi o pierwsze pytanie :)

komentarz 11 sierpnia 2018 przez XezolPL Obywatel (1,530 p.)
racja, dziękuje, nie zauważyłem tego, sumowanie już działa teraz tylko to porównywanie z ifa nie działa
komentarz 11 sierpnia 2018 przez XezolPL Obywatel (1,530 p.)
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main()
{
float suma=0;
int x;


cout << "Ile liczb chcesz podac: ";
cin >> x;
float tab[x];

for (int i=0;  i<x; i++)
{
cout<< "Podaj liczbe: ";
cin>> tab[i];
 suma +=tab[i] ;
cout << suma;
}

float srednia;
srednia= suma/x;
cout << "Srednia wynosi:  " << srednia<<endl;
float naj;
naj=tab[0];
for (int i=0; i<x;i++)
{

if (abs(tab[i]-srednia)<= naj)
{
naj=tab[i];
}

else continue;

}
cout <<"Liczba najblizsza sredniej to: " << naj ;


return 0;
}

 

komentarz 11 sierpnia 2018 przez XezolPL Obywatel (1,530 p.)

@AleX1010, myslalem ze continue by pomoglo ale nadal wpisując 1 2 3 4 5 srednia wychoddzi 3 a liczba najblizsza sredniej 5 :/

komentarz 11 sierpnia 2018 przez AleX1010 Obywatel (1,320 p.)

Z tego co wyczytałem w dokumentacji wynika, że funkcja abs może przyjąć jako parametr tylko typ int lub long int.

komentarz 12 sierpnia 2018 przez maciek6001 Użytkownik (660 p.)
Spróbuj użyć funkcji fabs.
komentarz 12 sierpnia 2018 przez XezolPL Obywatel (1,530 p.)

dodałem biblioteke 

#include <math.h>

zamieniłem na fabs lecz nadal w liczbie najbliższej średniej pojkazuje ostatnią liczbę, nie mam już pomysłu :/

komentarz 12 sierpnia 2018 przez maciek6001 Użytkownik (660 p.)
Możesz zrobić drugiego ifa analogicznego ale odwrotnie. Wtedy wynikiem bedzie ta druga liczba. Wtedy sprawdzasz czy wynikiem tych dwoch ifow sa rozne liczby jesli tak to wyświetlasz, jesli jedna to wyswietlasz jedna.

Podobne pytania

0 głosów
0 odpowiedzi 244 wizyt
+1 głos
0 odpowiedzi 183 wizyt
0 głosów
1 odpowiedź 956 wizyt
pytanie zadane 27 sierpnia 2017 w C i C++ przez fipooo Bywalec (2,880 p.)

92,567 zapytań

141,420 odpowiedzi

319,616 komentarzy

61,953 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!

...