File sequenziale.... boh..

ing_mecc
ora mi sono imbattuto in un file sequenziale......

"Si scriva un programma modulare in che legga dal file input.dat una sequenza di parole e le trascrive sul file output.dat dopo aver fatto scorrere di k posizioni ciascuna parola verso destra (k intero e specificato dall'utente)."

mi sono perso sul fatto di leggere da un file e scrivere in un altro...... questo è quello che ho scritto io... ho scelto le dimensioni delle parole (cioè dei vettori) a caso...

#include

main ()

{

char parola_1[20];
char parola_1[10];
char parola_1[30];
FILE *finput;
int k;

printf("Leggo le parole dal file, le faccio scorrere verso destra e le copio");

if ((finput = fopen("input.dat","r"))==NULL) /* apro finput in lettura */
printf("Il file non può essere aperto");

else
{
printf("Inserire il valore di k:\n");
scanf ("%d", &k);

/* e da qui ...... l'oblio */




:shock:

Risposte
Nidhogg
char parola_1[20];
char parola_1[10];
char parola_1[30];

Questa dichiarazione non va bene perchè ci sono tre variabili con nome uguale. Poi per scorrere verso destra cosa intendi.

Questo: parola -> ____parola (_ indico lo spazio) di 4 posizioni?

ing_mecc
grazie per la risposta veloce... allora... riparo agli effetti del sonno....

1) char parola_1[20];
char parola_2[10];
char parola_3[30];
i valori dentro le parentesi li ho messi a caso visto che le parole sono già dentro input.dat

2) credo sia così : parola___parola___parola___ gli spazi sono dati dai k.. il prof non è stato chiaro....

gigilatrottola2
Si infatti nn è proprio chiarissima la storia del far scorrere le parole. All'inizio pensavo una cosa cosi:

dato "ciao" falla scorrere di 2 diventa "ci"

I prof si sprecano sempre poco nel chiarire le cose :\

ing_mecc
intanto..... il far scorrere le parole c'entra qualcosa con il bitwise???? (operatore >>) io credo di no , ma un mio amico dice di si..... a chi devo credere??? a me stesso e al mitico forum o a quel salame?? :roll: :roll:

gigilatrottola2
>dopo aver fatto scorrere di k posizioni ciascuna parola verso destra

Generalmente il far scorrere fa venire in mente la manipolazione a livello di bit (e quindi l'uso di >>)
ma qui lui parla di posizioni... per questo ti chiedevo se si riferisse alle lettere

Io pensavo ad uno scorrimento a livello di caratteri piu che di bit... dovresti informarti su cosa è veramente da fare :)

lorven
Il problema pare chiaro: trattandosi di parole, bisogna far scorrerne le lettere a destra; ha poco senso shiftare i bit delle singole lettere. Posto un programma C che effettua lo scorrimento a destra con recupero a sinistra (non inteso in ambito politico! :lol: ).

/* "Si scriva un programma modulare in C che legga dal file input.dat una
    sequenza di parole e le trascrive sul file output.dat dopo aver fatto
    scorrere di k posizioni ciascuna parola verso destra
    (k intero e specificato dall'utente)."
*/


#include <stdio.h>
#define dim  20

char par[dim];
char c;
FILE* fp1;
FILE* fp2;

void scorri(int n)
{
char x;
char par2[dim];
int i,j;
int l;

l=strlen(par);
for (i=0;i<=l;i++) par2[i]=par[i];
for (i=1;i<=n;i++) {
     x=par[l-1];
     for (j=l-1;j>=0;j--) {
          par[j]=par[j-1];
     }
     par[0]=x;
}
printf("input : %s", par2);
printf(" | output: %s\n", par);
c=getchar();

return;
}

void main()
{
  int k;

  fp1 = fopen("input.dat", "r");
  fp2 = fopen("output.dat", "w");
  if (fp1 == NULL || fp2 == NULL) {
    printf("Errore nell'apertura dei file!");
    c=getchar();
    return 0;
  }

  printf("k? ");
  scanf("%u",&k);

  while (!feof(fp1)) {
     fscanf(fp1,"%s\n",par);
     scorri(k);
     fprintf(fp2,"%s\n", par);
  }

  fclose(fp1);
  fclose(fp2);
 
  return 0;
}


E' facilmente modificabile se non si vuole lo scorrimento "rotatorio" con recupero a sinistra. :-)

ing_mecc
che devo dirti lorven..... grazie!!! :-D :-D

stellacometa
Come sempre il nostro caro lorven ci dimostra grande cultura informatica!!! :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.