Semplice programmino in C

di il
5 risposte

Semplice programmino in C

Salve a tutti! sono appena appena iscritto al forum, in quanto devo ammettere che non vado così forte con la programmazione.. però devo superare un esame da 6crediti e devo fare dei programmini semplici semplici, senza nessun tipo di funzioni complicate, ma solo con librerie stdio.h e ctype.h e cicli if,for while.
Detto questo e dopo avervi annoiato, volevo un consiglio su un programma che devo implementare e che ora vi posto la consegna:
Implementare la funzione int confronta(char* a, char* b, int x), che ritorna 1 se i primi e gli ultimi x
caratteri di a e b sono uguali, 0 altrimenti.
Casi particolari: Se le due stringhe sono non nulle, e x e' maggiore della lunghezza di una delle due stringhe, la
funzione ritorna 0. Se b oppure a sono una stringa di lunghezza nulla, la funzione ritorna 1 se e solo se x == 0.
Se x == 0, la funzione ritorna 1
Il mio problema è soprattutto nei casi particolari, che devono essere inseriti nella funzione stessa e non nel main(). Vi posto il codice:
#include<stdio.h>
#include<ctype.h>
#define MAX 230

int confronta(char *a, char *b, int x)
{
    int i;

    /*if (x-len(a)>0)
	{
	printf("parametri errati!\n");
	return 0;
	}

    if (x-len(b)>0)
	{
	printf("parametri errati!\n");
	return 0;
	}*/

    for (i=0;i<x;i++)
        {
            if (a[i]!=b[i]&&a[len(a)-i-1]!=b[len(b)-i-1])
                return 0;

                    }

return 1;
}


int len(char *s)
{
    int t=0;

    while (t!='\0')
        t++;

    return t;
}

int main()
{
    char a[MAX], b[MAX];
    int x;

    printf("inserisci una stringa:\n");
    scanf("%s",a);

    printf("inserisci la seconda stringa:\n");
    scanf("%s",b);

    printf("inserisci un numero:\n");
    scanf("%d", &x);

    printf("la funzione ritorna %d\n", confronta(a,b,x));

    return 0;
}
come risolvere?? grazie a tutti quelli che sapranno aiutarmi.. alla prossima!!!

5 Risposte

  • Re: Semplice programmino in C

    Cambia la funzione len in tanto. Così ti ritorna sempre 0.
  • Re: Semplice programmino in C

    Io direi di controllare prima la x, infatti se essa è 0, restituirà 1 sia che le stringhe siano nulle o no. dopo tale verifica, il programma va avanti con la certezza che x è non nullo, quindi ti semplifichi anche le successive verifiche:
    
       -controllo se x è 0
       VERO - ritorno 1;
       FALSO:
          - controllo se len(a)>0 e len(b)>0
          VERO:
              controllo se x>len(a) o x>len(b)
              VERO - ritorno 0
              FALSO - 'inizia l'algoritmo di confronto richiesto dall'esercizio'
          FALSO - ritorno 0
    
  • Re: Semplice programmino in C

    Mha?????a cosa pensavi mentre scrivevi la funzione len????
    poi che razza di compilatore usi? o forse non l'hai nemmeno compilato!anche perchè non avresti potuto farlo!

    comunque un'abbozzo potrebbe essere questo:
    
    #include<stdio.h>
    #include<ctype.h>
    #define MAX 230
    
    int len(char *s)
    {
        char* sk=s;
        while (*sk!='\0')sk++;
        return sk-s;
    }
    
    int confronta(char *a, char *b, int x)
    {
        if (x==0) return 1;                //Se x == 0, la funzione ritorna 1
        if (a==NULL || b==NULL) return 0;  //Se le due stringhe sono non nulle
        if (*a=='\0' || *b=='\0') return 0;//Se b oppure a sono una stringa di lunghezza nulla
        if (x>len(a) || x>len(b)) return 0;    //x e' maggiore della lunghezza di una delle due stringhe
    
        for(;x>0;a++,b++,x--)
            if (*a!=*b) return 0;
    
        return 1;
    }
    
    int main()
    {
        char a[MAX], b[MAX];
        int x;
    
        printf("inserisci una stringa:");
        scanf("%s",a);
    
        printf("inserisci la seconda stringa:");
        scanf("%s",b);
    
        printf("inserisci un numero:");
        scanf("%d", &x);
    
        printf("la funzione ritorna %d\n", confronta(a,b,x));
    
        return 0;
    }
    
  • Re: Semplice programmino in C

    Grazie a tutti intanto! effettivamente ho notato che la funzione len() non fa quello che mi ero promesso.. come programma uso CODE BLOCK o una roba del genere e come compilatore GCC ho impostato.. usavo ubuntu, ma ora sono sotto windows 7.
    Comunque perché è sbagliata la funzione len()? mi sembrava avesse senso..

    grazie ancora..
  • Re: Semplice programmino in C

    CHE STUPIDO!!!! scusate, ma mi sono reso conto che len() non funziona perché ho digitato il while sbagliato.. dovevo scrivere:

    while (s[t]!='\0')
    t++;

    return t;
Devi accedere o registrarti per scrivere nel forum
5 risposte