Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Programma C

    Salve gente, mi hanno consogliato questo forum perchè dicono che qui i sono i migliori e se avevo bisogno di una mano potevo rivolgermi qui.

    Il mio problema è questo:

    Devo fare un programma di crittografia in C, per fare questo ho bisogno di leggere una stringa in ingresso. Dividere in coppie di due lettere la stringa. Nel caso in cui le due lettere della coppia siano uguali inserire una X tra le due lettere.
    Ho quasi risolto il problema solo che se do una frase senza spazi tra le parole il programma fa quello che deve fare. Nel caso in cui metto gli spazi mi legge solo la prima parola.

    Come posso fare per risolvere il problema??

    Spero mi rispondiate ho unenorme bisogno di aiuto!!!

    Ciao Ragazzi!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se ci fai vedere il codice ...

    P.S. Hai letto il regolamento? Ti consiglio di farlo e di applicarlo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    Programma C

    Ecco il codice.
    PS.Scusate sono nuovo.
    #include <stdio.h>
    #include <string.h>
    void main()
    {
    char matrice [6][10]={{'Y','K','7','Z','S','G','X','H','Y','K'},
    {'O','8','J','E','Q','D','N','5','O','8'},
    {'W','P','U','3','A','R','F','L','W','P'},
    {'I','4','V','C','2','T','M','B','I','4'},
    {'Y','K','7','Z','S','G','X','H','Y','K'},
    {'O','8','J','E','Q','D','N','5','O','8'}};
    char c[50];
    char b[50];
    int ri[50];
    int co[50];
    int i,j,n,z,z1,k,y,rig,col,j2,i2;
    printf("La matrice di crittografia e':\n\n");
    for (i=1;i<5;i++)
    {
    for(j=1;j<9;j++)
    {
    printf("%c ",matrice [i][j]);
    }
    printf("\n\n");
    }
    printf("Inserire il messaggio da crittografare: ");
    scanf("%s",&c);
    printf("\n");
    n=strlen(c);
    for (i=0;i<n;i=i+2)
    {
    b[i]=c[i];
    b[i+1]=c[i+1];
    }
    printf("La parola suddivisa in coppia di lettere e':");
    for (i=0;i<n;i=i+2)
    printf("%c%c ",b[i],b[i+1]);
    printf("\n");
    z=0;
    for (i=0;i<n;i=i+2) /*Da qui estrapolare la function*/
    {
    if (c[i]==c[i+1])
    {
    b[(i+z)]=c[i];
    b[(i+1+z)]='X';
    b[(i+2+z)]=c[i];
    z1=z+1;
    z=z1;
    }
    else
    {
    b[(i+z)]=c[i];
    b[(i+1+z)]=c[i+1];
    }

    }
    k=(n+z);
    printf("\n");
    for (y=0;y<k;y++)
    {
    for (i=1;i<5;i++)
    {
    for (j=1;j<9;j++)
    {
    if (b[y]==matrice[i][j])
    {
    rig=i;
    col=j;
    ri[y]=rig;
    co[y]=col;
    }
    }
    }
    }
    printf("Gli indici riga e colonna sono: ");
    for(y=0;y<k;y++)
    printf("(%d.%d), ",ri[y],co[y]);
    printf("\n\n");
    for (y=0;y<k;y=y+2)
    {
    if (ri[y]==ri[y+1])
    {
    i=ri[y];
    j=co[y];
    j2=co[y+1];
    b[y]=matrice[i][j+1];
    b[y+1]=matrice[i][j2+1];

    }
    if (co[y]==co[y+1])
    {
    i=ri[y];
    i2=ri[y+1];
    j=co[y];
    b[y]=matrice[i+1][j];
    b[y+1]=matrice[i2+1][j];
    }
    if ((ri[y]!= ri[y+1])&&(co[y]!=co[y+1]))
    {
    i=ri[y];
    i2=ri[y+1];
    j=co[y];
    j2=co[y+1];
    b[y]=matrice[i][j2];
    b[y+1]=matrice[i2][j];
    }


    }
    printf("La parola criptata e':");
    for (y=0;y<k;y++)
    printf("%c",b[y]);
    printf("\n\n");
    for (y=0;y<k;y++)
    {
    for (i=1;i<5;i++)
    {
    for (j=1;j<9;j++)
    {
    if (b[y]==matrice[i][j])
    {
    rig=i;
    col=j;
    ri[y]=rig;
    co[y]=col;
    }
    }
    }
    }
    for (y=0;y<k;y=y+2)
    {
    if (ri[y]==ri[y+1])
    {
    i=ri[y];
    j=co[y];
    j2=co[y+1];
    b[y]=matrice[i][j-1];
    b[y+1]=matrice[i][j2-1];

    }
    if (co[y]==co[y+1])
    {
    i=ri[y];
    i2=ri[y+1];
    j=co[y];
    b[y]=matrice[i-1][j];
    b[y+1]=matrice[i2-1][j];
    }
    if ((ri[y]!= ri[y+1])&&(co[y]!=co[y+1]))
    {
    i=ri[y];
    i2=ri[y+1];
    j=co[y];
    j2=co[y+1];
    b[y]=matrice[i][j2];
    b[y+1]=matrice[i2][j];
    }
    }
    printf("La parola decriptata e': ");
    for (y=0;y<k;y++)
    printf("%c",b[y]);
    printf("\n\n");

    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non usare la scanf ma la

    fgets

    usando lo stdin
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5

    Programma C

    Potresti essere più chiaro.
    Purtroppo non sono molto esperto e sto cercando di imparare.
    Non chiamatemi rompipalle!!
    Grazie cmq per la risposta così veloce!!
    E' vero che qui ci sono i migliori!!!!!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Al posto della scanf utilizza la

    fgets(c, 50, stdin);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7

    Programma C

    L'ho inserita ma ora il programma si blocca!!
    Non capisco bene come utilizzare questa istruzione!!!

    Si blocca quando ricerca le lettere all'interno della matrice!!

    Bohh!!!Sono proprio scapace!!!
    Grazie lo stesso!!!

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Questa funzione non fa altro che prelevare da tastiera una stringa di lunghezza massima indicata (nel tuo caso 50 caratteri compreso il terminatore) e inserirli nella stringa indicata (nel tuo caso la c).

    A differenza della scanf, preleva anche gli spazi.

    Quindi, se c'e' un problema nel codice, questo e' dovuto alla presenza di spazi nella stringa inserita. Prova ad inserire solamente una parola e vedi se si comporta nella stessa maniera di prima e poi fai un po' di debug del codice per capire cosa succede.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9

    Programma C

    Grande!!!!!
    Riconoscendo anche gli spazi, posso fare una ricerca all'interno della mia variabile per trovarli.
    Posso cos' far scalare tutte le mie lettere di una posizione indietro, in modo tale da eliminare gli spazi, ma di poter scrivere il messaggio con gli spazi!!
    Grazie.

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.