Istogramma verticale

di il
8 risposte

Istogramma verticale

Ciao, ho scritto nel commento quello che deve fare il programma.

#include <stdio.h>//visualizza un istogramma verticale della lunghezza delle parole contenute nel testo in ingresso
#define OUT 0
#define IN 1
void main()
{
	int c, state;
	state = OUT;
	while ((c = getchar()) != EOF)
	{
		if (c != ' ' && c != '\t' && c != '\n')
		{
			state = IN;
			printf("*\n");
		}
		else
		{
			state = OUT;
			printf("\t");
		}
	}
}

C'è un carattere che fa ritornare a capo ma dall' alto?

8 Risposte

  • Re: Istogramma verticale

    No

    Devi fare qualcosa tipo
        printf("*   * \n");
        printf("* * **\n");
        printf("*** **\n");
        printf("******\n");
    cioè prima prepari tutto il grafico e poi lo disegni per righe
  • Re: Istogramma verticale

    E poi come cancello gli asterischi in più?
  • Re: Istogramma verticale

    Non li cancelli, non li visualizzi
  • Re: Istogramma verticale

    Ah ci provo
  • Re: Istogramma verticale

    Mi sa che non ho capito però...
  • Re: Istogramma verticale

    Anche supermanpc è nella mia lista degli ignorati
    ma credo di aver capito cosa cerca
    un programma che stampa l'istogramma verticale rappresentando un qualche array

    ecco un esempio
    
    /*
     * istogramma.c
     *
     * 12-06-2020 Nelson "Standardoil"
     * Sentitevi liberi di trarre ispirazione
     * L'ammiraglio non si offende
     *
     * istogramma verticale
     */
    
    
    #include <stdio.h>
    
    void istogramma(char * s)
    {
       // stampa l'istogramma verticale
       // della frequenza delle lettere nella stringa in ingresso
       // si presume che ci siano solo caratteri minuscoli
       printf("%s\n\n", s);
       int f[26] = {0};
    
       while(*s)
       {
          f[*s - 'a']++;
          s++;
       }
    
       int massimo = 0;
    
       for(int i = 0; i < 26; i++)
       {
          if(massimo < f[i])
          {
             massimo = f[i];
          }
       }
    
       for(int i = 0; i < 26; i++)
       {
          printf("%c", i + 'a');
       }
    
       printf("\n");
    
       for(int j = massimo; j > 0 ; j--)
       {
          for(int i = 0; i < 26; i++)
          {
             if(f[i] >= j)
             {
                printf("*");
             }
    
             else
             {
                printf(" ");
             }
          }
    
          printf("\n");
       }
    
       for(int i = 0; i < 26; i++)
       {
          printf("%c", i + 'a');
       }
    
       printf("\n");
    }
    
    
    int main(int argc, char **argv)
    {
       istogramma("the quick brown fox jump over the lazy dog");
       return 0;
    }
    
    
  • Re: Istogramma verticale

    StandardOil ha scritto:


    Anche supermanpc è nella mia lista degli ignorati
    ma credo di aver capito cosa cerca
    un programma che stampa l'istogramma verticale rappresentando un qualche array

    ecco un esempio
    
    /*
     * istogramma.c
     *
     * 12-06-2020 Nelson "Standardoil"
     * Sentitevi liberi di trarre ispirazione
     * L'ammiraglio non si offende
     *
     * istogramma verticale
     */
    
    
    #include <stdio.h>
    
    void istogramma(char * s)
    {
       // stampa l'istogramma verticale
       // della frequenza delle lettere nella stringa in ingresso
       // si presume che ci siano solo caratteri minuscoli
       printf("%s\n\n", s);
       int f[26] = {0};
    
       while(*s)
       {
          f[*s - 'a']++;
          s++;
       }
    
       int massimo = 0;
    
       for(int i = 0; i < 26; i++)
       {
          if(massimo < f[i])
          {
             massimo = f[i];
          }
       }
    
       for(int i = 0; i < 26; i++)
       {
          printf("%c", i + 'a');
       }
    
       printf("\n");
    
       for(int j = massimo; j > 0 ; j--)
       {
          for(int i = 0; i < 26; i++)
          {
             if(f[i] >= j)
             {
                printf("*");
             }
    
             else
             {
                printf(" ");
             }
          }
    
          printf("\n");
       }
    
       for(int i = 0; i < 26; i++)
       {
          printf("%c", i + 'a');
       }
    
       printf("\n");
    }
    
    
    int main(int argc, char **argv)
    {
       istogramma("the quick brown fox jump over the lazy dog");
       return 0;
    }
    
    
    Posso uscire dalla lista ?
  • Re: Istogramma verticale

    Prego affinchè tu sconfigga Napoleone
Devi accedere o registrarti per scrivere nel forum
8 risposte