Dynamische Felder in C

Radhad

Erfahrenes Mitglied
Hallo Leute!

Habe ein Problem mit einer Aufgabe die ich lösen muss für die Schule..
Es geht um die Berechnung des Querparitätsbits wo die Ausgabe eine Dualzahl sein soll. Eigentlich kein Problem, nur sollen wir es mit statischen Feldern lösen, aber ich würde gerne die größe des Feldes je nach größe der Dualzahl anpassen. Daher müsste man wohl *wie ich annehme* dynamische Felder benutzen..

Hier erstmal der Code:
Code:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>


void querbit(int dezimalzahl)
{
	int quersumme=0, rest=0, i=0, dezimalrechnen=0;
	
	dezimalrechnen=dezimalzahl;

	for(dezimalrechnen;dezimalzahl>=0;i=i+1)
	{
		dezimalrechnen=dezimalrechnen/2;
	}

	int dualzahl[i];

	do
	{
		dezimalzahl=dezimalzahl/2;
		dualzahl[i]=dezimalzahl;
		i=i+1;
	}
	while(dezimalzahl!=0);

	printf("Die Dualzahl lautet: ");
	for(i;i>=0;i=i-1)
	{
		printf("%d",dualzahl[i]);
	}
}



void main()
{
	int dezimaleingabe=0;
	char nochmal='n', auswahl=0;
	
	printf("Querparitaetsbitberechnung");
	Sleep(4000);
	system("cls");

	do
	{
		printf("Bitte geben Sie die positive Dezimalzahl ein: ");
		scanf("%d",&dezimaleingabe);
		fflush(stdin);
		system("cls");

		querbit(dezimaleingabe);
	}
	while(nochmal=='j' || nochmal=='J');
}

Ist der komplette Code *vorsichtshalber*.. An der Stelle wo ich das Feld deklariere kommen die Fehler.. Wär echt gut wenn mir jemand erklärt mit Beispiel wie ich daraus ein dynamisches Feld machen kann um das zu erreichen was ich oben beschrieben habe.

PS: Benutze Visual C++ 6.0 wie in der Schule ...
 
Unter C++ gibt es keine variablen Arrays sondern nur sollche, Deren Größe zur Compilezeit schon fest steht. Das heißt, Du muss wohl oder übel folgendes machen:

Code:
int *dualzahl;
dualzahl = new int [i];

Sonst bleibt alles gleich.

MfG

Tobias
 
Re: -

Original geschrieben von Caminus
Du kannst dir doch zur Laufzeit soviel Speicher auf dem Heap reservieren, wie er hergibt. Das was du meinst, bezieht sich auf den Stack.

Arrays liegen aber immer auf dem Stack. Dasher muss der Speicher immer vom Heap geholt werden (wie ich gezeigt habe).

MfG

Tobias
 
-

Mit
Code:
Int * Pointer = new int[500];
Erstellst du dir einen Integer Pointer - liegt auf dem Stack - welcher auf ein Integer-Array auf dem Heap zeigt.
 
das programm hängt sich immer bei der rechnung auf..

Code:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>

void querbit(int dezimalzahl)
{
	int rest=0, i=0;
	int *dualzahl;
	dualzahl = new int [i];
	
	for(dezimalzahl;dezimalzahl!=0;i++)
	{
		rest=dezimalzahl/2;
		dualzahl[i]=rest;
	}
	
	for(i;i>=0;i=i-1)
	{
		printf("%d",dualzahl[i]);
	}
	
}



void main()
{
	int dezimaleingabe=0;
	char nochmal='n', auswahl=0;
	
	printf("Querparitaetsbitberechnung");
	Sleep(3000);
	system("cls");

	do
	{
		printf("Bitte geben Sie die positive Dezimalzahl ein: ");
		scanf("%d",&dezimaleingabe);
		fflush(stdin);
		system("cls");

		querbit(dezimaleingabe);
	}
	while(nochmal=='j' || nochmal=='J');
}
 
hab das problem selber gelöst *g*

Code:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void querbit(int dezimalzahl)
{
	int quersumme=0, rest=0, i=0;
	int dual[100]={0};

	do
	{
		rest=dezimalzahl%2;
		dezimalzahl=dezimalzahl/2;
		
		if(rest==0)
		{
			dual[i]=rest;
		}
		else
		{
			rest=1;
			dual[i]=rest;
		}
		i=i+1;
	}
	while(dezimalzahl!=0);
	
	printf("Die Dualzahl lautet ");
	
	for(i;i>=0;i=i-1)
	{
		printf("%d",dual[i]);
	}
	printf("\n\nWeiter ");
	getch();
	fflush(stdin);
	system("cls");
}



void main()
{
	int dezimal=0;
	char nochmal, auswahl=0, bit=0;
	
	printf("Querparitaetsbitberechnung");
	printf("\nWeiter ");
	getch();
	fflush(stdin);
	system("cls");

	do
	{
		printf("Bitte geben Sie die Dezimalzahl ein: ");
		scanf("%d",&dezimal);
		fflush(stdin);
		system("cls");

		querbit(dezimal);

	
	printf("Wollen Sie eine weitere Schaltung berechnen?\n");
	printf("[J] / [N]: ");
	scanf("%c",&nochmal);
	fflush(stdin);
	system("cls");
	}
	while(nochmal=='j' || nochmal=='J');
}

nochmals danke an alle! bin auf den Fehler selber noch gekommen ;)
und zwar war
Code:
int dual[100]={0};
das problem!
 
Zurück