Porównywanie sumy kolejnych par w tablicy

0

Witam, mam pewne zadanie domowe które brzmi następująco:

Napisz program, w którym użytkownik będzie wprowadzać 10 liczb całkowitych, a program będzie zliczać (i wyświetlać) ile jest takich sąsiednich par, że wartość poprzednika była mniejsza od następnika i jeżeli tak jest to dana para będzie wyświetlona.

Oto kod który wymyśliłem do rozwiązania tego zadania, nie wiem co w nim może być nie tak, nie sprawdza warunku w if'ie.
Proszę o pomoc.

Kod programu:

 int tab[10]; 
    for(int i = 0; i < 10; i++){
    	cout << "Wpisz wartosc liczby numer " << i << ": "; 
		cin >> tab[i]; 
     }
     int count = 0; 
     for(int i = 0; i < 9; i++){
	 	if((tab[i] + tab[i+1] ) < (tab[i+1] + tab[i+2])){
	 		count++; 
	 		cout << tab[i] << " + " << tab[i+1] << " < " << tab[i+1] << " + " << tab[i+2] << endl;
	 		cout << "Takich par jest " << count << endl; 
               }
	 }
	 
    
1

Sprawdzasz co innego niż piszesz. Sprawdzasz czy z 3 kolejnych liczb suma 2 poprzednich jest mniejsza niż suma 2 następnych, co jest de facto sprawdzaniem czy pierwsza liczba jest mniejsza niż trzecia. I masz poważny bug, bo
tab[i+2] dla i równe 8 nie istnieje.

1

Nie potrzebujesz do tego tablicy.

Warunek w ifie jest sprawdzany, ale powiedz mi w jaki sposób do porównania pary liczb potrzebujesz znajomości wartości trzech kolejnych liczb?

0

Ja zrozumiałem to tak, że jeśli mam liczby: a,b,c,d to a + b tworzy jedna pare i b+c tworzy druga pare i należy pokazać która poprzednia jest mniejsza od następnej. Rozumiem że według Ciebie powinno być czy a+b jest wieksze od b+c ? (czyt. tab[i]+[tab[i+1] < tab[i+2] + tab[i+3])

0
kq napisał(a):

Nie potrzebujesz do tego tablicy.

Warunek w ifie jest sprawdzany, ale powiedz mi w jaki sposób do porównania pary liczb potrzebujesz znajomości wartości trzech kolejnych liczb?

Sprawdza dwie sąsiadujące ze sobą w całej tablcy. A czemu niby miał bym tablicy nie używać ?

Obecnie program zrobiłem tak, i działa oprócz tego że na końcu wyświetla jakieś dziwne liczby, ale zakładam że to ma związek z tym bugiem więc zaraz dodam jakiegoś if'a

 int tab[10]; 
    for(int i = 0; i < 10; i++){
    	cout << "Wpisz wartosc liczby numer " << i << ": "; 
		cin >> tab[i]; 
     }
     int count = 0; 
     for(int i = 0; i < 9; i++){
	 	if((tab[i] + tab[i+1] ) < (tab[i+1] + tab[i+2])){
	 		count++; 
	 		cout << tab[i] << " + " << tab[i+1] << " < " << tab[i+1] << " + " << tab[i+2] << endl; 
	 	} 
		
	 }
	 cout << "Takich par jest: " << count << endl;
 
2

Wracamy do języka polskiego.

ile jest takich sąsiednich par, że wartość poprzednika była mniejsza od następnika i jeżeli tak jest to dana para będzie wyświetlona.

przez parę rozumiemy zbiór dwuelementowy
przez sąsiednią parę rozumiemy zbiór dwuelementowy, którego elementy sąsiadują ze sobą w jakiś sposób - tutaj chodzi o kolejność ich wprowadzenia
poprzednik - pierwszy (poprzedni) element
następnik - drugi (następny) element
mniejszość - a jest mniejsze od b jeśli a-b < 0

Wobec tego jasnym powinno być, że potrzebujesz sprawdzać każde dwie kolejne wprowadzone liczby i je wyświetlać jeśli spełniają wyżej wymieniony warunek.

A czemu niby miał bym tablicy nie używać ?
A dlaczego miałbyś używać? Tutaj to może nie być duża różnica, ale w przypadku prawdziwych problemów trzymanie nadmiarowych danych znacząco wpływa na wydajność i wymagania sprzętowe.

2

Z opisu ja i @kq zrozumieliśmy, że musisz jedynie sprawdzać, jeśli masz a, b, c, d to czy a < b, b < c, c < d.

0

Ok, macie racje, cały problem w tym że faktycznie źle zrozumiałem treść zadania. Dziękuje wam za pomoc z logiki ;)

oto działający już kod:

 
int tab[10]; 
    for(int i = 0; i < 10; i++){
    	cout << "Wpisz wartosc liczby numer " << i << ": "; 
		cin >> tab[i]; 
     }
     int count = 0; 
     for(int i = 0; i < 9; i++){
	 	if(tab[i] < tab[i+1]){
	 		count++; 
	 		cout << tab[i] << " < " << tab[i+1] << endl; 
	 	} 
		
	 }
	 cout << "Takich par jest: " << count << endl;
4

Nie używaj i++ kiedy możesz użyć ++i. W tym kodzie można wszędzie zastąpić na ++i. Jeżeli nie wypracujesz takiego nawyku to jak przejdziesz na kontenery i iteratory to ci się to zemści.

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