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


 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con ejercicio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con ejercicio  (Leído 2,321 veces)
jorgemela

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Ayuda con ejercicio
« en: 20 Diciembre 2010, 20:33 »

hola, mi nombre es Jorge y soy estudiante de ingenieria informatica, primero decir que soy bastante novato en el tema, alla va el ejercicio:

Este ejercicio trata de realizar un script denominado bocabajo en C que coja un fichero y le de la vuelta de manera que las lineas que habia escritas en él queden la primera la ultima, la segunda la penultima y asi sucesivamente, es decir, un ejemplo seria el siguiente:

cat fich1
uno
dos
tres
cuatro

./bocabajo fich1
cuatro
tres
dos
uno

eso es lo que debe realizar el script, y se supone que hemos de utilizar memoria dinamica, al no saber muy bien como va el tema de memoria dinamica, estoy haciendo el script primero sin utilizar memoria dinamica para ver si consigo hacerlo y me da error de segmentacion, tras un tiempo pensando se me ocurrio que podria crear un array bidimensional(se me olvido mencionar, cada linea de fichero tiene un maximo de 2048 caracteres), y mientras voy leyendo las lineas del fichero, ir guardandolas en este array, y luego imprimir el array desde la ultima posicion hasta la primera, el problema es que no estoy muy familiarizado con arrays bidimensionales y tengo lagunas tambien con punteros, asique aqui adjunto mi codigo de lo que he hecho, y a ver si alguien me puede echar una mano, gracias de antemano :):

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. /////////PROGRAMA PRINCIPAL/////////
  6.  
  7. int main(int argc, char* argv[]){
  8.  
  9.  
  10. //declaracion parametros a usar//
  11. FILE *pm;
  12. char lineafile [2048];
  13. char linea [100][2048];///lo he puesto para un maximo de 100 lineas al no usar memoria dinamica de momento
  14. int n;
  15. int c;
  16. pm = fopen(stdin,"rt");
  17. while(fgets(lineafile,2048,pm)!=NULL){
  18. for(n=0;n<=2048; ++n){
  19. strcpy(linea[n],lineafile);
  20. }
  21. }
  22. for(c=2048;c>=0;--c){
  23. printf("%s\n",linea[c]);
  24. }
  25. fclose(pm);
  26. }

he probado con el debuger y me da que el fallo de segmentacion esta en el fgets, y he cambiado tambien algo el programa para quitarme del medio el for de dentro del while, ha quedado asi, pero nose como quitar el error de segmentacion ese la verdad:

Código
  1. /////////LIBRERIAS DECLARADAS PARA USAR STRINGS Y COMANDOS ESPECIFICOS DE STRINGS Y PARA SACAR POR PANTALLA/////////
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. ////////FUNCION BOCABAJO//////////
  6.  
  7. /*void bocabajo(FILE *pm){
  8. }*/
  9.  
  10. /////////PROGRAMA PRINCIPAL/////////
  11.  
  12. int main(int argc, char* argv[]){
  13.  
  14.  /////////FUNCIONACA//////////
  15.  
  16. //declaracion parametros a usar//
  17. FILE *pm;
  18. //int args;
  19. char lineafile[2048];
  20. int contador=0;
  21. char linea [100][2048];
  22. int n;
  23. int c;
  24.  
  25. pm = fopen(stdin,"rt");
  26. while(fgets(lineafile,2048,pm)!=NULL){
  27. strcpy(linea[contador],lineafile);
  28. contador++;
  29. }
  30. for(c=contador;c>=0;--c){
  31. printf("%s\n",linea[c]);
  32. }
  33. fclose(pm);
  34. }

Lh: Utiliza las etiquetas GeSHi para poner código y no hagas doble post, utiliza el botón modificar.


« Última modificación: 21 Diciembre 2010, 01:48 por Littlehorse » En línea

diskontrol

Desconectado Desconectado

Mensajes: 89


RAWR!


Ver Perfil
Re: Ayuda con ejercicio
« Respuesta #1 en: 21 Diciembre 2010, 01:12 »

Citar
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/////////PROGRAMA PRINCIPAL/////////

int main(int argc, char* argv[]){



FILE *pm;
char lineafile [2048];
char linea [100][2048];
int n;
int c;
pm = fopen(stdin,"rt"); // aquí tienes que abrir fich1, rt es un parámetro válido para fopen?
while(fgets(lineafile,2048,pm)!=NULL){ // el while hace el bucle un numero de veces = a las lineas
for(n=0;n<=2048; ++n){                        // por lo que el bucle for se ejecuta siempre 2048 * 4, además
strcpy(linea[n],lineafile);                      // únicamente tienes 100 lineas no 2048...
}
}
for(c=2048;c>=0;--c){                   //lo mismo en el número de lineas la matriz tiene 100
printf("%s\n",linea[c]);                  //sin embargo solo de debe ejecutar el número de lineas copiadas
}
fclose(pm);
}


Por lo que quedaría más o menos así

Citar
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/////////PROGRAMA PRINCIPAL/////////

int
main ()
{

  FILE *pm;
  char lineafile[2048];
  char linea[100][2048];   
  int n = 0;
  int c;
  pm = fopen ("fich1", "rt");
  while (fgets (lineafile, 2048, pm) != NULL) //así el bucle se ejecuta únicamente el número de veces
    {                                                               //que copia linea
      strcpy (linea[n], lineafile);
      n++;                                                      /en n contamos el número de lineas
    }
  fclose (pm);
  for (c = n; c >= 0; c--)                           //así podemos imprimir únicamente lo necesario
    {
      printf ("%s", linea[c]);
    }
return 0;}



Espero haberte sido de ayuda, a ver que tal se te da implementarlo con memoria dinámica.


Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.


En línea

Siempre ten tus cosas cuando las necesites con @Dropbox. ¡Una cuenta de 2 GB es gratis! http://db.tt/YxRhsCI
jorgemela

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ayuda con ejercicio
« Respuesta #2 en: 21 Diciembre 2010, 01:42 »

muchas gracias diskontrol, pero al final acabe solucionandolo solo, ejecuté el debuger y daba error al meter en el fopen el stdin, y con razon, ya que el stdin es un tipo string, y lo que tiene  que ir en ese lugar en el fopen, debe ser un fichero, asi que lo corregi y puse un bucle para los argumetos y ya me lo hace todo perfecto, muchas gracias, ahora me toca hacerlo con memoria dinamica.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda] Ejercicio C 100
Ejercicios
Dem0ny 2 4,492 Último mensaje 19 Diciembre 2007, 22:45
por Dem0ny
Ayuda co un ejercicio de C#
.NET (C#, VB.NET, ASP)
hitori batusai 2 3,962 Último mensaje 22 Febrero 2008, 01:53
por hitori batusai
Ayuda con ejercicio de VB
Programación Visual Basic
guada_sp 5 2,197 Último mensaje 8 Marzo 2008, 02:54
por ‭‭‭‭jackl007
Ayuda con ejercicio
.NET (C#, VB.NET, ASP)
elbrunosimpson 4 2,037 Último mensaje 4 Septiembre 2008, 23:16
por Meta
[Ejercicio] Aca tienen un ejercicio para practicar « 1 2 3 »
Programación Visual Basic
Dreamaker 20 11,986 Último mensaje 5 Septiembre 2010, 02:57
por TGa.
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines