• Jueves 28 de Marzo de 2024, 10:51

Autor Tema:  Saludos Y ....  (Leído 1651 veces)

bernardo5304

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Saludos Y ....
« en: Domingo 16 de Enero de 2005, 23:13 »
0
Hola  :hola: , acabo de encontrar este foro y me a parecido muy bueno :rolleyes: , asi que me he registrado. Bueno me presento , mi nombre es Bernardo Reyes , tengo 17 años y estudio la carrera de Ing en Sistemas Computacionales.
Voy en primer semestre , es la primera vez que veo C , en el bachiller lleve Visual Basic :unsure: , bueno tengo varias dudas respecto del lenguaje. Tome un curso  :smartass: , para aprender un poco y , al menos tengo ciertas bases , pero me gustaria poder recurrir aqui para resolver algunas de mis dudas.
Bien , 1 duda :P  
Citar
Escriba un programa en C quq escriba en pantalla el codigo ASCII y el numero de veces que dicho caracter aparece en un archivo.
A mi se me ocurre guardar en un arreglo  todos los caracteres del ASCII , despues usando un puntero FILE y fopen abrir el archivo en modo lectura . Y despues.... ¿Como le hago para comparar EL ASCII almacenado en un arreglo con cada caracter que se halle en el archivo (archivo modo texto) , y mostrar el numero de ocurrencias por caracter?
Bueno , gracias por la ayuda de antemano :whistling:  :kicking:

rir3760

  • Miembro activo
  • **
  • Mensajes: 37
    • Ver Perfil
Re: Saludos Y ....
« Respuesta #1 en: Domingo 16 de Enero de 2005, 23:45 »
0
Si vas a utilizar un array de 256 elementos no necesitas realizar ninguna comparacion, solo incrementas el valor del elemento ascii[caracter], por ejemplo:

Código: Text
  1. /* codigo de inicio */
  2.  
  3. int c;
  4. long ascii[256];
  5.  
  6. /* mas codigo (abrir archivo, verificar errores, etc.) */
  7.  
  8. while ((c = getc(archivo)) != EOF)
  9.    ascii[c]++;
  10.  
  11. /* mas codigo (cerrar archivo, imprimir array, etc) */
  12.  

No olvides inicializar todos los elementos del array a cero.

Un saludo.
The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz

bernardo5304

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Saludos Y ....
« Respuesta #2 en: Lunes 17 de Enero de 2005, 01:43 »
0
Hola de nuevo . Estaba tratando de hacer este programa . Lo hacia por partes , y comprobaba si esa parte hacia lo que deberia .
Bueno , mi idea era hacer un array , para mostrar el caracter y el numero de ocurrencias.
Lo que el programa deberia de mostrar por ejemplo si tuviera un archivo "b.txt" , con el texto : Bernaardo05304
.
.
.
a=2
b=0
e=1
.
.
.B=1
.
.
.
Deberia de mostrar TODOS los caracteres del ASCII y mostrar cuantas veces aparece en un archivo de texto. :huh:
Mañan (o al rato) posteo lo que lleve y donde me atore , a ver si alguien me ayuda ;)

Bye :hola:
EDITO: Por cierto no entendi muy bien el mensaje anterior , podrias explicar que puedo hacer (ser mas detallado) :whistling:
Ahora si me voy :lol:

rir3760

  • Miembro activo
  • **
  • Mensajes: 37
    • Ver Perfil
Re: Saludos Y ....
« Respuesta #3 en: Lunes 17 de Enero de 2005, 16:13 »
0
Por partes:

* Primero tienes que declarar todas las variables que vas a utilizar en el programa y asignas el valor 0 a todos los elementos del array 'ascii'

* Despues abres el archivo en modo lectura y verificas el valor que te devuelve fopen, si el valor de retorno es NULL presentas un mensaje de error y sales del programa.

* En caso de que el programa se vaya a ejecutar en un sistema operativo Microsoft tienes que abrir el archivo en modo de lectura y binario, esto porque en dicho OS el caracter de linea nueva ('\n') son en realidad dos caracteres (retorno de carro y avance de linea).

* Realizas un ciclo (o bucle) en el cual vas leyendo el archivo caracter por caracter. Cada caracter va a servir de indice, en otras palabras:

Código: Text
  1. ascii['A']++;
  2.  
  3. /* es equivalente a: */
  4.  
  5. ascii[65]++;
  6.  

de esta forma en caso de que el caracter leido sea una 'A' el elemento 65 (o 'A') del array 'ascii' se incrementa en uno. Despues de leer todos los caracteres del archivo solo tenemos que imprimir los valores del array:

Código: Text
  1. /*imprimir numero de ocurrencias de los caracteres A..Z */
  2. for (i = 'A'; i <= 'Z'; i++)
  3.    printf("%c=%d\n", i, ascii[i];
  4.  

El codigo mencionado arriba es muy simplista, para imprimir todos los caracteres puedes utilizar las funciones declaradas en ctype.h como isprint(int c), iscntrl(int c), etc.

Un saludo
The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz