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

Liczba najblizej sredniej - Zwrócenie liczby o mniejszym indeksie

Object Storage Arubacloud
0 głosów
216 wizyt
pytanie zadane 7 marca 2019 w C i C++ przez myku18 Nowicjusz (210 p.)
edycja 7 marca 2019 przez myku18

Witam mam problem z poniższym zadaniem, a raczej jego czescią. Wydaje sie działać w porządku lecz mam problem z drugim warunkiem tzn zwrocenie liczby z mniejszym indeksem jesli z warunku wyzej wyjdze ze jest wiecej takich liczb ktore są "oddalone" od sredniej o taka samą wartosc. Próbowalem uzyc tablicy dynam(vector) zeby dodac wczesniejszy wynik pushbackiem i potem te wyniki jakos porownac ale mi nie poszło xD wiec zwracam sie do was o pomoc, jakby ktos podusnal jakis pomysl albo rozwiazal to swoim sposobem bylbym bardzo wdzieczny angel

Napisać funkcję, która przyjmuje jako parametry tablicę liczb całkowitych i jej rozmiar oraz zwraca indeks elementu o wartości najbardziej zbliżonej do wartości średniej arytmetycznej elementów tablicy. Jeżeli istnieje kilka takich elementów należy zwrócić najmniejszy ze znalezionych indeksów.

//============================================================================
// Name        : test.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <cmath>

using namespace std;

void zad1(int tab[],int rozmiar)
{
	float suma=0,srednia,m[2];
	int n=0;
	for(int i=0;i<rozmiar;i++)
	{
		suma+=tab[i];
	}
	srednia=suma/rozmiar;
	cout<<"srednia: "<<srednia<<endl;

	tab[0]=m[0];
	
	for(int i=0;i<rozmiar;i++)
	{
		if(abs(srednia-tab[i])<abs(srednia-m[0]))
		{
			m[0]=tab[i];
            n=i;
		}
	}
	cout<<"liczba najblizszej sredniej to: "<<m[0]<<endl;
	cout<<"indeks liczby: "<<n<<endl;

}
int main() {
	int liczby[]={1,2,3,4,5};
	zad1(liczby,5);
	return 0;

}

 

2 odpowiedzi

+1 głos
odpowiedź 8 marca 2019 przez Mateusz Pawlak Użytkownik (960 p.)
edycja 8 marca 2019 przez Mateusz Pawlak
Jak dobrze zrozumiałem to masz znaleźć najmniejszy indeks nie najbliższy  wystarczy zrobić tak:

Pisze z telefonu to kod może wyglądać brzydo

For(int i =0 ; i < rozmiar ; i++)

{

    IF (m == tab[i]   

       {

              // zapisać gdzieś wartość " i "

              Break;

       }

}

Wtedy masz najmniejszy indeks liczby najbliższej srwdniej
0 głosów
odpowiedź 7 marca 2019 przez criss Mędrzec (172,590 p.)
Nie inicjalizujesz tablicy m w związku z czym tab[0] dostaje śmieciową wartość. I nigdzie nie używasz m[1], nie wiem po co ci ta tablica.

A poza tym przecież jest tak jak być powinno. Nadpisujesz m[0] tylko jeśli dystans do średniej jest mniejszy więc w przypadku gdy dystans jest taki sam to m[0] zostaje jak było. Tj. dostajesz liczbę o mniejszym indeksie w przypadku gdy jest wiele liczb o takim wamym dystansie do średniej.

Tylko nic nie robisz ze zmienną  n więc zawsze ci wypisze że to jest indeks 0.
komentarz 7 marca 2019 przez myku18 Nowicjusz (210 p.)
no wlasnie o to chodzi ze tak sie nie dzieje, nie wiem czemu bo  np biorąc liczby {4,5} gdzie srednia to 4,5 i obie sa oddalone o 0,5 to zwraca mi liczbe 5 :/  a no z ta tablica m to wiem, zapomnialem pozmieniac bo cos próbowalem wymyslec zeby zapisac w m[1] ten drugi wynik ale koncowo to usunalem :c

Podobne pytania

0 głosów
2 odpowiedzi 504 wizyt
+1 głos
1 odpowiedź 338 wizyt
pytanie zadane 8 sierpnia 2016 w C i C++ przez Netreih Nowicjusz (130 p.)

92,568 zapytań

141,422 odpowiedzi

319,642 komentarzy

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

...