• 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

42 Warsaw Coding Academy
0 głosów
267 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 742 wizyt
+1 głos
1 odpowiedź 430 wizyt
pytanie zadane 8 sierpnia 2016 w C i C++ przez Netreih Nowicjusz (130 p.)

93,385 zapytań

142,384 odpowiedzi

322,540 komentarzy

62,745 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...