Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    44

    [c] funzione somma caratteri

    ciao a tutti ho una strut dati formata da char, in particolare il codice del volo è una stringa di 7 caratteri formata dalle prime 4 lettere maiuscole e le rimanenti da numeri es: ABCD123.
    Adesso devo creare una funzione per calcolare l'indice di un vettore che è data dalla formula:
    indice =(somma prime 4 lettere in maiuscolo)%n dove n è la dimensione del vettore.

    ho provato a fare in questo modo
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    #define FLUSH while(getchar ()!='\0')
    #define COD 8
    #define STR 30
    typedef struct{
                char codice[COD];
                char cognome[STR], nome[STR];
    }tipobaseList;
    
    void LeggiStringa(char s [], unsigned int dim){
         unsigned int i=0;
         for(i=0; ((s[i]=getchar())!='\n') && i<dim-1; i++)
                   s[i]='\0';
         if(i==dim-1) while(getchar()!='\0');
    }
    
    void LeggiCodice(tipobaseList *x){
          printf("\nInserisci codice volo: ");
          LeggiStringa(x->codice, COD);
    }
    
    int Indice(tipobaseList x, int n){
        int i=0, k=0, somma=0;
        for(i=0; x[i]; i++)
            x[i]=toupper(x[i]);
            printf("%s",x);
       	for(k=0; x[k]<4; k++)
              somma=(somma+x[k])%n;
        return(somma);
    }
    
    int main(){
        tipobaseList codice_volo;
        int n,i ;
        printf("\nInserisci lunghezza vettore" );
        scanf("%d", &n);
        FLUSH;
        LeggiCodice(&codice_volo);
        i=Indice(codice_volo, n);
        printf("l'indice e' %d", i);
        
        system("PAUSE");
        return 0;
    }
    mi da errore:
    In function `int Indice(tipobaseList, int)':
    no match for 'operator[]' in 'x[i]'

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Il parametro non è un vettore di strutture
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    44
    Originariamente inviato da linoma
    Il parametro non è un vettore di strutture
    si ma come posso fare?

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Intanto puoi usare un puntatore alla struttura come parametro e poi fai la somma dei vari vettori di caratteri.
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    44
    Originariamente inviato da linoma
    Intanto puoi usare un puntatore alla struttura come parametro e poi fai la somma dei vari vettori di caratteri.
    codice:
    int Indice(tipobaseList *x, int n){
        int i=0, k=0, somma=0;
        for(i=0; &x[i]; i++)
            &x[i]=toupper(&x[i]);
            printf("%s",x);
       	for(k=0; &x[k]<4; k++)
              somma=(somma+&x[k])%n;
        return(somma);
    }
    mi dice invalid conversion from `tipobaseList*' to `int'

    ma toupper funzione solo con int?

  6. #6
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    La somma di un tuo vettore di char la farei in questo modo

    codice:
    int sommachar(char *p){
    	int value;
    	
    	for(int somma = 0;(value = (int)*p++) != 0; )
    		somma += value;
    	return somma;
    }
    non ho capito bene quale somma la tua funzione Indice dovrebbe tirare fuori
    Per gli Spartani e Sparta usa spartan Il mio github

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    44
    Originariamente inviato da linoma
    La somma di un tuo vettore di char la farei in questo modo

    codice:
    int sommachar(char *p){
    	int value;
    	
    	for(int somma = 0;(value = (int)*p++) != 0; )
    		somma += value;
    	return somma;
    }
    non ho capito bene quale somma la tua funzione Indice dovrebbe tirare fuori
    deve fare la somma delle prime 4 lettere (corrispondente valore in ascii però maiuscolo)

  8. #8
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Ma solo del primo campo della struct?
    Per gli Spartani e Sparta usa spartan Il mio github

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    44
    Originariamente inviato da linoma
    Ma solo del primo campo della struct?
    si, solo del char codice

  10. #10
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Dovrebbe andare in questo modo :

    codice:
    int Indice(unsigned char *x, int n){
        int i, k, somma;
        for(i=somma=0; i<4 && i < n && (k = (int)*x++) != 0; i++)
            somma+=toupper(k);
        return(somma);
    }
    Per gli Spartani e Sparta usa spartan Il mio github

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.