Przerwanie wpisywania do tablicy.

0

Witam, mam taki problem, a mianowicie co zrobić, aby mój program sumował liczby wpisane do tablicy, ale, kiedy wpiszę zero zatrzymał się i zsumował te liczby, które zostały wpisane aż do momentu wpisania zera. Wszystko niby dobrze, tylko program wpisuje mi po przerwaniu jakieś śmieci i je później też sumuje, byc może tak ma być, ale jak to zrobić, żeby dodawał tylko te wpisane??

#include<stdio.h>

main()
{
	int i, tab[10], suma=0;
	printf("Podaj liczby:\n");
	for(i=0;i<10;i++)
	{
		scanf("%d", &tab[i]);
		if(tab[i]==0)break;
	}
		for(i=0;i<10;i++)
	{
	printf("indeks tablicy [%d]=%d\n", i, tab[i]);
	suma+=tab[i];
	printf("%d", suma);
	}
	
	return 0;
}
1

No chyba wypadałoby zapisać do osobnej zmiennej, ile liczb wczytałeś, nie sądzisz?

0

Szczerze mówiąc, to jestem na poziomie bardzo początkowym, dlatego też proszę o pomoc, przecież to ode mnie zależy kiedy ja wpiszę "0" czyli ode mnie też zależy ile indeksów tablicy wypełnię.

0

No i co z tego? Umiejętności programowania nie mają tutaj nic do rzeczy - pomyśl na logikę.
Masz pętlę:

for(i=0;i<10;i++)
    {
        scanf("%d", &tab[i]);
        if(tab[i]==0)break;
    }

Zakładam, że to Ty napisałeś i rozumiesz każdy jej fragment, zatem: jak, tworząc dodatkową zmienną w programie (przed tą pętlą, nie wewnątrz niej - nazwijmy tę zmienną count, typu int), chciałbyś zliczać wpisane liczby?

0

Najpierw ją dodam do programu poza pętlą, i od razu ją wyzeruję tak jak w tym co napisałem, dalej tym samym sposobem

count=count+tab[i]

? Jak inaczej?

0

Na początek to chcesz znać ilość tych liczb, a nie ich sumę, więc na pewno nie +tab[i].

1
     for(i=0;i<10;i++)
    {
        printf("indeks tablicy [%d]=%d\n", i, tab[i]);
        suma+=tab[i];

Sumujesz zawsze 10 liczb w tej tablicy, nieważne ile wczytałeś. A że nie zawsze wczytałeś wszystkie 10, to dostajesz śmieci.

1

@radi0071 - skoro pętla ma być dynamicznie przerywana, to lepszym rozwiązaniem będzie skorzystanie z pętli do while; Automatycznie ilością wprowadzonych liczb będzie licznik pętli, który będziesz mógł wykorzystać w następnej pętli sumującej podane liczby;

Poniżej rozwiązanie w Pascalu - w C++ spróbuj napisać sam:

var
  arrNumbers: array [0 .. 9] of Integer;
  intCounter: Integer = 0;
  intSum: Integer = 0;
  intNumber: Integer;
begin
  repeat
    ReadLn(intNumber);
    arrNumbers[intCounter] := intNumber;
    Inc(intCounter);
  until intNumber = 0;
//until (intNumber = 0) or (intCounter > 9); - blokada wykroczenia poza zakres tablicy

  repeat
    Dec(intCounter);
    Inc(intSum, arrNumbers[intCounter]);
  until intCounter = 0;

  WriteLn('Sum: ', intSum);
  ReadLn;
end.

Macierz będzie "zero-terminated"; Dodatkowo, możesz zabezpieczyć program przed wprowadzeniem zbyt dużej ilości liczb (w podanym kodzie to zakomentowany warunek).

0

Dobra po przerobieniu działa, wrzuciłem sumowanie pod break i poszło, mam nadzieję, że nie jest to zły pomysł.

#include<stdio.h>

main()
{
	int i, tab[10], suma=0;
	printf("Podaj liczby:\n");
	for(i=0;i<10;i++)
	{
		scanf("%d", &tab[i]);
		if(tab[i]==0)break;
		suma+=tab[i];
	}
		for(i=0;i<10;i++)
	{
	printf("indeks tablicy [%d]=%d\n", i, tab[i]);
	
	printf("%d", suma);
	}
	
	return 0;
}
0

Programowanie przez permutacje to zła technika...
Poza tym w dalszym ciągu źle masz wypisywane wartości w drugiej pętli.

0

Może i niedobra, ale skuteczna, poza tym patrzę i nie mam pojęcia co jest źle w drugiej pętli.;/

0

1.Wypisujesz sumę co iterację, po kiego?
2.Jak wpiszesz np.trzy liczby, pętla i tak wyświetli całą dziesięcioelementową tablicę.

0

Warunek w pętli służącej do wprowadzania liczb jest niepotrzebny - zobacz na mój przykład i pomyśl jak to można zrobić na dwóch pętlach do while; Nie ma co kombinować i dokładać warunków, skoro wszystkim może sterować warunek pętli.

0

Sorry, ale z pascala to kompletnie nie znam, ale tak na chłopski rozum:

do
{
twórz tablice
}
while(kolejny element tablicy!=0)

Dobrze rozumuję?

0

Chcesz tworzyć nową tablicę co iterację? Po co?

0

Zaczynając od początku, chcę stworzyć jedną tablicę, n max 10cio elementową, do momentu wpisania zera. Jeśli pod 3cim indeksem wpiszę 0 to tablica ma 2 elementy itd, następnie chciałbym wypisać tą tablicę i sumę jej wszystkich elementów.

3

No, coś takiego: http://ideone.com/O6KTOn :P


Jeśli pod 3cim indeksem wpiszę 0 to tablica ma 2 elementy itd

Wcale nie - jeżeli wpiszesz pod trzecim indeksem zero, to tablica ma trzy elementy. Odpowiednio o indeksach 0, 1 i 2, (a trzeci będzie zerem).

0

Masz rację, tablica będzie 3 elementowa, ale nie zmieni to wyniku sumy. Temat mi się wydaje wyjaśniony w stu procentach. dzięki;)

3

Może jeszcze krótsza alternatywa tego co podał @Patryk27, optymalizator prawdopodobnie i tak sprowadzi to do tego samego.

#include <stdio.h>
 
int main()
  {
   int i,tab[10],count=0,sum=0;
   printf("Podaj liczby: ");
   while((count<10)&&(scanf("%d",tab+count)==1)&&tab[count]) sum+=tab[count++];
   printf("suma: %d\n",sum);
   for(i=0;i<count;++i) printf("tab[%d]=%d\n",i,tab[i]);
   return 0;
  }

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