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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 ... 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [41] 42 43 44 45 46 47 48 49 50 51
401  Programación / Programación C/C++ / Re: Incrementando en fichero en: 19 Agosto 2012, 02:31 am
no entiendo por que en los fread() le pasas &ptr. ptr es un puntero a int, el cual no inicializas ya sea diciendole que apunte a alguna variable o reservandole memoria, y encima lo pasas por referencia con lo que a fread() le estas pasando la direccion de memoria del puntero :huh:

luego dentro del while tampoco entiendo cual es la finalidad de ptr=&ultimo, o directamente para que usas el puntero ptr. ademas, por cada caracter que lees, sumas 1 a "ultimo", cuando por cada linea deberias sumar 1. si la estructura del fichero siempre es 1 numero, 1 espacio, y luego una frase, podrias leer caracter por caracter, y si este es igual a '\n' sumar 1 a "ultimo".

ademas que abres el fichero 2 veces, podrias abrirlo solo 1 vez en modo lectura y escritura y con fseek() cuando lo necesites te situas al final de este.

en fin, que no me aclaro mucho con tu codigo... quizas soy yo asi que esperemos a que alguien mas conteste porque seguramente se me hayan pasado varias cosas.

un saludo!

edito: tenia ganas de programar algo y me puse con tu ejercicio. te dejo el code por si te sirve. este incluye la frase que se le pase por linea de comandos entre "" en el archivo con el numero que le toque al inicio.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char** argv) {
  5.  
  6. char fichero[]="prueba.txt", aux;
  7. unsigned int num=0, i;
  8. FILE *f;
  9.  
  10. //comprobaciones de error
  11. if (argc != 2) {
  12. printf("MODO DE USO: %s \"frase\"\n", argv[0]);
  13. exit(0);
  14. }
  15.  
  16. if (!(f=fopen(fichero, "r+"))) {
  17. printf("ERROR: No se pudo abrir %s.\n", fichero);
  18. if (!(f=fopen(fichero, "w"))) {
  19. printf("ERROR: No se pudo crear %s.\n", fichero);
  20. exit(1);
  21. } else printf("Fichero %s creado.\n", fichero);
  22. }
  23.  
  24. //lineas totales en el archivo
  25. do {
  26. i=fread(&aux, sizeof(char), 1, f);
  27. if (aux == '\n') num++;
  28. } while (i > 0);
  29. if (num == 0) num++;
  30.  
  31. //escribimos el numero y la frase
  32. fprintf(f, "%u %s\n", num, argv[1]);
  33.  
  34. fclose(f);
  35. return 0;
  36. }
  37.  
402  Programación / Programación C/C++ / Re: suma matrices en: 19 Agosto 2012, 01:28 am
ya y yo tambien creia eso, pero cogi su codigo y lo copie, compile solo cambiando un par de cosas por no estar en windows, y corria perfectamente, de ahi que dude. sabes por que funciona aunque recomienden no hacerlo?

gracias y un saludo!
403  Programación / Programación C/C++ / Re: suma matrices en: 18 Agosto 2012, 20:58 pm
para sumar 2 matrices deben tener la misma dimension. luego en tu codigo usas la libreria conio.h, algo que no se recomienda por el foro mas que nada porque no es una libreria estandar (diria, yo no uso windows y la verdad no lo se seguro, pero diria que es eso). ademas, creo que la usas para la funcion getch(), y es que tienes una equivalente en la libreria estandar stdio.h que es getchar(). luego yo no estoy muy a favor de usar variables globales, y menos para contadores y demas. si es imprescindible pues si... pero en este caso no lo veo asi. ademas, tus 2 funciones de generar matrices son exactamente la misma, solo cambia el nombre de la variable. por que no haces una solo un poco mas generica y la aplicas a las variables que quieras?

para acabar, no sabia que se podia pedir la dimension de un arreglo y luego declarar la variable estaticamente en medio del codigo. si alguien experto puede aclararme esta duda se lo agradeceria, ya que yo en estos casos suelo usar memoria dinamica.

te dejo el codigo probado:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int** GenerarMatriz(int n); //funcion que devuelve un apuntador a un array de apuntadores
  6. void SumarMatrices(int** m1, int** m2, const int n); //funcion que toma como parametros un apuntador a un array de apunt.
  7.  
  8. int main() {
  9.  
  10. int **matriz1=NULL, **matriz2=NULL, n; //se inicializan los apuntadores a apuntadores con NULL para evitar posibles problemas
  11. srand(time(NULL));
  12.  
  13. printf("Dimension de las matrices: ");
  14. scanf("%d", &n);
  15. printf("\n");
  16. while (getchar() != '\n'); //limpiamos el bufer stdin de basura, es buen habito ponerlo despues del scanf
  17.  
  18. matriz1=GenerarMatriz(n); //primera matriz
  19. matriz2=GenerarMatriz(n); //segunda matriz
  20. SumarMatrices(matriz1, matriz2, n);
  21.  
  22. free(matriz1); //siempre que se reserva memoria hay que liberarla al final
  23. free(matriz2);
  24. printf("Pulse enter para salir...");
  25. return 0;
  26. }
  27.  
  28. int** GenerarMatriz(const int n) {
  29.  
  30. int** matriz=NULL, i, j;
  31.  
  32. //se reserva memoria
  33. matriz=(int**)malloc(n*sizeof(int*)); //reservamos memoria para el array de apuntadores (seran las filas abc en el caso del ejemplo de abajo)
  34. for (i=0; i<n; i++)
  35. *(matriz+i)=(int*)malloc(n*sizeof(int)); //para cada apuntador en el array, le asignamos memoria (los vectores 123, 456, 789, o columnas de la matriz)
  36.  
  37. //aqui rellenamos cada elemento con un numero aleatorio
  38. for (i=0; i<n; i++) {
  39. for (j=0; j<n; j++) {
  40. *(*(matriz+i)+j)=rand()%16;
  41. printf("%d\t", *(*(matriz+i)+j));
  42. }
  43. printf("\n");
  44. }
  45. printf("\n");
  46. return matriz; //con esto hacemos que matriz1 (variable del main y primera matriz) apunte al mismo sitio que "matriz", la creada en esta funcion
  47. }
  48.  
  49. void SumarMatrices(int** m1, int** m2, const int n) {
  50.  
  51. int i, j;
  52.  
  53. for (i=0; i<n; i++) {
  54. for (j=0; j<n; j++) {
  55. printf("%d\t", (*(*(m1+i)+j))+(*(*(m2+i)+j)));
  56. }
  57. printf("\n");
  58. }
  59. printf("\n");
  60. }
  61.  

un saludo!
404  Programación / Programación C/C++ / Re: intercalar elemento en vector en: 16 Agosto 2012, 19:47 pm
vaya es verdad, me olvide del objetivo del programa y no cai...  :laugh:

un saludo!
405  Foros Generales / Foro Libre / Re: En terminos de seguridad informatica, ¿que significa DEFCON? en: 16 Agosto 2012, 16:17 pm
DEFCON (DEFense CONdition) se usa para referirse al nivel de alerta de algun sistema o algo asi. DEFCON 5 seria el nivel normal, en el que no hay peligro por decirlo de alguna manera; y DEFCON 1 seria la maxima alerta.

http://es.wikipedia.org/wiki/DEFCON
406  Programación / Programación C/C++ / Re: [?][C]¿Creación de procesos iniciales? en: 16 Agosto 2012, 05:51 am
que es exactamente lo que quieres hacer?

no se si te refieres a usar threads o hilos de ejecucion (1 proceso podria hacer varias cosas "a la vez"):

http://www.chuidiang.com/clinux/procesos/procesoshilos.php

o si te refieres a que un programa ejecute otro a parte y que de esta manera no sea un proceso hijo:

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/exec.htm

y no se me ocurren mas si ya has encontrado el fork().

un saludo!
407  Programación / Programación C/C++ / Re: intercalar elemento en vector en: 16 Agosto 2012, 05:38 am
Citar
Código
  1. /* buble  */
  2.  for(i=0; i < n_elem; i++)
  3.    for(j=0; j < n_elem; j++)
  4.      if (vec[i] < vec[j]) {
  5.        vec[i] ^= vec[j];
  6.        vec[j] ^= vec[i];
  7.        vec[i] ^= vec[j];
  8.      }

nunca habia visto esta manera de ordenar un arreglo y me la apunto :D

solo una cosa y es que diria que en un arreglo de int no hace falta reservar un espacio al final para un null. y si reservas memoria, asegurate al final de liberarla con free(vec).

un saludo!
408  Informática / Electrónica / Re: Como calcular la inductancia de una bobina? en: 15 Agosto 2012, 17:15 pm
Citar
t, j, W

t=tiempo. la intensidad y el voltaje son funciones del tiempo. en el ejercicio no lo necesitas para nada, ya que segun el enunciado consume una instensidad y la fuente entrega un voltaje constante.

j=indica que es un numero complejo. en matematicas teoricas se suele usar "i", aunque en fisica se suele utilizar la "j".

w= frecuencia angular. es la frecuencia en rad/s en vez de Hz.

en el caso de tu problema:

i=0.02A
v=12V
f=2000Hz

usando modulos se tiene que:
V=Z*i=w*L*i=2*pi*f*L*i -> L=47.7mH

no olvides que en alterna son fasores, numeros complejos con modulo y angulo, y que para resolver un circuito siempre hay que hacerlo con fasores. en este caso, solo hay una inductancia, y pasar la igualdad V=Z*I (fasores) a modulo queda igual ya que Z tiene un angulo de 90º y I de -90º. pero si tuvieras mas de un componente con diferentes inductancias o capacidades, entonces deberias plantear la ecuacion obligatoriamente en fasores. haciendo esto te ahorraras mucho de los errores mas comunes al tratar con corriente alterna.

un saludo!
409  Programación / Programación C/C++ / Re: Duda lista simple enlazada C en: 12 Agosto 2012, 00:58 am
no acabo de entender tu codigo, mezclas en asignaciones punteros y structs, ademas de que a mi parecer esta algo desordenado... para arreglar esto, deberias tener una funcion que te inserte 1 nodo en la lista, 1 funcion que te elimine 1 nodo de la lista, y una funcion que te elimine la lista entera. luego otra funcion que te permita buscar cosas en ella. te dejo la funcion para crear 1 nodo, con el trozo de codigo en el main para hacer n nodos, y asi veras donde te has equivocado.

Código
  1. struct lista* insertar_nodo(struct lista* l, struct dato x)
  2. {
  3. struct lista *q, *p;
  4.  
  5. q=(struct lista*)malloc(sizeof(struct lista)); // reservamos memoria para 1 nodo
  6.        //aqui rellenamos la estructura del nodo creado
  7. q->datos=x;
  8. q->sig=NULL; //NULL ya que sera el ultimo elemento de la lista
  9.  
  10. if (l == NULL) return q; // si el puntero l de los parametros era NULL, retornamos el nodo creado ya que sera el unico elemento de la lista
  11.  
  12.        // si l ya tenia nodos, buscamos el ultimo para poder añadir el nuevo nodo
  13. p=l; //no usamos q ya que necesitamos la direccion del nuevo nodo creado
  14. while (p->sig != NULL) p=p->sig; //buscamos el ultimo nodo de la lista
  15. p->sig=q; //al ultimo nodo le asignamos a siguiente el nuevo nodo q
  16.  
  17. return l; //retornamos l, q era tanto parametro de la funcion como el valor de retorno
  18. }

y en el main, se usaria de esta manera para crear una lista con n nodos:
Código
  1. struct lista {
  2. struct dato datos;
  3. struct lista *sig;
  4. };
  5.  
  6. int main() {
  7.        struct dato d;
  8. struct lista *l=NULL;
  9.  
  10.        //(codigo.....)
  11.  
  12.        for (i=0; i<n; i++)
  13. l=insertar_nodo(l, d);
  14.  
  15.        //(Codigo.....)
  16. }

si quieres que te pase el codigo entero dimelo, era un problema bastante divertido que posteo un usuario el foro hace tiempo, aunque es algo largo y por eso no lo postee. un saludo
410  Programación / Programación C/C++ / Re: Iniciar una aplicacion con linux. en: 11 Agosto 2012, 17:27 pm
para hacerlo desde codigo podrias mirar estas funciones:
http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/exec.htm

aunque extrayendo el siguiente parrafo de aqui:
"Running a shell command in a child process is generally more useful than simply using the exec subroutine, as shown in this example. The simplest way to do this is to use the system subroutine."

yo entiendo que para solo correr un comando de terminal en el programa, lo mejor es usar system().

y para que arranque, pues no uso linux asi que no puedo probarlo, pero podrias probar lo que se dice aqui:
http://stackoverflow.com/questions/7221757/run-automatically-program-on-startup-under-linux-ubuntu

un saludo!
Páginas: 1 ... 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [41] 42 43 44 45 46 47 48 49 50 51
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines