Was bedeuten die einzelnen Schritte??



  • Hallo!!

    Habe hier ein paar fertige C-Programme, kann aber nicht wirklich was damit anfangen. Bräuchte jemanden, der mir die einzelnen Schritte erklärt.
    Brauche es für mein Studium.

    Wäre sehr dankbar, wenn jemand Zeit und Lust hätte....

    Also erst mal eins:

    #include	<errno.h>
    #include	<math.h>  
    #include	<stdio.h> 
    #include	<stdlib.h>
    #include	<string.h>
    
    #define N 1000 /* Kantenlänge der Bildmatrizen */
    
    const unsigned char	schwarz= 0;
    
    /*-----------------------------------------------------------------------------
     *  Hauptprogramm
     *-----------------------------------------------------------------------------*/
    	int
    main ( int argc, char *argv[] )
    {
    	unsigned char bild1[N][N];  /* Orginalbild */
    	unsigned char bild2[N][N];	/* Zielbild   */
    	unsigned char schwellwert	= 150;
    
    	char magic1, magic2;
    	int	 hoehe, breite;
    	int  maxgrau;
    	int i,j,x,y,zaehler=0;
    	int hilf;
    	char eingabe;
    	int summe;                                /*summenwert der Bildpunkte*/
    
    	/* Eingabe Datei öffben */
    
    	FILE	*infile;									                    /* input-file pointer */
    	char	*infile_file_name = "streifen.pgm";	          	/* input-file name    */
    
    	infile	= fopen ( infile_file_name, "r" );
    	if ( infile==NULL )
    	{
    		fprintf (stderr, "couldn't open file '%s'; %s\n", infile_file_name, strerror (errno) );
    		exit (EXIT_FAILURE);
    	}
    
    	fscanf  ( infile, "%c%c", &magic1, &magic2);   /*Einlesen des Kopfes der Datei*/
    	fscanf  ( infile, "%d%d", &breite, &hoehe );
    	fscanf  ( infile, "%d",  &maxgrau );
    
    	for ( i = 0; i < hoehe; i++)		/*einlesen der Farbwerte des bildes aus der Datei*/
    		for( j = 0; j < breite; j++)
    		{
    			fscanf( infile, "%u", &hilf);
    			bild1[i][j]=(unsigned char)hilf;
    		}
    	fclose ( infile );				          			/* close input file */
    
    	for ( i = 0; i < hoehe; i++)	          	/*Kopie bild1 nach bild2*/
    		for( j = 0; j < breite; j++)
    		{
    
    			bild2[i][j]=bild1[i][j];
    		}
    
    	printf(" Bitte wählen Sie: \n\n");
    	printf(" g - Glättung \n");
    	printf(" i - Invertierung \n");
    	printf(" k - Kantenbildung \n");
    	printf(" s - Schwellwert \n");
    	printf(" \n Auswahl: ");
    
    	eingabe = getchar();
    
    	switch (eingabe)                         /* Schalter - mehrfach Verzweigung */
    	{
    		case 'G': case 'g':                     /*Glättung*/ 
    			printf(" Glätten \n");                    
    
    			for ( i = 1; i < hoehe-1; i++)		/*2 Schleife durchlaufen jeden Bildpunkt*/
    			{
    
    				for( j = 1; j < breite-1; j++)
    				{
    					summe=0;
    					for(x=-1; x<=1; x++)       /*alle 9 Pixel werden durchlaufen*/
    						for(y=-1; y<=1; y++)
    							summe=summe+bild2[i+x][j+y];
    					bild2[i][j]=summe/9;
    
    				}
    			} 
    
    			break;
    
    		case 'I': case 'i':                      /* Fall Invertierung */
    
    			printf(" Invertiert \n");
    			for ( i = 0; i < hoehe; i++)		
    				for( j = 0; j < breite; j++)
    				{
    					hilf=bild2[i][j];
    					bild2[i][j]=maxgrau-hilf;
    				}
    			break;
    
    			/*-----------------------------------------------------------------------------
    			 *  Kantenbildung
    			 *-----------------------------------------------------------------------------*/
    		case 'K': case 'k':                       /* Fall Kantenbildung */
    			printf(" Kantenglätten \n");                    
    
    			/*-----------------------------------------------------------------------------
    			 *  Rand auf schwarz setzen
    			 *-----------------------------------------------------------------------------*/
    			for ( i = 0; i < hoehe; i += 1 )
    				bild2[i][0]	= bild2[i][breite-1]	= 0;
    
    			for ( i = 0; i < breite; i += 1 )
    				bild2[0][i]	= bild2[hoehe-1][i]	= 0;
    
    			/*-----------------------------------------------------------------------------
    			 *  Kantenbildung 
    			 *-----------------------------------------------------------------------------*/
    			for ( i = 1; i < hoehe-1; i++)		/*2 Schleife durchlaufen jeden Bildpunkt*/
    			{
    				for( j = 1; j < breite-1; j++)
    				{
    					summe       = 0;
    					summe       -=    bild1[i-1][j  ];
    					summe       -=    bild1[i+1][j  ];
    					summe       -=    bild1[i  ][j-1];
    					summe       -=    bild1[i  ][j+1];
    					summe       +=  4*bild1[i  ][j  ];
    					bild2[i][j] = summe/9;
    				}
    			} 
    			break;
    
    		case 'S': case 's':                      /* Fall Schwellwert */
    			printf(" Schwellwert \n");
    			for ( i = 0; i < hoehe; i++)		
    				for( j = 0; j < breite; j++)
    				{
    					if(bild2[i][j]< schwellwert)
    						bild2[i][j]=schwarz;
    					else
    						bild2[i][j]=maxgrau;
    				}
    
    			break;
    	}    
    
    	FILE	*outfile;									/* output-file pointer */
    	char	*outfile_file_name = "streifen2.pgm";	/* output-file name    */
    
    	outfile	= fopen ( outfile_file_name, "w" );
    	if ( outfile==NULL )
    	{
    		fprintf (stderr, "couldn't open file '%s'; %s\n", outfile_file_name, strerror (errno) );
    		exit (EXIT_FAILURE);
    	}
    	fprintf(outfile,"%c%c\n", magic1, magic2);   /*Kopf der neuen Bilddatei schreiben*/
    	fprintf(outfile,"%d %d\n", breite, hoehe );
    	fprintf(outfile,"%d", maxgrau);
    
    	for ( i = 0; i < hoehe; i++)									/*Farbwerte der Bilddatei schreiben*/
    		for( j = 0; j < breite; j++)
    		{	
    			if (0==zaehler%16 )
    				fprintf(outfile,"\n");
    			fprintf( outfile , "%4d", bild2[i][j] );
    			zaehler++;
    		}
    
    	fprintf(outfile,"\n");
    
    	fclose ( outfile );							/* close output file */
    	system("xv streifen.pgm streifen2.pgm");
    
    	return EXIT_SUCCESS;
    }				/* ----------  end of function main  ---------- */
    

    <hume sagt>Bitte Code-Tags verwenden!</hume sagt>



  • c_looser schrieb:

    Habe hier ein paar fertige C-Programme

    Und wieso postest du dann ins C++ Forum? Mach mal Code-Tags drumrum, vielleicht erklärt ja dann jemand den Code.



  • welche schritte verstehst du nicht?

    da steht doch schon alles dran...



  • namen sprechen oftmals bände...

    wieso sollte man jemandem helfen, der mit seinem namen schon genau angibt, dass er eh nicht länger als unbedingt nötig in dieser community verweilen will-sie in dem sinne nur braucht um sie auszunutzen. Da kann man gleich als unreg posten 🙄



  • So wird das mit dem Studium nichts

    wenn du informatik studierst dann 👎
    solchen leuten wünsche ich 500euro beiträge pro monat
    aber keine sorge, solche leute werden eh gesiebt 😉



  • hallo, er hat nur gefragt.

    bevor hier pseudoweisheiten fallen, sollte er lieber genauer sagen, was er nicht verstanden hat.



  • elise schrieb:

    bevor hier pseudoweisheiten fallen, sollte er lieber genauer sagen, was er nicht verstanden hat.

    Ich befürchte, er hat genau das gepostet, was er nicht versteht. 🙂



  • okok, ich glaube an das gute im menschen.. 😃


Anmelden zum Antworten