2 Probleme zum Lösen der Aufgabe



  • Hallo ihr Lieben,

    hab hier 2 Probleme um mit der Aufgabe 10.3 ( http://www.mmc-software.de/80unterlagenzuvorlesungen/20pgiw1/40uebungsblaetter/blatt10.pdf ) abzuschließen:

    1.Leerzeichen ( soll die Anzahl der Wörter ermitteln ) zählt nicht richtig
    2. wie verwandeln ich zahlen2 so um, dass er mir so eine Ausgabe gibt:
    Buchstaben:

    A: 2.34%
    B: 2.34%

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    # define N 100
    
    /*
    float Prozentbuchstaben (int c[], int laenge){
    
    float zaehler = 0;
    int i = 0;
        for(i = 0; i <= laenge; i++){
        if(c[i]!= 0)
        zaehler = zaehler +1;
    
        }
    float feld[26];
    i = 0;
    for (i = 0; i <= laenge; i++){
    feld[i] = c[i];
    feld[i] = feld[i]* 100 / 12;
    
    }
    
    return feld;
    }
    
    */
    
    float zeichenzaehlen ( float yoyo[], int laenge){
    
    float zaehler = 0;
    int i = 0;
    for ( i = 0; i <= laenge; i++)
    { if(yoyo[i]!= 0)
      zaehler = zaehler+1;
    }
    return zaehler;
    }
    
    char Umwandeln (char c){
    
    if(c>='a' && c<= 'z'){
      c = c - 32;
    }
    return c;
    
    }
    
    int main (){
    
    char array[N];
    char string[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int  zahlen[26];
    
    printf("Ihre Eingabe:\n");
    fgets(array,N,stdin);
    
    int length = strlen(array);
    
    int i = 0;
    
    char *p;
    
    int x = sizeof(zahlen) / sizeof(int);
    
        for(i = 0; i<x;i++)
        { zahlen[i]= 0; 
        }
    
    i = 0;
    
        for(i=0;i<=length;i++){
        array[i] = Umwandeln(array[i]);
        }
    
    i =0;
    int j = 0;
    int Leerzeichen = 1; // da wenn kein Leerzeichen eingegeben wurde, immer noch ein Wort da ist
    p = &array[0];
                   while(i <= length && array[i]!='\0'){
                           for(j=0;j<26;j++){
                                    if(*p==string[j])
                                       zahlen[j]=zahlen[j]+1; 
                                    else if(*p != ' ');
                                    Leerzeichen = Leerzeichen + 1;
    
                            }
    p++;
    i++;
    
    }
    float zahlen2[26];
    int r=0;
    for(j=0;j<x;j++)
    { zahlen2[j] = zahlen[j];
    }
    system("cls");
    
    printf("      Buchstabenanzahl       \n\n\n");
    i = 0;
                  for(i=0;i<x;i++){
                  if(zahlen[i]!= 0)
                  printf("%c: %2.f\n", string[i], zahlen2[i]);
                  }
    
                  printf("\n Woerter: %d", Leerzeichen);  
    
    system("Pause");
    return 0;
    }
    


  • sag mal willst du uns veräppeln?
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-258417-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html

    wenn das dein topic ist ists, ja nicht schlimm aber dann schreib doch bitte da weiter statt dieses komische konstrukt nochmal zu posten...

    wenns nicht dein topic ist dann stell ich mir ja die frage ob es schon mal passiert ist das 2 leute derart gleich arbeiten



  • noobLolo schrieb:

    dann stell ich mir ja die frage ob es schon mal passiert ist das 2 leute derart gleich arbeiten

    So hab ich früher gern die Mathelehrer verwirrt. Möglich ist alles. Nur nicht, dass zwei Menschen unabhängig so eine Formatierung produzieren, dazu braucht man Talent.
    🙂



  • Leerzeichen Prob gelöst

    i =0;
    int j = 0;
    int Leerzeichen = 1;
    p = &array[0]; 
                   while(i <= length && array[i]!='\0'){        
                           for(j=0;j<26;j++){
                                    if(*p==string[j]){
                                       zahlen[j]=zahlen[j]+1; }
                                    else if(*p == ' '){
                                    Leerzeichen++;
                                    j=26;}                                   
                            }
    *p++;
    i++;
    
    }
    


  • ok Aufgabe gelöst;
    trotzdem weiß ich nicht genau, wie ich ein Feld an ein Unterprogramm übergebe

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    # define N 100
    
    /*
    float Prozentbuchstaben (int c[], int laenge){
    
    float zaehler = 0;
    int i = 0;
        for(i = 0; i <= laenge; i++){
        if(c[i]!= 0)
        zaehler = zaehler +1;
    
        }
    float feld[26];
    i = 0;
    for (i = 0; i <= laenge; i++){
    feld[i] = c[i];
    feld[i] = feld[i]* 100 / 12;
    
    }
    
    return feld;
    }
    
    */
    
    float umrechnen(float zahl,float  zaehl0r){
    zahl = zahl * 100 / zaehl0r;
    
    return zahl;
    }
    

    char Umwandeln (char c){

    if(c>='a' && c<= 'z'){
    c = c - 32;
    }
    return c;

    }

    int main (){

    char array[N];
    char string[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int zahlen[26];

    printf("Ihre Eingabe:\n");
    fgets(array,N,stdin);

    int length = strlen(array);

    int i = 0;

    char *p;

    int x = sizeof(zahlen) / sizeof(int);

    for(i = 0; i<x;i++)
    { zahlen[i]= 0;
    }

    i = 0;

    for(i=0;i<=length;i++){
    array[i] = Umwandeln(array[i]);
    }

    i =0;
    int j = 0;
    int Leerzeichen = 1;
    p = &array[0];
    while(i <= length && array[i]!='\0'){
    for(j=0;j<26;j++){
    if(*p==string[j]){
    zahlen[j]=zahlen[j]+1; }
    else if(*p == ' '){
    Leerzeichen++;
    j=26;}
    }
    *p++;
    i++;

    }

    float zahlen2[26];
    int r=0;
    float zaehl0r = 0;
    for(j=0;j<x;j++)
    { zahlen2[j] = zahlen[j];
    if(zahlen2[j]!=0)
    zaehl0r = zaehl0r + zahlen2[j];
    }

    i=0;
    while (i != 26)
    {
    zahlen2[i]=umrechnen(zahlen2[i], zaehl0r);
    i++;
    }

    system("cls");

    printf(" Buchstabenanzahl \n\n\n");
    i = 0;
    for(i=0;i<x;i++){
    if(zahlen[i]!= 0)
    printf("%c: %2.f%%\n", string[i], zahlen2[i]);
    }

    printf("\n Woerter: %d", Leerzeichen);

    system("Pause");
    return 0;
    }



  • i=0; 
    // while (i != 26) // <- ?
    while(i < 26)
    { 
    zahlen2[i]=umrechnen(zahlen2[i], zaehl0r); 
    i++; 
    }
    


  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int isPalindrom(char *strA,int len){
    	char *strB = strA + len -1;
    	len>>=1;
    	while(len--){
    		if(*strA++ != *strB--)
    			return 0;
    	}
    	return 1;
    }
    
    void swapString(char *strA,int len){
    	char *strB = strA + len -1;
    	char buffer;
    	len>>=1;
    	while(len--){
    		buffer = *strB;
    		*strB-- = *strA;
    		*strA++ = buffer;
    	}
    }
    
    int countWords(char *str){
    	int words=0;
    
    LABEL_NEXT:
        switch(*str){
            case '\t':
            case '\n':
            case '.':
            case ',':
            case ' ':
        LABEL_NEXT_INNER:
        		str++;
                switch(*str){
                    case '\t':
                    case '\n':
                    case '.':
                    case ',':
                    case ' ':
                        goto LABEL_NEXT_INNER;
                    case '\0':
                        goto LABEL_END;
                    default:
                    	words++;
                        goto LABEL_NEXT;
                }
                goto LABEL_NEXT;
            case '\0':
                goto LABEL_END;
            default:
            	str++;
                goto LABEL_NEXT;
        }
    LABEL_END:
    	return words+1;
    }
    
    void countChars(int count[],char *str){
    	while(*str)
    	  count[(unsigned char)*str++]++;
    }
    
    int isLower(char c){
    	if(c>='a'&&c<='z')
    		return c-('A'-'a');
    	return c;
    }
    
    void plotCountCharsBuffer(int count[],int length){
    	int l = 0xFF+1;
    	float buffer = 100/((float)length);
    	while(--l){
    		if(count[l]>0){
    			printf("%c:\t%d\t%f %%\n",(char)l,count[l],buffer*((float)count[l]));
    		}
    	}
    }
    
    void mergeUpperAndLowerChars(int count[]){
    	int i;
    	for(i='a';i<'z';i++){
    		if(count[i]){
    			count[i+('A'-'a')]+=count[i];
    			count[i] = 0;
    		}
    	}
    }
    
    int readStringFromStdIn(char buffer[],int maxLength){
    	int length;
    
    	fgets(buffer,maxLength-1,stdin);
    	length = strlen(buffer);
    	buffer[length-1] = 0;
    
    	return length-1;
    }
    
    int main(void) {
    	int count[0xFF+1] = {};
    	char anna[200];
    	int length;
    
    	printf("Eingabe:      ");
    	length = readStringFromStdIn(anna,200);
    	printf("palindrom:    %d\n",isPalindrom(anna,length));
    	swapString(anna,length);
    	printf("reversed:     %s\n",anna);
    	printf("words:        %d\n",countWords(anna));
    	countChars(count,anna);
    	printf("length:       %d\n",length);
    	mergeUpperAndLowerChars(count);
    	plotCountCharsBuffer(count,length);
    
    	return 0;
    }
    

    bitte post deine version jetzt nicht nochmal 😞

    lg lolo



  • ups z.85

    for(i='a';i<='z';i++){
    statt
    for(i='a';i<'z';i++){
    

    sonst nimmt er das z nicht mit 🙄



  • ach und das ist erstens falsch und wird nirgends verwendet also kanns raus

    int isLower(char c){
        if(c>='a'&&c<='z')
            return c-('A'-'a');
        return c;
    }
    

    :p


Anmelden zum Antworten