elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ejercicios en c
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ejercicios en c  (Leído 11,407 veces)
ksiksi

Desconectado Desconectado

Mensajes: 3


Ver Perfil
ejercicios en c
« en: 15 Junio 2011, 19:12 pm »

Estoy trabado en una practica de la facultad:

Hacer una función que permita insertar en una secuencia de dígitos los caracteres guión cada 8 dígitos a partir del cuarto dígito, y un espacio cada 8 dígitos a partir del octavo dígito. Si la cantidad de dígitos no es múltiplo de ocho agregar delante de la cadena caracteres ‘0’ hasta que la misma sea múltiplo de 8.

   Ejemplos:   472348237388539055823012->4723-4823 7388-5390 5582-3012
      8237388539055823012      ->0000-0823 7388-5390 5582-3012

la idea es no usar la libreria string.h
#include <stdio.h>
int main () {
int i, j;
char numeros[100];
FILE *F;
F=fopen("numeros.txt", "r");
fgets(numeros,100,F);
while(numeros){
i++;}
/********************
y acá es donde no sé como continuar. En i me queda la cantidad de caracteres. Cómo compruebo que es multiplo de 8, con un while (i%8)?, no sé, la verdad, no tengo idea. 

*/


return 0}

PD: Notaron que stdio. Se lee: esetedio. Bueno, así se siente. Mucho tedio. ése tedio


« Última modificación: 15 Junio 2011, 19:23 pm por ksiksi » En línea

Don Pollo

Desconectado Desconectado

Mensajes: 74

/* No comments */


Ver Perfil
Re: ejercicios en c
« Respuesta #1 en: 15 Junio 2011, 19:27 pm »

Primeramente deberás mirar si la longitud de la cadena es múltiplo de 8. Cuando ya hayas solucionado esto, puedes recorrerla con dos contadores, uno para contar los caracteres hasta el guión, y otro contando los caracteres hasta que toque el espacio.

Para saber si es múltiplo de 8 haces la comparación i%8==0, ya que el % lo que te devuelve es el resto de la división.


En línea

Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: ejercicios en c
« Respuesta #2 en: 15 Junio 2011, 19:30 pm »

Estoy trabado en una practica de la facultad:

Hacer una función que permita insertar en una secuencia de dígitos los caracteres guión cada 8 dígitos a partir del cuarto dígito, y un espacio cada 8 dígitos a partir del octavo dígito. Si la cantidad de dígitos no es múltiplo de ocho agregar delante de la cadena caracteres ‘0’ hasta que la misma sea múltiplo de 8.

   Ejemplos:   472348237388539055823012->4723-4823 7388-5390 5582-3012
      8237388539055823012      ->0000-0823 7388-5390 5582-3012

la idea es no usar la libreria string.h
#include <stdio.h>
int main () {
int i, j;
char numeros[100];
FILE *F;
F=fopen("numeros.txt", "r");
fgets(numeros,100,F);
while(numeros){
i++;}
/********************
y acá es donde no sé como continuar. En i me queda la cantidad de caracteres. Cómo compruebo que es multiplo de 8, con un while (i%8)?, no sé, la verdad, no tengo idea.

*/


return 0}

PD: Notaron que stdio. Se lee: esetedio. Bueno, así se siente. Mucho tedio. ése tedio

Para saber si es multiplo de 8 harias esto:

if(i%8 == 0){
tal cosa}

voy bastante mal,de momento tengo esto:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main () {
  4. int i, j;
  5. char numeros[100];
  6. FILE *F;
  7. char caracter = 'c';
  8. F=fopen("numeros.txt", "r");
  9. for(i=0;i<=strlen(numeros);i++){
  10.                    fgets(numeros,100,F);
  11.                    if ( i ==(i%8==0)){
  12.                         fwrite(&caracter,sizeof(caracter),1,F);
  13.                         }
  14.                         }
  15.                         fclose(F);
  16.                         getchar();
  17.                         return 0;
  18.                         }
  19.  
  20.  
   

PD:Te me adelantastes Don Pollo  :xD

Salu2
« Última modificación: 15 Junio 2011, 20:00 pm por Dark Invader » En línea

ksiksi

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: ejercicios en c
« Respuesta #3 en: 15 Junio 2011, 19:58 pm »

yo pensaba hacer un while (i%8) para saber la cantidad de 0 necesarios a agregar, pero me daba un numero muy grande, debo estar cansado asi que seguire la sugerencia de don pollo.
gracias.
En línea

Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: ejercicios en c
« Respuesta #4 en: 15 Junio 2011, 20:01 pm »

pero supuestamente no vas a poder usar la libreria string.h,que yo sepa para leer el tamaño de la cadena necesitas strlen,a menos que haya otro que no conozca.  :silbar:

Suerte
En línea

Queta

Desconectado Desconectado

Mensajes: 267



Ver Perfil
Re: ejercicios en c
« Respuesta #5 en: 15 Junio 2011, 20:46 pm »

Código
  1. int strlen(char *cadena)
  2. {
  3. char *ptr = cadena;
  4.  
  5. while(*ptr++);
  6.  
  7. return ptr - cadena;
  8. }

Ya tienes la función strlen sin necesidad de usar la librería string ;D.
« Última modificación: 15 Junio 2011, 20:52 pm por Queta » En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: ejercicios en c
« Respuesta #6 en: 15 Junio 2011, 22:10 pm »

Joer no está mal,no sabía de eso  :xD

No se si puedo preguntar en el post que ya ha hecho otra persona pero me gustaría saber una cosa...


   while(*ptr++);
 
   return ptr - cadena;

Mientras el valor almacenado en ptr aumente en 1, devuelve el valor de ptr - cadena,¿que da el resultado de ptr - cadena? :-\

Y luego lo de:

int strlen(char *cadena)

¿Habría que pasar la dirección de memoria de la cadena?.

Salu2 y gracias
En línea

fantasma306

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: ejercicios en c
« Respuesta #7 en: 16 Junio 2011, 13:54 pm »


Código
  1. int strlen(char *cadena)
  2. {
  3. char *ptr = cadena;
  4.  
  5. while(*ptr++);
  6.  
  7. return ptr - cadena;
  8. }
solo un pequeño fallo, al final del bucle tienes que desincrementar ptr, por que al ser un char* tambien cuenta el caracter '\0';

Mientras el valor almacenado en ptr aumente en 1, devuelve el valor de ptr - cadena,¿que da el resultado de ptr - cadena? :-\
En realidad el while no tiene cuerpo, por lo tanto no se puede decir que mientras el valor almacenado en ptr aumente de 1 devuelve el valor de ptr-cadena...

solo devuelve la resta al final, cuando el while termina.
Lo que quiere hacer nuestro camarada Queta, es que la direccion de memoria (ptr) incremente hasta llegar al final de la cadena, luego resta ambas direcciones lo que devuelve es el tamaño de la cadena... (no se si ha quedado claro)

PD: no se por que pero al llamar a la funcion de Queta, "strlen" no entra dentro de su funcion, sino que usara la funcion de la libreria string.h (y eso que no la he incluido).


saludos
En línea

Es mejor callar y que piensen que eres idiota a hablar y demostrarlo.
Queta

Desconectado Desconectado

Mensajes: 267



Ver Perfil
Re: ejercicios en c
« Respuesta #8 en: 16 Junio 2011, 14:58 pm »

solo un pequeño fallo, al final del bucle tienes que desincrementar ptr, por que al ser un char* tambien cuenta el caracter '\0';

Verdad; añade solamente después del while:

Código
  1. *ptr--;

Dark Invader, respondo a tu duda después, que ahora no puedo.
En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: ejercicios en c
« Respuesta #9 en: 16 Junio 2011, 15:58 pm »

solo un pequeño fallo, al final del bucle tienes que desincrementar ptr, por que al ser un char* tambien cuenta el caracter '\0';
En realidad el while no tiene cuerpo, por lo tanto no se puede decir que mientras el valor almacenado en ptr aumente de 1 devuelve el valor de ptr-cadena...

solo devuelve la resta al final, cuando el while termina.
Lo que quiere hacer nuestro camarada Queta, es que la direccion de memoria (ptr) incremente hasta llegar al final de la cadena, luego resta ambas direcciones lo que devuelve es el tamaño de la cadena... (no se si ha quedado claro)

PD: no se por que pero al llamar a la funcion de Queta, "strlen" no entra dentro de su funcion, sino que usara la funcion de la libreria string.h (y eso que no la he incluido).


saludos

Pero...para coger la cadena no habria que pasar como parametro la direccion de memoria de la cadena y luego esta funcion muestra lo que hay escrito dentro de esa memoria?.Es que entonces la 2 linea se podria suprimir...

De todas maneras no se porque incrementa el valor del puntero ptr y luego lo resta de la cadena...

Gracias a ambos.

Salu2
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pantallazos de ejercicios ejercicios 1 y 2 « 1 2 3 »
Ejercicios
soplo 25 98,605 Último mensaje 21 Marzo 2011, 21:15 pm
por hackvj
Ejercicios en C
Ejercicios
soplo 0 65,023 Último mensaje 2 Julio 2004, 00:28 am
por soplo
Ejercicios C++
Ejercicios
soplo 0 91,352 Último mensaje 5 Julio 2004, 06:08 am
por soplo
Ejercicios de ASP
Ejercicios
Cobac 0 18,163 Último mensaje 9 Julio 2004, 07:12 am
por Cobac
Ejercicios PHP
Ejercicios
Azielito 0 45,525 Último mensaje 17 Julio 2004, 10:53 am
por Azielito
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines