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 Temas
Páginas: 1 2 [3] 4 5
21  Programación / Programación C/C++ / Guardar la segunda diagonal de una matriz en: 4 Marzo 2012, 21:44 pm
Hola.

Estoy haciendo un ejercicio que tiene este enunciado:

"Escribir un programa que pida al usuario los datos de una matriz de tamaño 3x3, y
guarde en un vector la diagonal principal, y en otro la otra diagonal."

Tengo guardada en un vector la diagonal "Principal". Sin embargo, no se me ocurre cómo guardar la otra diagonal. Sé que tengo que obtener los números de la fila 0, columna 2; fila 1, columna 1; fila 2, columna 0. Pero no sé cómo hacerlo (me refiero a hacerlo con un bucle for, no a guardar de decir "diagonal2 = M[0][2] y eso).

Lo que tengo por ahora es:

Código
  1. /* Escribir un programa que pida al usuario los datos de una matriz de tamaño 3x3, y
  2. guarde en un vector la diagonal principal, y en otro la otra diagonal. */
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. int main()
  8. {
  9.    int i, j, aux, numero;
  10.    int M[3][3];
  11.    int diagonal1[3], diagonal2[3];
  12.  
  13.    for(i=0;i<3;i++)
  14.    {
  15.       for(j=0;j<3;j++)
  16.       {
  17.          printf("COLUMNA: %d\nFILA: %d\nNumero: ", i+1, j+1);
  18.          scanf("%d", &M[i][j]);
  19.          printf("\n");
  20.       }
  21.    }
  22.  
  23.    for(i=0;i<3;i++) diagonal1[i] = M[i][i];
  24.    //diagonal2 = ?
  25.  
  26.    printf("La primera diagonal es:\n");
  27.    for(i=0;i<3;i++) printf("%d ", diagonal1[i]);
  28.    printf("y la segunda:\n");
  29.    for(i=0;i<3;i++) printf("%d ", diagonal2[i]);
  30.  
  31.    system("pause");
  32.    return 0;
  33. }
  34.  

Muchísimas gracias.
Saludos.
22  Programación / Programación C/C++ / Problemas vectores en: 2 Marzo 2012, 18:50 pm
Hola.

Tengo un problema con los vectores. El enunciado del ejercicio es el siguiente:

Escribir una función que busque en un vector de números el máximo valor, e indique
su valor y posición. Se supone que el vector está desordenado.

Esto es lo que yo he intentado. Cuando compruebo el resultado no está bien.

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int maximapos (int V[], int n){
  5.  
  6. int i,mejor_valor;
  7.  
  8. mejor_valor=V[0];
  9.  
  10. for(i=0;i<n;i++) if (V[i]>mejor_valor) mejor_valor=i;
  11.  
  12.    return(mejor_valor);    
  13. }
  14.  
  15. int main (void){
  16.  
  17. int V[7]={12,15,3,64,6,2,1};
  18.  
  19. int mejor_posicion,mejor_valor,i;
  20.  
  21. mejor_posicion=maximapos(V,7);
  22.  
  23. mejor_valor=V[mejor_posicion];
  24.  
  25. printf("El mejor valor es %d y su posicion es %d",mejor_valor,mejor_posicion);
  26.  
  27. system("pause");
  28.  
  29. }
  30.  

Muchísimas gracias.

Saludos.
23  Programación / Programación C/C++ / ¿Printf y scanf en funciones? en: 11 Febrero 2012, 18:30 pm
Hola.

Leí hace tiempo en Internet que no se debía usar printf y scanf en funciones. Sin embargo, muchas veces veo códigos que los llevan.

Entonces, ¿es correcto usar printf y scanf en funciones?

Gracias.

Saludos.
24  Programación / Programación C/C++ / Problema en agenda con ficheros en: 7 Febrero 2012, 23:05 pm
Hola.

Haciendo un ejercicio me he encontrado una duda.

Es este:

Código
  1. /*Una agenda que maneje los siguientes datos: nombre, dirección, tlf móvil, email, y día,
  2. mes y año de nacimiento (estos tres últimos datos deberán ser números enteros
  3. cortos). Deberá tener capacidad para 100 fichas. Se deberá poder añadir un dato
  4. nuevo, visualizar los nombres de las fichas existentes, o mostrar todos los datos de una
  5. persona (se preguntará al usuario cual es el nombre de esa persona que quiere
  6. visualizar). Al empezar el programa, leerá los datos de un fichero llamado “agenda.dat”
  7. (si existe). Al terminar, guardará todos los datos en ese fichero.*/
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. int main()
  14. {
  15.    struct
  16.    {
  17.      char nombre[10];
  18.      char direccion[15];
  19.      int movil;
  20.      char email[20];
  21.      short int dia, mes, ano;
  22.    }datos[100];
  23.    char lineas[500];
  24.    FILE* fichero;
  25.    int opcion;
  26.  
  27.    fichero = fopen("agenda.dat", "rt");
  28.    if(fichero != NULL)
  29.    {
  30.  
  31.    while(! feof(fichero)) //Leemos los datos que contiene al principio
  32.    {
  33.      fgets(lineas,25,fichero);
  34.    }
  35.    fclose(fichero);
  36.  
  37.    printf("Elija una opcion\n");
  38.    printf("1. Introducir datos\n");
  39.    printf("2. Visualizar nombres de las fichas existentes\n");
  40.    printf("3. Mostrar todos los datos de una persona\n");
  41.    scanf("%d",&opcion);
  42.  
  43.    switch(opcion)
  44.    {
  45.      case 1:
  46.           //En construcción, lo editaré según las respuestas que obtenga al preguntaros.
  47.           break;
  48.      case 2:
  49.           //En construcción, lo editaré según las respuestas que obtenga al preguntaros.
  50.           break;
  51.      case 3:
  52.           //En construcción, lo editaré según las respuestas que obtenga al preguntaros.
  53.           break;
  54.      default:
  55.              printf("Opcion no valida");
  56.    }
  57.    }
  58.  
  59.  
  60.  
  61.  
  62.    system("pause");
  63.    return 0;
  64. }
  65.  
  66.  

La idea que estoy siguiendo es que primero abro el archivo en modo de lectura. Entonces pongo los casos en los que tiene que leer el archivo, y los casos en los que no. Cierro el archivo.

Después, creo un switch, en el que elijo una de las tres opciones, y ahí planteo cada cosa.

Y, finalmente, abro de nuevo el archivo, pero esta vez para escribir, y meto los datos obtenidos en el switch.

Mi problema es que no sé cómo hacer para que al cerrar el programa y volver a abrirlo sepa que ya he metido un número determinado de fichas (no sé si me explico). Creo que solo es con un do-while en el switch de "añadir datos", sumándole uno a "i", pero no estoy seguro.

También me gustaría saber si veis bien como he planteado el problema, para ver cómo puedo cambiar las cosas.

Muchísimas gracias.

Saludos.
25  Programación / Programación C/C++ / Problema en ejercicio de ficheros en: 4 Febrero 2012, 21:33 pm
Hola.

Estoy empezando con el tema de ficheros.

Tengo este ejercicio:

Código
  1. /*Un programa que pregunte un nombre de fichero y muestre en pantalla el contenido de
  2. ese fichero, haciendo una pausa después de cada 25 líneas, para que dé tiempo a
  3. leerlo. Cuando el usuario pulse intro, se mostrarán las siguientes 25 líneas, y así hasta
  4. que termine el fichero.*/
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10.  
  11. int main()
  12. {
  13.    FILE* fichero;
  14.    char nombre[50];
  15.    char linea[81];
  16.    char pausar[2];
  17.    int i;
  18.  
  19.    printf("Introduce un nombre");
  20.    fgets(nombre,49,stdin);
  21.    i=0;
  22. fichero = fopen(nombre, "rt");
  23. if (fichero == NULL)
  24. {
  25. printf("No existe el fichero!\n");
  26. exit(1);
  27. }
  28. while (! feof(fichero)) {
  29.                i=i+25;
  30. fgets(linea, i, fichero);
  31. puts(linea);
  32. do{
  33. gets(pausar);
  34. }
  35. while(strcmp(pausar,"")!=0);            
  36.  
  37. }
  38.  
  39. fclose(fichero);
  40.  
  41.    system("pause");
  42.    return 0;
  43. }
  44.  

Pero tengo varias cosas mal:

- Siempre me dice que el fichero no existe.
- No consigo que pare cada 25 líneas hasta que presione intro sin escribir nada (lo que he conseguido ha sido cada X letras...).

Muchas gracias.

Saludos.
26  Foros Generales / Foro Libre / Sobre la informática en: 31 Enero 2012, 22:56 pm
Hola.

Desde pequeño me gusta mucho la informática en general. Todavía tengo 14 años, y, aunque sé que es demasiado pronto para decidirlo, me gustaría estudiar Ingeniería Informática.

Estoy empezando a estudiar algo por mi cuenta, ya que me divierte bastante. Por ahora, estoy programando en C.

Lo que quería saber era qué campos de la Informática, a parte de la programación, puedo tocar con mi edad. Algo en lo que haya muchos libros en internet (para no agobiarme mucho buscándolos, porque, por ejemplo, he estado buscando libros de Fundamentos de Estructuras de Computadores, y poco he encontrado...).

Gracias.

Saludos.
27  Programación / Programación C/C++ / Comparando cadenas en: 22 Enero 2012, 01:17 am
Hola.

Estoy haciendo un problema que dice lo siguiente:

Un programa que pida 10 nombres y los memorice. Después deberá pedir que se teclee un nombre y dirá si se encuentra o no entre los 10 que se han tecleado antes. Volverá a pedir otro nombre y a decir si se encuentra entre ellos, y así sucesivamente hasta que se teclee “fin”.

Yo tengo esto:

Código
  1. /*Un programa que pida 10 nombres y los memorice. Después deberá pedir que se teclee
  2. un nombre y dirá si se encuentra o no entre los 10 que se han tecleado antes. Volverá
  3. a pedir otro nombre y a decir si se encuentra entre ellos, y así sucesivamente hasta que
  4. se teclee “fin”.*/
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10. int main(){
  11.  
  12.    char n1[20], n2[20], n3[20], n4[20], n5[20], n6[20], n7[20], n8[20], n9[20], n10[20], n11[20];
  13.    char n12[20]={"fin"};
  14.  
  15.    printf("Introduce un nombre");
  16.    gets(n1);
  17.    printf("Introduce otro nombre");
  18.    gets(n2);
  19.    printf("Introduce otro nombre");
  20.    gets(n3);
  21.    printf("Introduce otro nombre");
  22.    gets(n4);
  23.    printf("Introduce otro nombre");
  24.    gets(n5);
  25.    printf("Introduce otro nombre");
  26.    gets(n6);
  27.    printf("Introduce otro nombre");
  28.    gets(n7);
  29.    printf("Introduce otro nombre");
  30.    gets(n8);
  31.    printf("Introduce otro nombre");
  32.    gets(n9);
  33.    printf("Introduce otro nombre");
  34.    gets(n10);
  35.  
  36.  
  37.    do{
  38.    printf("Introduce un nombre para comprobar si se encuentra entre los anteriores");
  39.    gets(n11);
  40.    if((strcmp(n11,n1)||
  41.    strstr(n11,n2)||
  42.    strstr(n3,n11)||
  43.    strstr(n4,n11)||
  44.    strstr(n5,n11)||
  45.    strstr(n6,n11)||
  46.    strstr(n7,n11)||
  47.    strstr(n8,n11)||
  48.    strstr(n9,n11)||
  49.    strstr(n10,n11))==0) printf("El nombre se encuentra entre los anteriores\n");
  50.    else printf("El nombre no se encuentra entre los anteriores\n");
  51.  
  52.    }
  53.    while(n11!=n12);
  54.  
  55.    system("pause");
  56.    return 0;
  57.  
  58. }
  59.  
  60.  

Lo que me hace es que me reconoce si la primera palabra introducida (n1) es igual que la última (n11), pero con las demás no hace nada.

Además, al poner "fin", no finaliza el programa.

¿Alguien podría decirme cuál es mi problema?

Muchísimas gracias.

Saludos.
28  Programación / Programación C/C++ / Problema con strcat en: 21 Enero 2012, 23:58 pm
Hola.

Estoy realizando un programa que pida por separado tu nombre, día de nacimiento, y mes, y que después lo una en una sola cadena.

Yo tengo esto:

Código
  1.    strcat(aux, nombre);
  2.    strcat(aux, ", nacido el ");
  3.    strcat(aux, dia);
  4.    strcat(aux, "/");
  5.    strcat(aux, mes);
  6.  
  7.    printf("%s\n",aux);

Y, al compilar, si pongo, por ejemplo:

Nombre: Nombre
Día: 09
Mes: 12

Sale como resultado: "Nombre, nacido el /12". Falta el 09...

¿Qué estoy haciendo mal?

Gracias.

Saludos.
29  Programación / Programación C/C++ / Problema con funciones en: 21 Enero 2012, 00:02 am
Hola.

Hace tiepo hice un programa que consistía en crear el juego de la ruleta. Ahora que he empezado a ver el tema de funciones, me gustaría hacerlo de esta forma.

Mientras antes tenía esto en la función main:

Código
  1. if(opcion==1){
  2.    do{
  3.    printf("\nIntroduce un 0 si apuestas por par o un 1 si es por impar");
  4.    scanf("%d",&x);
  5.    }
  6.    while((x!=0)&&(x!=1));
  7.  
  8.    if((x==0)&&(dado%2==0)){
  9.    bolsa=bolsa+2*apuesta;
  10.    printf("\nHas acertado, es par. Ha salido %d. Su bolsa es de %d fichas", dado,bolsa);                                                
  11.    }
  12.    else{
  13.      if((x==1)&&(dado%2!=0)){
  14.      bolsa=bolsa+2*apuesta;
  15.      printf("\nHas acertado, es impar. Ha salido %d. Su bolsa es de %d fichas", dado,bolsa);                                                
  16.      }
  17.      else{
  18.        if((x==0)&&(dado%2!=0)){
  19.        printf("\nNo has acertado. Ha salido %d. Su bolsa es de %d fichas", dado,bolsa);                                                
  20.        }  
  21.        else{
  22.          if((x==1)&&(dado%2==0)){
  23.          printf("\nNo has acertado. Ha salido %d. Su bolsa es de %d fichas", dado,bolsa);                                                
  24.          }      
  25.        }  
  26.      }  
  27.  
  28.    }            
  29.  }

Ahora pongo lo siguiente en una función:

Código
  1. int opcion_1 (int x){
  2.    int dado,apuesta,bolsa;
  3.    srand(time(NULL));
  4.    dado= rand()%36;
  5.    do{
  6.    printf("\nIntroduce un 0 si apuestas por par o un 1 si es por impar");
  7.    scanf("%d",&x);
  8.    }
  9.    while((x!=0)&&(x!=1));
  10.  
  11.    if((x==0)&&(dado%2==0)){
  12.    bolsa=bolsa+2*apuesta;
  13.    printf("\nHas acertado, es par. Ha salido %d. Su bolsa es de %d fichas", dado,bolsa);                                                
  14.    }
  15.    else{
  16.      if((x==1)&&(dado%2!=0)){
  17.      bolsa=bolsa+2*apuesta;
  18.      printf("\nHas acertado, es impar. Ha salido %d. Su bolsa es de %d fichas", dado,bolsa);                                                
  19.      }
  20.      else{
  21.        if((x==0)&&(dado%2!=0)){
  22.        printf("\nNo has acertado. Ha salido %d. Su bolsa es de %d fichas", dado,bolsa);                                                
  23.        }  
  24.        else{
  25.          if((x==1)&&(dado%2==0)){
  26.          printf("\nNo has acertado. Ha salido %d. Su bolsa es de %d fichas", dado,bolsa);                                                
  27.          }      
  28.        }  
  29.      }          
  30.    }    
  31.  
  32. }
  33.  
  34.  return(0);    
  35. }

Y, después, voy a la función main, y pongo:

Código
  1. int main (void){
  2.  
  3.  int opcion_juego,apuesta,bolsa,x,dado;
  4.  srand(time(NULL));
  5.  dado= rand()%36;
  6.  
  7.  
  8.    mostrar_ruleta();
  9.    apostar_fichas(apuesta);
  10.    opcion(opcion_juego);
  11.    bolsa=bolsa-apuesta;
  12.    opcion_1(x); //Esto es lo referente a la funcion
  13.  
  14.  

Por favor, ¿alguien podría explicarme cuál es mi problema?

Muchas gracias.

Saludos.

EDITO: Acabo de conseguir que la función funcione dentro de main. Pero creo que las variables se lían unas con otras, porque me dice que la bolsa es "9857437" y que el número que ha salido es "487434"...

Gracias.
30  Programación / Programación C/C++ / Duda sobre Cuatro en línea en: 18 Enero 2012, 18:03 pm
Hola.


Hola.

Estoy haciendo el juego del 4 en raya.

Mi problema es que pregunto la columna en la que quiero poner la ficha, y "cae" a la de más abajo. Pero después, si meto la misma columna, en vez de caerme justo arriba de la ficha, "cae" en la misma casilla (las fichas son 1 y 2, según jugador 1 y jugador 2).

Mi código es:

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int main (void){
  5.  
  6.   int M[8][8];
  7.  
  8.  int i,j,col,jugador,s,fila,xd;
  9.  int v[col];
  10.  
  11.  
  12.  
  13.   for(i=0;i<8;i++){
  14.   for(j=0;j<8;j++){
  15.   M[i][j]=0;
  16.   }
  17.   }
  18.   jugador=1;
  19.  
  20.   do{    
  21.  
  22.  
  23.   for(i=0;i<8;i++){
  24.   for(j=0;j<8;j++){
  25.   printf("%d  ",M[i][j]);                
  26.   }  
  27.   printf("\n");                                  
  28.   }
  29.  
  30.   printf("Introduce la columna ");
  31.   scanf("%d",&col);
  32.  
  33.   col=col-1;
  34.  
  35.   fila=7;
  36.  
  37.   M[fila][col]=jugador;
  38.  
  39.   fila--;
  40.  
  41.  
  42.   printf("Introduzca un 0 si abandona o un 1 si quiere seguir jugando");
  43.   scanf("%d",&s);
  44.   jugador=3-jugador;
  45.   }while(s==1);
  46.  
  47.  
  48. system("pause");    
  49. }
  50.  

Muchas gracias.
Saludos.
Páginas: 1 2 [3] 4 5
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines