Przerwanie wpisywania do tablicy.

Przerwanie wpisywania do tablicy.
R0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
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??

Kopiuj
#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;
}
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

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

R0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
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ę.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

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

Kopiuj
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?

R0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
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

Kopiuj
count=count+tab[i]

? Jak inaczej?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

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

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
1
Kopiuj
     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.

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12270
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:

Kopiuj
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).

R0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0

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

Kopiuj
#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;
}
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

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

R0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0

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

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

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

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12270
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.

R0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0

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

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

Dobrze rozumuję?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

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

R0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
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.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
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).

R0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
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;)

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
3

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

Kopiuj
#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;
  }

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.