Archief - [C] Optelling v.e. kolom afdrukken met arrays

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

SDEC

Legacy Member
Hallo,
Ik moet voor school een oefening making in C omtrend werken met arrays en zelfgemaakte functie's.

De oefening luid, "Maak een matrix van de ingegeven getallen (OK), print de uitkomst van elke rij getallen recht af (OK), trek een lijn onder de matrix (OK) en (en hier komt het probleem) Zorg ervoor dat de optelling van elke kolom onder de kolom wordt afgedrukt". Kan iemand me vertellen wat ik fout doe?

De code compileert zonder fouten maar de uitkomsten printen niet af.

Ik het het stuk code waar het probleem zich bevind rood gekeurd.
Dank bij voorbaat.

Code:
#include <stdio.h>
#define AANTAL 12
#define AANTALKOL 3

void leesrij(int[], int);
void drukmatrix(int[], int, int);


int main(void)
{
	int a[AANTAL];

	leesrij(a, AANTAL);
	drukmatrix(a, AANTAL, AANTALKOL);

	return 0;
}

void leesrij(int a[], int b)
{
	for(int i=0; i<AANTAL; i++)
	{
		printf("\nGeef een getal: ");
		scanf("%d", &a[i]);
	}
}

void  drukmatrix(int a[], int b, int c)
{
	printf("\n");
	int som=0;
	for(int i=0; i<b; i++)
	{
		printf("%d\t", a[i]);
		som += a[i];
		if((i+1)%c == 0)
		{
			printf("   |   %d\n", som);
			som = 0;
		}
	}
	printf("\n");
	int keren;
	keren = 11*AANTALKOL;
	for(int i=0; i<keren; i++)
	{
		printf("-");
	}
	printf("\n");
	[COLOR="Red"]for(int i=0; i<AANTALKOL; i++)
	{
		int somkol=0;
		for(int i=0; i<AANTAL; i+AANTALKOL) somkol += a[i];
		printf("%d\t", somkol);
	}[/COLOR]
	printf("\n");
}

Voorbeeld:
72165530.png

theforce

Legacy Member
Ik heb het eens even getest in Code::Blocks en aangepast zodat het wel werkt.

De rode code heb ik aangepast naar:

Code:
[COLOR="Red"]
for(i = 0; i < AANTALKOL; i++)
{
	int j, somkol = 0;
	for(j = i; j < AANTAL; j += AANTALKOL)
            somkol += a[j];
		
        printf("%d\t", somkol);
}
[/COLOR]

In de binnenste forlus moet je dus een andere teller gebruiken i.p.v. i, omdat anders de waarde van i in de buitenste forlus ook aangepast wordt.

Let ook op de += bij de update van de binnenste forlus (j += AANTALKOL). Bij jouw stond er alleen een + en zo gebeurt er eigenlijk niets met je teller. Jouw programma zat daar dus in een oneindige lus.

Fraggie

Legacy Member
Even terzijde, zoals theforce als aangegeven heeft, doe je er best aan om je variabelen buiten je for lus te declareren. De originele code geeft op mijn compiler 9 errors.

Tyfius

Legacy Member
Bwa, we zijn 2010. Ze mogen die -std=c99 wel standaard maken.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan