Ordine lessicografico

di il
9 risposte

Ordine lessicografico

Salve qualcuno può aiutarmi con questo esercizio di linguaggio C?
- Creare un programma che, date tre stringhe immesse da input, le ordini in ordine
lessicografico in base alle sole consonanti presenti nelle stringhe
GRAZIE IN ANTICIPO

9 Risposte

  • Re: Ordine lessicografico

    Certo che possiamo AIUTARTI (non farti i compiti).
    Esponici le tue difficoltà e verrai aiutato.
  • Re: Ordine lessicografico

    Io avevo provato a fare una modifica della funzione strcmp ed implementato questo codice ma forse non sto facendo la cosa giusta.

    #include <stdio.h>

    #define LENGHT 1000

    int strcmp_m (char s[],char t[]);
    void ordine_lessicografico(char s[],char t[],char z[]);

    int main(){
    char s[LENGHT];
    char t[LENGHT];
    char z[LENGHT];

    printf("Inserisci prima parola:\n");
    scanf("%s",s);
    printf("Inserisci seconda parola:\n");
    scanf("%s",t);
    printf("Inserisci terza parola:\n");
    scanf("%s",z);
    ordine_lessicografico(s,t,z);
    return 0;
    }

    void ordine_lessicografico(char s[],char t[],char z[]){

    if(strcmp_m(s,t)<=0 && strcmp_m(t,z)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",s,t,z);}
    else if(strcmp_m(s,z)<=0 && strcmp_m(z,t)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",s,z,t);}
    else if(strcmp_m(t,s)<=0 && strcmp_m(s,z)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",t,s,z);}
    else if(strcmp_m(t,z)<=0 && strcmp_m(z,s)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",t,z,s);}
    else if(strcmp_m(z,s)<=0 && strcmp_m(s,t)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",z,s,t);}
    else if(strcmp_m(z,t)<=0 && strcmp_m(t,s)<=0){

    int strcmp_m (char s[],char t[]){
    int i;
    for(i=0; s==t;i++)
    if(s=='\0')
    return 0;
    if(s!='a'|s!='A'|s!='e'|s!='E'|s!='i'|s!='I'|s!='o'|s[i]!='O'|s[i]!='u'|s[i]!='U')
    return s[i]-t[i];
    }
  • Re: Ordine lessicografico

    Scusate avevo saltato un pezzo di codice

    #include <stdio.h>
    #define LENGHT 1000

    int strcmp_m (char s[],char t[]);
    void ordine_lessicografico(char s[],char t[],char z[]);

    int main(){
    char s[LENGHT];
    char t[LENGHT];
    char z[LENGHT];

    printf("Inserisci prima parola:\n");
    scanf("%s",s);
    printf("Inserisci seconda parola:\n");
    scanf("%s",t);
    printf("Inserisci terza parola:\n");
    scanf("%s",z);
    ordine_lessicografico(s,t,z);
    return 0;
    }

    void ordine_lessicografico(char s[],char t[],char z[]){

    if(strcmp_m(s,t)<=0 && strcmp_m(t,z)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",s,t,z);}
    else if(strcmp_m(s,z)<=0 && strcmp_m(z,t)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",s,z,t);}
    else if(strcmp_m(t,s)<=0 && strcmp_m(s,z)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",t,s,z);}
    else if(strcmp_m(t,z)<=0 && strcmp_m(z,s)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",t,z,s);}
    else if(strcmp_m(z,s)<=0 && strcmp_m(s,t)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",z,s,t);}
    else if(strcmp_m(z,t)<=0 && strcmp_m(t,s)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",z,t,s);}
    else{
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",s,t,z);
    }
    }

    int strcmp_m (char s[],char t[]){
    int i;
    for(i=0; s==t;i++)
    if(s=='\0')
    return 0;
    if(s!='a'|s!='A'|s!='e'|s!='E'|s!='i'|s!='I'|s!='o'|s[i]!='O'|s[i]!='u'|s[i]!='U')
    return s[i]-t[i];
    }
  • Re: Ordine lessicografico

    Penso sia meglio costruire una funzione che presa una stringa ne restituisce una copia senza vocali. A questo punto epurate dalle tre stringhe originali le vocali, puoi usare la normale strcmp su queste nuove stringhe per fare i confronti e ottenere l'ordinamento richiesto.

    P.s. Usa i tag code per postare codice
  • Re: Ordine lessicografico

    E come posso creare questo tipo di funzione? come faccio ad escludere le vocali da una stringa immessa?
  • Re: Ordine lessicografico

    Una stringa è composta da caratteri con terminatore nullo.
    Puoi scandire l'intera stringa confrontando ciascun campo, se una consonante la ricopi in una nuova stringa, se una vocale la scarti, alla fine chiudi la nuova stringa con il terminatore nullo, ritornandola al chiamante.
  • Re: Ordine lessicografico

    #include <stdio.h>
    #include <string.h>
    #define LENGHT 1000
    
    void elimina_vocali(char s[]);
    void ordine_lessicografico(char s[],char t[],char z[]);
    
    int main(){
    char s[LENGHT];
    char t[LENGHT];
    char z[LENGHT];
    
    printf("Inserisci prima parola:\n");
    scanf("%s",s);
    printf("Inserisci seconda parola:\n");
    scanf("%s",t);
    printf("Inserisci terza parola:\n");
    scanf("%s",z);
    elimina_vocali(s);
    elimina_vocali(t);
    elimina_vocali(z);
    ordine_lessicografico(s,t,z);
    return 0;
    }
    
    void ordine_lessicografico(char s[],char t[],char z[]){
    
    if(strcmp(s,t)<=0 && strcmp(t,z)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",s,t,z);}
    else if(strcmp(s,z)<=0 && strcmp(z,t)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",s,z,t);}
    else if(strcmp(t,s)<=0 && strcmp(s,z)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",t,s,z);}
    else if(strcmp(t,z)<=0 && strcmp(z,s)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",t,z,s);}
    else if(strcmp(z,s)<=0 && strcmp(s,t)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",z,s,t);}
    else if(strcmp(z,t)<=0 && strcmp(t,s)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",z,t,s);}
    else{
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",s,t,z);
    }
    }
    
    void elimina_vocali(char s[]){
    int i;
    while(s[i]!='\0'){
    if(s[i]=='a'||s[i]=='A'||s[i]=='e'||s[i]=='E'||s[i]=='i'||s[i]=='I'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U')
    s[i]=s[i+1];
    i++;
    }
    }
    
    Ho provato a fare così ma non funziona. Help!
  • Re: Ordine lessicografico

    Problema risolto così Grazie per i suggerimenti
    #include <stdio.h>
    #include <string.h>
    #define LENGHT 1000
    
    void elimina_vocali(char s[], char stringa[]);
    void ordine_lessicografico(char s[],char t[],char z[]);
    
    int main(){
    char s[LENGHT];
    char t[LENGHT];
    char z[LENGHT];
    char s1[LENGHT];
    char t1[LENGHT];
    char z1[LENGHT];
    
    printf("Inserisci prima parola:\n");
    scanf("%s",s);
    printf("Inserisci seconda parola:\n");
    scanf("%s",t);
    printf("Inserisci terza parola:\n");
    scanf("%s",z);
    elimina_vocali(s,s1);
    elimina_vocali(t,t1);
    elimina_vocali(z,z1);
    ordine_lessicografico(s1,t1,z1);
    return 0;
    }
    
    void ordine_lessicografico(char s[],char t[],char z[]){
    
    if(strcmp(s,t)<=0 && strcmp(t,z)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",s,t,z);}
    else if(strcmp(s,z)<=0 && strcmp(z,t)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",s,z,t);}
    else if(strcmp(t,s)<=0 && strcmp(s,z)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",t,s,z);}
    else if(strcmp(t,z)<=0 && strcmp(z,s)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",t,z,s);}
    else if(strcmp(z,s)<=0 && strcmp(s,t)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",z,s,t);}
    else if(strcmp(z,t)<=0 && strcmp(t,s)<=0){
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",z,t,s);}
    else{
    printf("--------------------\n");
    printf("%s\n%s\n%s\n",s,t,z);
    }
    }
    
    void elimina_vocali(char s[],char stringa[]){
    int i;
    int lun= strlen(s); //lunghezza stringa
    int j=0;
    
    for(i=0;i<=lun;i++){
    if(s[i]=='a'||s[i]=='A'||s[i]=='e'||s[i]=='E'||s[i]=='i'||s[i]=='I'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U')
    ;
    else{
    stringa[j]=s[i];
    j++;
    }
    }
    }
  • Re: Ordine lessicografico

    Dovresti chiudere la nuova stringa che costruisci con il terminatore di stringa, per non avere nessun problema. Non sono certo che la funzione che hai scritto per eliminare le vocali funzioni correttamente.
Devi accedere o registrarti per scrivere nel forum
9 risposte