Buchstaben sortieren

C_Boy

Mitglied
Hi,

ich hab ein Programm geschrieben das die zufälligen Buchstaben in die 1. File und die sortierten Buchstaben in die 2. File schreibt.

Nun ist die Aufgabenstellung:
Lass diesen Wert als Parameter nach dem Dateinamen angeben:
fileio002.c.exe 123456
für 123456 Zeichen.
fileio002.c.exe 12
für 12 Zeichen.

Dazu noch die Stichwörter:
malloc, argc, argv

UND:
Im Augenblick hat man MAX_ANZAHL Zeichen.
Verzichte auf MAX_ANZAHL. Verzichte auf eine Höchstgrenze.
Lies den Wert für die Anzahl ein.
Fang damit an, das du sort() die Anzahl der Zeichen mit übergibst.

Ich vesteh die Aufgabenstellung übhaupt nicht. Ist sie vielleicht zu schwierig?
Versucht bitte mir die zu erklären bzw. habt ihr ne leichtere im Bezug zum unterem Programm?

Programm:
C++:
#include <stdio.h>
#include <stdlib.h>

#define MAX_ANZAHL 10

void sort(char zufall[]);
void sort(char zufall[])
{
  int x;
	int i;
	int hilf;

	for(x=0; x<MAX_ANZAHL; x++)
	{
	  for(i=0; i<MAX_ANZAHL-1; i++)
		{
		  if(zufall[i+1] < zufall[i])
			{
			  hilf=zufall[i];
				zufall[i]=zufall[i+1];
				zufall[i+1]=hilf;
			}
		}
	}
}

int main()
{
	char zufall[MAX_ANZAHL];
	int x;
	FILE * zufallbuch=NULL;
	FILE * alphabet=NULL;

	srand (time (NULL));

	zufallbuch=fopen("zufall.csv","w");
	for(x=0; x<MAX_ANZAHL; x++)
	{  
		zufall[x] = rand()%('Z'-'A') + 'A';
		printf("zufall[%d] ; %c\n",x,zufall[x]); 
		fprintf(zufallbuch,"zufall[%d] ; %c\n",x,zufall[x]);
	}
	fclose(zufallbuch);

	printf("\n\n");

	alphabet=fopen("alpha.csv","w");
	sort(zufall);

	for(x=0; x<MAX_ANZAHL; x++)
	{  
		printf("zufall[%d] ; %c\n",x,zufall[x]); 
		fprintf(alphabet,"zufall[%d] ; %c\n",x,zufall[x]); 
	}
	fclose(alphabet);

	return (0);
}
 
Hallo C_Boy,

Die Grundidee der Aufgabe lässt sich eigentlich sehr leicht zusammenfassen:
Dein Programm soll nicht mehr eine fixe Anzahl (MAX_ANZAHL) Zeichen verarbeiten sondern beliebig viele.

Wie viele verarbeitet werden sollen kann man dem Programm in der Kommandozeile mitteilen als ersten Parameter. Da sind auch die zwei ersten Hinweise: argc und argv. Wofür diese stehen und was man damit machen kann siehst du zum Beispiel hier.

Dadurch kannst du dann schauen wie viele Zeichen verarbeitet werden sollen. Anstatt nun ein Array fixer Grösse zu erstellen kannst du malloc verwenden (und später dann free) um genügend Speicher für so viele Zeichen zu allozieren (betrifft in deinem geposteten Code Zeile 29). Anschliessend muss natürlich nun auch noch sort wissen, wie viele Zeichen es verarbeiten soll (bisher wird ja MAX_ANZAHL verwendet). Gemäss Aufgabenstellung soll die Grösse des Arrays via eines zusätzlichen Parameters an sort übergeben werden.

Gruss
Muepe
 
Zurück