Suma de ascii

Iniciado por sheva777, 31 Marzo 2013, 00:08 AM

0 Miembros y 1 Visitante están viendo este tema.

sheva777

Lo que pasa es que tengo que crear un programa que lea un archivo de entrada y me genere otro de salida el código de dispersión de cada una de las cadenas calculado de la siguiente forma: Sume los ASCII de los caracteres de cada cadena y al final saque módulo 131. Por ejemplo, para la cadena "enero" los ASCII son 101, 110, 101, 114 y 111, por lo que la suma es 537 y al sacar módulo 131 se obtiene 13.

He creado el programa pero solo me saca el resultado de enero correctamente y los demas ya no, mi duda es por que es que pasa esto. Les dejo el codigo que he creado, espero y me puedan orientar para resolver la duda, de ante mano muchas gracias.

archivo de entrada

enero
febrero
marzo
abril

me genera este archivo de salida

13 ese valor es el único correcto
99
128
126
40

codigo

#include<stdio.h>
#include<math.h>
#include<string.h>

char cadena[30];
int y;
int i;
int resultado;
int l;
main()
{

        int i=0;
        int y=0;
        char nombreArchivoLectura[10];
        char nombreArchivoEscritura[10];
        FILE *archivoLectura=NULL;
        FILE *archivoEscritura=NULL;

       
        archivoLectura=fopen("entrada.txt","r");
       
       
        archivoEscritura = fopen("salida.txt","w");
       
        while(archivoLectura == NULL)
   {
    printf("El archivo no pudo abrirse\n");
    printf("Nombre de arcivo de Lectura con extension:");
    scanf("%s",&nombreArchivoLectura);
         }

        while(!feof(archivoLectura))
   {
           fscanf(archivoLectura,"%[^\n]\n",cadena);
   l=strlen(cadena);
        for(i=0;i<l+1;i++)
        {
                y=y+cadena;         
       
        }
        printf("---------------------------------------\n");
        resultado=y%131;   
       fprintf(archivoEscritura,"%d\n",resultado);
       
}       
fclose(archivoLectura);
fclose(archivoEscritura);   
       


}


BatchianoISpyxolo

#1
Fíjate que la y sólo la inicializas cuando la declaras, por eso para el primer caso te funciona. Luego vas arrastrando el valor de y en cada solución... Recuerda que sumas los valores ascii de caracteres... (cadena)

Ahora debería funcionar...

#include<stdio.h>
#include<math.h>
#include<string.h>

char cadena[30];
int y;
int i;
int resultado;
int l;
int main() {

    int i=0;
    int y;
    char nombreArchivoLectura[10];
    char nombreArchivoEscritura[10];
    FILE *archivoLectura=NULL;
    FILE *archivoEscritura=NULL;
    archivoLectura=fopen("in.txt","r");
    archivoEscritura = fopen("salida.txt","w");

    while(!feof(archivoLectura)) {
        y=0;
        fscanf(archivoLectura,"%[^\n]\n",cadena);
        l=strlen(cadena);
        printf("%s: ", cadena);
        for(i=0;i<l+1;i++) y+=(int)cadena[i];
        printf("\n---------------------------------------\n");
        resultado=y%131;
        fprintf(archivoEscritura,"%d\n",resultado);
    }
    fclose(archivoLectura);
    fclose(archivoEscritura);
    return 0;
}
Puede que desees aprender a programar desde 0: www.espascal.es

sheva777

tenias razon ese era mi error, muchas gracias por resolverme la duda, ya quedo  ;-)

do-while

¡Buenas!

Revisa el código.

A parte de lo que ya te han dicho, aquí tienes un posible bucle infinito:

while(archivoLectura == NULL)
{
    printf("El archivo no pudo abrirse\n");
    printf("Nombre de arcivo de Lectura con extension:");
    scanf("%s",&nombreArchivoLectura);
}


Si el archivo desde el que lees los datos no puede abrirse, por mucho que leas el nuevo nombre de fichero,  si no intentas abrir de nuevo el fichero el puntero seguirá siendo NULL.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!