brauche schnelle hilfe bei ein paar kleinen aufgaben



  • Ich hab bei den folgenden Programmen das Problem das die tonnenweise fehlermeldungen ausspucken: (ps. bin noch ein newbie in diesem breich)

    1.) Schreiben sie eine Funktion welche eine ganze Zahl dividiert . Das Resultat wird mit return zurückgegeben. Der Rest wird via Pointer zurückgegeben

    #include <stdio.h>
    
    int divGanzzahl (int zaehler, int nenner, int *rest)
    {
    	int result;
    	result = zaehler/nenner;
    
    	while (*rest != 0)
    	{ 
    	*rest = zaehler % nenner; 
    	zaehler = nenner;
    	nenner = *rest; 
    	};
    
    	return result;
    }
    
    int main()
    {
    	int zaehler;
    	int nenner;
    	int result;
    	int rest;
    	printf("Bitte geben Sie den Zaehler ein.\n\n");
    	scanf("%i",&zaehler);
    	fflush(stdin);
    	printf("Bitte geben Sie den Nenner ein.\n\n");
    	scanf("%i",&nenner);
    	fflush(stdin);
    	result = divGanzzahl(zaehler,nenner,rest);
    	printf("Das Resultat ist %i\n",result);
    	printf("Der Rest betraegt %i",rest);
    
    	getchar();
    	return 0;
    }
    

    2.) eine funktion gibt eine gewisse anzahl titel aus wenn das mehr als 100 ist wird eine fehlermeldung ausgegeben.

    #include <stdio.h>
    
    void writeTitle (char title[], int count)
    {
    	while (count < 101, count > 0)
    	{
    		printf("%c",title);
    		count --;
    	};
    	if (count > 100)
    	{
    		printf("Zu hohe Ausgabe !! \a");
    	}
    }
    
    int main()
    {
    	char title[128];
    	int count;
    	int ausgabe;
    
    	printf("Bitte geben Sie den gewünschten Titel ein\n\n");
    	scanf("%c",&title);
    	printf("Geben sie an wie oft dieser Titel ausgegeben\n werden soll\n\n");
    	scanf("%i",&count);
    	ausgabe = writeTitle(title,count);
    	getchar();
    	return 0;
    }
    

    Schon mal danke an alle die die sich für mich die zeit nehmen



  • brauchehilfe schrieb:

    1.) Schreiben sie eine Funktion welche eine ganze Zahl dividiert . Das Resultat wird mit return zurückgegeben. Der Rest wird via Pointer zurückgegeben

    #include <stdio.h>
    
    int divGanzzahl (int zaehler, int nenner, int *rest)
    {
    	int result;
    	result = zaehler/nenner;
    
    	while (*rest != 0)
    	{ 
    	*rest = zaehler % nenner; 
    	zaehler = nenner;
    	nenner = *rest; 
    	};
    
    	return result;
    }
    
    int main()
    {
    	int zaehler;
    	int nenner;
    	int result;
    	int rest;
    	printf("Bitte geben Sie den Zaehler ein.\n\n");
    	scanf("%i",&zaehler);
    	fflush(stdin);
    	printf("Bitte geben Sie den Nenner ein.\n\n");
    	scanf("%i",&nenner);
    	fflush(stdin);
    	result = divGanzzahl(zaehler,nenner,rest);
    	printf("Das Resultat ist %i\n",result);
    	printf("Der Rest betraegt %i",rest);
    	
    	getchar();
    	return 0;
    }
    

    gehen wir mal durch: Also du musst sagen rest = &zaehler % &nenner, denn du willst ja auf den Speicher und nicht den Wert zugreifen (sonst würdest du wohl kaum Zeiger verwenden müssen). Dann solltest du int *rest nicht als Parameter übergeben, weil du bei der Zeigerdeklarationen ihn gleich initialisieren musst (also lass das raus). Warum machst du im Hauptprogramm eine Pufferleerung (fflush(stdin)) ?........Das musst du benutzen, wenn du mit Streams arbeitest (also bei Datein). Zum Schluss: Du brauchst nur return 0 und nicht getchar(), weil du deiner main-funktion einen Wert zurückgeben musst. Mehr fällt mir jetzt erstma nich ein...........Viel Glück für dein Programm.



  • result = divGanzzahl(zaehler,nenner,&rest);
    

    Dein 3. Funktionsparameter ist ein Zeiger, von daher musst du auch einen solchen übergeben. Da deine Variable kein Zeiger ist, kannst du die Adresse mit Hilfe des Adressoperators übergeben.

    fflush(stdin);
    

    Normalerweise können nur Ausgabepuffer "geflusht" werden.

    int divGanzzahl (int zaehler, int nenner, int *rest) { 
        int result = zaehler/nenner; 
    
        *rest = zaehler % nenner;
    
        return result; 
    }
    

    Der Modulo-Operator liefert ja schon den Rest deiner Division also ist hier nicht mehr Code erforderlich.

    ausgabe = writeTitle(title,count);
    

    Deine Funktion writeTitle hat den Rückgabewert "void", also keinen Rückgabewert und kann deshalb auch nicht einer Variable zugewiesen werden.

    void writeTitle (char title[], int count) { 
    	 if (count > 100) { 
            printf("Zu hohe Ausgabe !! \a"); 
    		return;
        } 
    
        while (count > 0) { //Bedingungen können mit logischem UND(&&) und/oder ODER(||) verknüpft werden. Das was du hattest, war komisch 
            printf("%s",title); //%s steht für einen String, %c für ein einzelnes Zeichen
            count --; 
        }; 
    
    } 
    
    int main() { 
        char title[128]; 
        int count; 
        int ausgabe; 
    
        printf("Bitte geben Sie den gewünschten Titel ein\n\n"); 
        scanf("%s",&title); 
        printf("Geben sie an wie oft dieser Titel ausgegeben\n werden soll\n\n"); 
        scanf("%i",&count); 
        writeTitle(title,count); 
        getchar();
        return 0; 
    }
    


  • #include <stdio.h>
    
    int divGanzzahl (int zaehler, int nenner, int *rest)
    {
        int result = zaehler/nenner;
        // wofür hattest Du hier ne While-Schleife?!
        *rest = zaehler % nenner;
    
        return result;
    }
    
    int main()
    {
        int zaehler;
        int nenner;
        int rest;
    
        printf("Bitte geben Sie den Zaehler ein.\n\n");
        scanf("%i",&zaehler);
        fflush(stdin);
        printf("Bitte geben Sie den Nenner ein.\n\n");
        scanf("%i",&nenner);
        fflush(stdin);
        int result = divGanzzahl( zaehler, nenner, &rest );
        printf("Das Resultat ist %i\n",result);
        printf("Der Rest betraegt %i",rest);
    
        getchar();
        return 0;
    }
    
    #include <stdio.h>
    
    void writeTitle (char* title, int count)
    {
        for( int i = 0; i < count; ++i )
        {
            printf("%s", title);
        }
        if (count > 100)
        {
            printf("\nZu hohe Ausgabe !! \a");
        }
    }
    
    int main()
    {
        char title[128];
        int count;
        int ausgabe;
    
        printf("Bitte geben Sie den gewünschten Titel ein:\n");
        scanf("%s", &title); // <- title darf nur ein Wort sein (keine Whitespaces)
        title[127] = '\0';
        printf("Geben sie an wie oft dieser Titel ausgegeben\n werden soll:\n");
        scanf("%i",&count);
        writeTitle(&title[0], count);
        getchar();
        return 0;
    }
    


  • Wie definierst du rest - wenn man davon ausgeht, dass es nur positive Reste gibt, dann funktioniert die Modulooperation von C nicht ganz so wie man sich das vorstellt



  • danke für eure hilfe ihr habt mir echt viel weitergeholfen thx thx thx


Anmelden zum Antworten