Sumowanie liczb tablicy C++ problem

0

Program ma sumować co 3 liczne tablicy, coś z nim nie tak jestem nowicjusze proszę o wyrozumiałość.

#include <iostream>
using namespace std;
main()
{
	int tab[]={1,3,4,5,6,7,8,3,3,2,4,4,};
	int suma=0;
	for(int i=0; i<= tab[i]-1; i=i+3)
	{suma= suma+tab[i];

	}
cout<< "Suma to" <<suma<<endl;
return 0;	
}
0

Rozwiązaniem problemu powyżej jest operator sizeof.

5

To co napisałeś nie ma sensu bo czemu niby warunek masz i<= tab[i]-1;? Jaki związek ma niby indeks w tablicy i z wartością w tablicy tab[i]? Może chodziło ci tam o liczbę elementów tablicy?

0

Tak to była moja pomyłka z tym tab[i]-1 ale gdy to odpala to działa do pewnego momentu i później nie liczy.
Miałem na myśli zliczenie elementów w tablicy

0

skoro jest pomylka, to nie znaczy ze nie bedzie dzialac. Dziala ale nie poprawnie bo masz zly warunek w petli (ten Twoj blad)

jak go poprawisz bedzie ok

0

Jaki ma być warunek dla tablicy n-elementowej w pętli for.

0

mniejsze od N

0
#include <iostream>
using namespace std;
main()
{
	int n;
	int tab[n]={1,3,4,5,6,7,8,3,3,2,4,4,};
	int suma=0;
	for(int i=0; i<n; i=i+3)
	{suma= suma+tab[i];

	}
cout<< "Suma to" <<suma<<endl;
return 0;	
}
``` Teraz działa poprawnie z góry dzięki 
0

nie dziala poprawnie, jaka wartosc ma wedlug Ciebie n?

bo na pewno nie taka jak rozmiar tablicy

0

Szczerze myślałem ze N przyjmie wartość tablicy. Byłbyś w stanie poprawić ten kod bo już się pogubiłem w tym.

3
int tab[]={1,3,4,5,6,7,8,3,3,2,4,4};
int n = sizeof(tab) / sizeof(tab[0])
0

Wielkie dzięki, tylko ciekawi mnie dlaczego ta moje wersja również działała jest to nie poprawne.

1

A dlaczego uważasz, że miałaby działać? Popatrz na kolejne linijki:

int n;
int tab[n]={1,3,4,5,6,7,8,3,3,2,4,4,};
for(int i=0; i<n; i=i+3)

Deklarujesz n typu int, nic do niej nie przypisując. Kolejna linijka jest błędna, nie tak się tworzy tablice — kompilator Ci tego nie powinien przełknąć, bo jeśli podaje się rozmiar tablicy, to musi to być constexpr (ale kompilatory mają czasem rozszerzenia do robienia niezgodnego ze standardem VLA rodem z C); ale nawet gdyby, to to nijak nie powoduje zmiany wartości n. I potem do tej nie‑wartości porównujesz w warunku pętli.

0

Althorion, jeśli to Dev to on przełyka takie rzeczy co się fizjologom nie śniły ;-]

Myślę, że kolega ma problem ze zrozumieniem pętli for, poniżej jest w miarę przystępnie wyjaśnione działanie pętli for:
link

0

Można jeszcze krócej:

#include <iostream>
using namespace std;

int main()
{
    int array[] = {0,1,2,3,4,5,6,7,8,9}, sum = 0;
    unsigned size = sizeof(array) / sizeof(array[0]);
    for(unsigned i = 0; i < size; sum += array[i], i += 3);
    cout << sum << "\n";
    return 0;
}
0

i za kazdym razem liczyc sizeof?
sizeof(array) / sizeof(array[0])

i czemu +3?

I ENDL? no no no...

3
piterh napisał(a):

Wielkie dzięki, tylko ciekawi mnie dlaczego ta moje wersja również działała jest to nie poprawne.

Bo masz undefined behaviour wynikający z odczytu niezainicjalizowanej zmiennej n. W tym przypadku każde działanie programu jest możliwe, również takie które się wydaje poprawne.

0

Dzięki panowie za pomoc uporałem sie z tym mam jescze pytanie jak zwrocic index pierwszego wiekszego od min wyklepałem taki kod i nie wiem co dalej

#include <iostream>
using namespace std;
main()
{
	float tab[]={3.33,3.21,6.82,8,};
	int n = sizeof(tab) / sizeof(tab[0]);
	float max, min;
	max=tab[0];
	min=tab[0];
		for(int i=0; i<n; i++)
	{
		if(tab[i]<min)
		min=tab[i];
}
		cout<<"Minimum to "<<min<<endl;
			for(int i=0; i<n; i++)
			
			if((tab[i] /min) >=2) 
	 		
		 cout<<"Wiekszy o polowe to "<<tab[i]<<endl;
return 0;	
} 
0

ten kod jest nieczytelny. Sformatuj kod odpowiednio tak by czlowiek potrafil to odczytac

1 użytkowników online, w tym zalogowanych: 0, gości: 1