• Sábado 4 de Mayo de 2024, 20:11

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - ermiguel1979

Páginas: [1] 2
1
C/C++ / Re: Eratostenes
« en: Sábado 12 de Junio de 2010, 20:16 »
Gracias por tu ayuda, lo pongo en práctica.

Un saludo!!

2
C/C++ / Eratostenes
« en: Jueves 6 de Mayo de 2010, 13:58 »
Un saludo a todos.
Tengo problemas para realizar un ejercicio sobre la criba de Eratóstenes que dice así:
La criba de Eratóstenes es una técnica para generar números primos. Se comienza escribiendo todos los enteros impares desde 3 hasta N; luego se elimina cada tercer elemento después de 3, cada quinto elemento despues de 5..., hasta que los múltiplos de todos los enteros impares menores de "la raiz cuadrada de N" hayan sido eliminados.

Mi problema está en que no cosigo eliminar dichos múltiplos. Deben aparecer en el vactor como -1.

Aquí está lo que llevo realizado:

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main (void){
  6.    
  7.     int N;                  
  8.    
  9.     int i;
  10.     int impar;
  11.     int vector[50];
  12.     int a=3;                
  13.    
  14.     printf("Indique el numero final (impar) N:");
  15.     scanf("%i", &N);
  16.    
  17.     for(i=0; i<=49; i++){
  18.         vector[i]=0;
  19.     }
  20.    
  21.    
  22.     for(i=0; i<=N; i++){
  23.         impar=2*((i+1)-1)+3;
  24.         if(impar<=N){
  25.             vector[i]=impar;
  26.         }
  27.     }
  28.    
  29.    
  30.     for(i=0; i<=N; i++){
  31.         if(vector[i]!=0){
  32.             printf(" %i", vector[i]);
  33.         }
  34.     }
  35.     printf("n");
  36.    
  37.    
  38.    
  39.     int j, k;
  40.     float b=sqrt(N);
  41.    
  42.        
  43.     for(j=0; j<=N; j++){
  44.         for(k=0; k<=N; k++){
  45.             if(vector[i]!=a && vector[i]<b && vector[i]%a==0){
  46.                 vector[i]=-1;
  47.             }
  48.         }
  49.         a=a+2;
  50.     }
  51.    
  52.    
  53.     for(i=0; i<=N; i++){
  54.         printf(" %i", vector[i]);
  55.     }
  56.     printf("n");
  57.    
  58.    
  59.    
  60.    
  61.     return 1;
  62. }
  63.  

Gracias a todos!!

3
C/C++ / Laberinto de letras
« en: Martes 26 de Enero de 2010, 09:58 »
Buenos días a todos, os mando un ejercicio que no me sale...
... tengo que hacer una matriz 5x5 de caracteres (B, A, D e I son las letras permitidas). Un algoritmo debe recorrer dicha matriz según unas indicaciones y decir por que columna se sale de dicha matriz.

El algoritmo tiene como entradas, la susodicha matriz y una posición 'n' de columna en la primera fila.
Las letras de la matriz tienen las siguientes órdenes:
I: se desplaza desde la posición actual a la casilla de la izquierda
D: se desplaza a la casilla de la derecha
A: se desplaza a la casilla de arriba
B: se desplaza a la casilla de abajo

El camino no puede salirse de la matriz ni por los lados ni por arriba, así que hay que tener cuidado de no colocar letras que hagan que eso ocurra.

Mi código es el siguiente (me dá problemas al comprobar, mediante funciones, lo correcto de las letras introducidas en la matriz):

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. /*---FUNCIÓN-confima-letra------------------------------------------------*/
  6. /*Evita que el camino se salga del tablero*/
  7. int confirmaletra (int i, int j, char letra){
  8.    
  9.     int a=1;            //tipo lógico inicializada en VERDADERO (1)
  10.        
  11.     if(i==0 && letra=='A'){         //comprueba que no haya A en la fila 1
  12.         a=0;
  13.     }else{
  14.         if(j==0 && letra=='I'){     //que no haya I en la columna 1
  15.             a=0;
  16.         }else{
  17.             if(j==4 && letra=='D'){     //que no haya D en la columna 4
  18.                 a=0;
  19.             }
  20.         }
  21.     }
  22.     return (a);
  23. }
  24. /*-------------------------------------------------------------------------*/
  25.  
  26. /*-------------FUNCIÓN-comprueba-letra-------------------------------------*/
  27. int compruebaletra (char letra){
  28.    
  29.     int a=1;
  30.    
  31.     if(letra!='A' || letra!='B' || letra!='D' || letra!='I'){
  32.             a=0;
  33.     }
  34.     return (a);
  35. }
  36. /*------------------------------------------------------------------------*/
  37.  
  38.  
  39. /*Algoritmo--> LABERINTO*/
  40. int main (void){
  41.    
  42.     char tablero[5][5];
  43.     int columna;
  44.     int fila=0;
  45.     char letra;
  46.     int i, j;                   //i--> contador fila; j--> contador columna
  47.    
  48.     printf("Rellene la matriz laberinto; introduzca letras A, B, D o In");
  49.     for(i=0; i<5; i++){
  50.         for(j=0; j<5; j++){
  51.             printf("letra[%i][%i]: ", i, j);
  52.             scanf("%c", &letra);            
  53.             while(!compruebaletra(letra)){
  54.                 printf("La letra NO es correcta, introduzca A, B, D o In");
  55.                 scanf("%c", &letra);
  56.             }
  57.             while(!confirmaletra(i,j,letra)){
  58.                 printf("La letra %c no puede ir en esa posicionn", letra);
  59.                 printf("Introduzca otra letra de las validas: ");
  60.                 scanf("%c", &letra);
  61.             }
  62.             tablero[i][j]=letra;
  63.         }
  64.     }
  65.     /*muestra el tablero*/
  66.     for(i=0; i<5; i++){
  67.         for(j=0; j<5; j++){
  68.             printf("%c ", tablero[i][j]);
  69.         }
  70.         printf("n");
  71.     }
  72.     printf("n");
  73.     /*se declara la columna de entrada y se comienza el laberinto*/
  74.     printf("Indique el numero de la columna inicial (de 1 a 5): ");
  75.     scanf("%i", &columna);
  76.     while(columna<1 || columna>5){
  77.         printf("columna no valida. Introduzca numero del 1 al 5n");
  78.         scanf("%i", &columna);
  79.     }
  80.     do{
  81.         switch(tablero[fila][columna-1]){
  82.             case 'I':
  83.                 columna=columna+1;
  84.                 break;
  85.             case 'D':
  86.                 columna=columna-1;
  87.                 break;
  88.             case 'A':
  89.                 fila=fila-1;
  90.                 break;
  91.             case 'B':
  92.                 fila=fila+1;
  93.                 break;
  94.         }
  95.     }while(!(fila==4));
  96.     printf("Usted ha salido por la columna %in", columna);
  97. }
  98.  
  99.  


Gracias por vuestra ayuda.

Un saludo!!

4
C/C++ / Re: Problemas con una sumatoria...
« en: Jueves 21 de Enero de 2010, 08:11 »
Lo siento, me he pasado con los subíndices, a ver si ahora sí. La sumatoria es:
SUMi=1...n (Xi * SUMk=1...i (Yk/Xi-k+1))

Saludos..

5
C/C++ / Problemas con una sumatoria...
« en: Jueves 21 de Enero de 2010, 08:07 »
Buenos días, necesito ayuda con un programa que, dados dos arrays X e Y de reales de tamaño n (ambos), calcule la siguiente sumatoria por medio de un subalgoritmo: SUMi=1...n (Xi * SUMk=1...i(Yk/Xi-k+1)).

Os envío el código que llevo, que tiene problemas a la hora de calcular la sumatoria. (Por cierto, donde puse SUM va el símbolo de sumatorio).

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. #define TAMA 20
  6.  
  7. /*---------FUNCION-sumatoria------------------------------------------------*/
  8. float sumatoria(float X[TAMA], float Y[TAMA], int n){
  9.    
  10.     float resultado=0;
  11.     int i, k;               //contadores de la sumatoria
  12.     float aux=0;
  13.    
  14.     for(i=0; i<n; i++){
  15.         for(k=0; k<i; k++){
  16.             aux=aux+(Y[k]/X[i-k+1]);
  17.         }
  18.     }
  19.    
  20.     for(i=0; i<n; i++){
  21.         resultado=resultado+(X[i]*aux);
  22.     }
  23.    
  24.     return resultado;
  25. }
  26. /*------------------------------------------------------------------------*/
  27.  
  28. /*Algoritmo--> SUMATORIAS*/
  29. int main (void){
  30.    
  31.     float X[TAMA], Y[TAMA];
  32.     int n;                      //nº terminos de la sumatoria
  33.     int tam;                    //tamaño de X e Y
  34.     float total;                //salida
  35.     int i;                      //contador de 1 hasta 'n'
  36.     int k;                      //contador de 1 hasta 'i'
  37.     int j;
  38.    
  39.     printf("Introduce numero de terminos de la sumatoria: ");
  40.     scanf("%i", &n);
  41.     printf("Introduce la dimension de los arrays X e Y: ");
  42.     scanf("%i", &tam);
  43.     printf("Complete array Xn");
  44.     for(j=0; j<tam; j++){
  45.         printf("elemento[%i]", j);
  46.         scanf("%f", &X[j]);
  47.     }
  48.     printf("Complete array Yn");
  49.     for(j=0; j<tam; j++){
  50.         printf("elemento[%i]", j);
  51.         scanf("%f", &Y[j]);
  52.     }
  53.    
  54.     total=sumatoria(X, Y, n);
  55.     printf("El total calculado es: %fn", total);
  56.    
  57.     return 0;  
  58. }
  59.  


El ejercicio tengo que entregarlo en PSEUDOCÓDIGO. Lo hice, lo he implementado con este código que os mando y eso es lo que hace.

Chicos, GRACIAS.

Un saludo!!

6
C/C++ / Re: Funcion que devuelve un vector...
« en: Miércoles 20 de Enero de 2010, 15:22 »
Buen detalle, lo copio... se me nota cada cantada....

Gracias por la atención!!

Un saludo.

7
C/C++ / Usar la impresora en C
« en: Sábado 16 de Enero de 2010, 21:08 »
Buenas noches. Quiero imprimir el resultado del programita que te saca los códigos ASCII, hexadecimal... y el comando para mostrarlos por pantalla en C. Para tener la lista en papel.

He hestado mirando, pero no dejan claro como utilizar la impresora. He probado algunos códigos, pero no funcionan. Necesito saber como declarar las órdenes y dónde tengo que ponerlas.

El código es el siguiente:

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <conio.h>
  4.  
  5. int main(){
  6.     int i;
  7.  
  8.     for(i = 0; i != 256; i++){
  9.         switch (i){
  10.             case 9:
  11.             printf("Caracter = 'tab' -- Dec = %i -- Hex = %X -- Oct = %o -- Escribir \x%x o \tn", i, i, i, i);
  12.             break;
  13.             case 10:
  14.             printf("Caracter = 'enter' -- Dec = %i -- Hex = %X -- Oct = %o -- Escribir \x%x o \nn", i, i, i, i);
  15.             break;
  16.             case 13:
  17.             printf("Caracter = 'retorno' -- Dec = %i -- Hex = %X -- Oct = %o -- Escribir \x%x o \rn", i, i, i, i);
  18.             break;
  19.             default:
  20.             printf("Caracter = %c -- Dec = %i -- Hex = %X -- Oct = %o -- Escribir \x%xn", i, i, i, i, i);
  21.             break;
  22.         }
  23.     }
  24.  
  25.     getch();
  26.     return 0;
  27. }
  28.  
  29.  

A ver si podeis orientarme.

Gracias y un saludo!!

8
C/C++ / Re: Funcion que devuelve un vector...
« en: Sábado 16 de Enero de 2010, 21:01 »
Buenas noches punteronulo, tu aporte me ha sido de grán ayuda, y aunque no lo he conseguido resolver igual, me ha dado la idea para encontrar una solución.

Al final mi código se ha quedado así:
Código: C
  1.  
  2. /*Ejercicio 17; práctica 5*/
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. #define TAMA 10
  8.  
  9. /*-----Funcion-submatriz-en-array------------------------------------------*/
  10. int subalgoritmo(int array[TAMA][TAMA], int fpe, int cpe, int fue, int cue, int vector[90]){
  11.        
  12.     int i, j, a=0;
  13.    
  14.     for(i=fpe-1; i<fue; i++){      
  15.         for(j=cpe-1; j<cue; j++){
  16.             vector[a]=array[i][j];          
  17.             printf("%i ", vector[a]);
  18.             a++;                            
  19.         }                           /*muestra el vector[90] en main()*/
  20.     }
  21.     printf("n");          
  22. }
  23. /*------------------------------------------------------------------------*/
  24.  
  25.  /*Algoritmo-> SUMATRIZ a VECTOR*/
  26. int main (void){
  27.    
  28.     int dimension;
  29.     int i, j;
  30.     int matriz[TAMA][TAMA];
  31.     int fpe, cpe;               //fpe ==  fila primer elemento
  32.     int fue, cue;               //cue == columna ultimo elemento
  33.     int vector[90];
  34.        
  35.     printf("Indique la dimension de la matriz cuadrada: ");
  36.     scanf("%i", &dimension);    
  37.     if(dimension<3 || dimension>10){
  38.         printf("El numero no es correcto. Debe estar entre 3 y 10. Repita: ");
  39.         scanf("%i", &dimension);
  40.     }
  41.    
  42.     printf("Complete la matriz: n");
  43.     for(i=0; i<dimension; i++){
  44.         for(j=0; j<dimension; j++){
  45.             printf("elemento[%i][%i]: ", i, j);
  46.             scanf("%i", &matriz[i][j]);
  47.         }
  48.     }
  49.    
  50.     printf("nSu matriz:n");
  51.     for(i=0; i<dimension; i++){
  52.         for(j=0; j<dimension; j++){
  53.             printf("%3i ", matriz[i][j]);      
  54.         }
  55.         printf("n");
  56.     }
  57.    
  58.     printf("nIndique la posicion de la submatriz.n");
  59.     printf("Coordenadas primer elemento (primero 'fila' y luego 'columna'): ");
  60.     scanf("%i %i", &fpe, &cpe);
  61.     printf("Coordenadas ultimo elemento (primero 'fila' y luego 'columna'): ");
  62.     scanf("%i %i", &fue, &cue);
  63.    
  64.     printf("nSubmatriz: (%i,%i) , (%i,%i)n", fpe, cpe, fue, cue);
  65.     for(i=fpe-1; i<fue; i++){              
  66.         for(j=cpe-1; j<cue; j++){
  67.             printf("%3i ", matriz[i][j]);            
  68.         }
  69.         printf("n");
  70.     }
  71.    
  72.     printf("nSubmatriz: (%i,%i) , (%i,%i) en forma "
  73.     "vectorial: " , fpe, cpe, fue, cue);
  74.     subalgoritmo(matriz, fpe, cpe, fue, cue, vector);
  75.                    
  76.     return 1;
  77. }  
  78.  
  79.  


Gracias y un saludo!

9
C/C++ / Funcion que devuelve un vector...
« en: Viernes 15 de Enero de 2010, 00:34 »
Buenas noches, estoy liadillo con un programa que debe leer una matriz cuadrada de tamaño y mostrar una submatriz indicada en forma de vector.

La cosa es que hay que mandar la submatriz a una función, que la devuelve como un vector. Pero no me sale... no se si es problema de que la funcion no devuelve array o yo que se, la cosa es que no me anda. Os mando el codigo a ver que me podeis comentar. Garacias.

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. #define TAMA 10
  6.  
  7. /*-----Funcion-submatriz-en-array------------------------------------------*/
  8. int subalgoritmo(int array[TAMA][TAMA], int fpe, int cpe, int fue, int cue, int vector[90]){
  9.        
  10.     int i, j, a=0;
  11.    
  12.     for(i=fpe-1; i<fue; i++){               /*2*/
  13.         for(j=cpe-1; j<cue; j++){
  14.             vector[a]=array[i][j];          
  15.             a++;                            /*no modifica ni muestra el vector*/
  16.         }
  17.     }          
  18. }
  19. /*------------------------------------------------------------------------*/
  20.  
  21. int main (void){
  22.    
  23.     int dimension;
  24.     int i, j;
  25.     int matriz[TAMA][TAMA];
  26.     int fpe, cpe;               //fpe ==  fila primer elemento      /*1*/
  27.     int fue, cue;               //cue == columna ultimo elemento
  28.     int vector[90];
  29.    
  30.     printf("Indique la dimension de la matriz cuadrada: ");
  31.     scanf("%i", &dimension);
  32.    
  33.     if(dimension<3 || dimension>10){
  34.         printf("El numero no es correcto. Debe estar entre 3 y 10. Repita: ");
  35.         scanf("%i", &dimension);
  36.     }
  37.    
  38.     printf("Complete la matriz: n");
  39.     for(i=0; i<dimension; i++){
  40.         for(j=0; j<dimension; j++){
  41.             printf("elemento[%i][%i]: ", i, j);
  42.             scanf("%i", &matriz[i][j]);
  43.         }
  44.     }
  45.    
  46.     printf("nSu matriz:n");
  47.     for(i=0; i<dimension; i++){
  48.         for(j=0; j<dimension; j++){
  49.             printf("%i  ", matriz[i][j]);
  50.         }
  51.         printf("n");
  52.     }
  53.    
  54.     printf("nIndique la posicion de la submatriz.n");
  55.     printf("Coordenadas primer elemento (primero 'fila' y luego 'columna'): ");
  56.     scanf("%i %i", &fpe, &cpe);
  57.     printf("Coordenadas ultimo elemento (primero 'fila' y luego 'columna'): ");
  58.     scanf("%i %i", &fue, &cue);
  59.    
  60.     printf("nSubmatriz: (%i,%i) , (%i,%i)n", fpe, cpe, fue, cue);
  61.    
  62.     vector[90]=subalgoritmo(matriz, fpe, cpe, fue, cue, vector);
  63.     printf("%i", vector[90]);
  64.    
  65.     printf("nSubmatriz: (%i,%i) , (%i,%i) en forma vectorial: %in"
  66.     , fpe, cpe, fue, cue, vector[90]);
  67.    
  68.     return 1;
  69. }
  70.  
  71.  
  72. /*1-> "pef, pec, uef, uec": delimitan la submatriz. Seran usados en la funcion
  73.       como contadores de inicio y fin de bucle. Donde empieza y donde termina la
  74.       submatriz (posicion (fila,columna) del primer y ultimo elemento)*/
  75. /*2-> Copia los valores de la submatriz en el vector*/
  76.  
  77.  

Un saludo!!

10
C/C++ / Re: array de numeros reales
« en: Lunes 11 de Enero de 2010, 17:11 »
Gracias diego.martinez; se ve que mi compilador tuvo una mala tarde. Hoy se me ha quedado una cara de capullo cuando se lo he comentado a mi profe de prácticas...
...por lo menos tres veces probé a declarar la matriz como: float matriz[][] y a almacenar los valores con el %f... y no compilaba.

Puede que sea problema de mi programa, porque hoy despues de clase lo he hecho y funciona  :argh: . En fin, uso C-free y no se como es de bueno. Pero me da que no es muy fiable, nosenose... nos lo pusieron en lugar del Dev-c++, porque el C-free es gratis y tal...

...¿me recomiendas algún otro compilador?.

Un saludo!

11
C/C++ / array de numeros reales
« en: Domingo 10 de Enero de 2010, 16:05 »
Buenas tardes a todos. Tengo una duda existencial que me trae de cabeza. ¡No consigo hacer una matriz de números reales!. Solo puedo hacerla de enteros y.... que cabreo...

En fin, tengo que realizar un algoritmo que lea una matriz de dimensión mx2 (m filas y 2 columnas), que muestre la mayor de las medias de ambas columnas.

El ejercicio no especifica que los números introducidos en la matriz deban ser reales. Pero me gustaría saber como se hace.

Os dejo mi código (que funciona bien para números enteros...):

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. #define FILAS 50
  6.  
  7. int main (void){
  8.     int matriz[FILAS][2];  
  9.     int numerofilas;                 //bandera que indica las filas de la matriz
  10.     int fila, columna=0;
  11.     float suma_c1=0, suma_c2=0;    
  12.     float media_c1, media_c2;
  13.    
  14.     printf("Indique el numero de filas para una martiz mx2 (fila, columna): ");
  15.     scanf("%i", &numerofilas);
  16.     printf("Trabaja con una matriz %ix2n", numerofilas);
  17.     /*Llena la matriz y hace la sumatoria por columnas*/    
  18.     for(columna=0; columna<2; columna++){
  19.         for(fila=0; fila<numerofilas; fila++){
  20.             printf("Introduzca elemento[%i][%i]: ", fila, columna);        
  21.             scanf("%i", &matriz[fila][columna]);
  22.                 if(columna==0){
  23.                     suma_c1 += matriz[fila][columna];
  24.                 }else{
  25.                     suma_c2 += matriz[fila][columna];
  26.                 }
  27.         }
  28.         printf("n");
  29.     }  
  30.     /*Muestra la matriz*/
  31.     columna=0;
  32.     for(fila=0; fila<numerofilas; fila++){
  33.         printf("%i%2in", matriz[fila][columna], matriz[fila][columna+1]);
  34.     }
  35.     /*Calcula la media mas alta*/
  36.     media_c1=suma_c1/numerofilas; media_c2=suma_c2/numerofilas;
  37.     printf("media_c1 = %ftmedia_c2 = %fn", media_c1, media_c2);
  38.     if(media_c1>media_c2){
  39.         printf("La media de la primera columna es mayor: %fn", media_c1);
  40.     }else{
  41.         printf("La media de la segunda columna es mayor: %fn", media_c2);
  42.     }
  43.    
  44.     return 0;  
  45. }
  46.  
  47.  

La cosa es que declarando "float matriz[FILAS][2]" la cosa no funciona. He probado alguna cosilla de internet
como: float[][] matriz = new float[FILAS][2]    pero nada...

No se si será mi compilador "C-free", o que soy un autentico paquete en esto de la programación...

Agradezco cualquier consejo.

Un saludo!

Miguel.

12
C/C++ / Re: Vector compuesto de dos vectores...
« en: Domingo 10 de Enero de 2010, 12:05 »
ProfesorX, gracias por el código. Ya lo he aplicado y funciona OK. Es mas sencillo de implementar, aunque no se me habría ocurrido hacerlo así.
Está muy bien cuando recorres el vector desde la segunda posición comparándola con la anterior y luego, en caso de que sean identicas, igualas el resto del vectro a su posición siguiente...

Vaya máquinas estasi hechos.

Gracias a todos por vuestra atención!!!

Un saludo.

13
C/C++ / Re: Vector compuesto de dos vectores...
« en: Domingo 10 de Enero de 2010, 11:34 »
Buenos días Aragorn_montaraz. Como se puede apreciar, mi nivel deja mucho que desear...
...pero que no se diga que no pongo empeño.

He probado lo que dices, aunque no me queda claro dónde hay que poner los "while". Como dices que van despues del "for", los he colocado aquí. Te envío esa parte del código para que me comentes, porque sigue sin funcionar correctamente. También he tenido que retocarlos un poco, porque tal y como los posteaste no hacían nada.

Código: C
  1.  
  2. /*Escribir el array_c con los elementos de los arrrays 'a' y 'b'*/  
  3. for(a = 0, b = 0, c = 0; c<longitud_c && a<longitud_a && b<longitud_b; c++){
  4.       if (array_a[a] < array_b[b]){  //Copiamos el menor elemento.
  5.          array_c[c] = array_a[a];
  6.          ele = array_a[a];        
  7.          while (array_a[a] == ele) a++;       //"Eliminamos" ese elemento de a y los repetidos.
  8.       }
  9.       else if (array_a[a] > array_b[b]){  //Copiamos el menor elemento.
  10.         array_c[c] = array_b[b];
  11.         ele = array_b[b];        
  12.         while (array_b[b] == ele) b++;       //"Eliminamos" ese elemento de b y los repetidos.
  13.       }
  14.       else {   //Los dos elementos son iguales. Copiamos uno y eliminamos repetidos de los dos.
  15.        array_c[c] = array_b[b];      
  16.        ele = array_b[b];
  17.        while (array_b[b] == ele) b++;
  18.        while (array_a[a] == ele) a++;
  19.       }      
  20. }               //y si algun array entrada aun tiene elementos por añadir...
  21.     while(b<longitud_b){
  22.         if(array_b[b]>array_c[c]){
  23.             array_c[c]=array_b[b];
  24.             c++;
  25.         }
  26.         b++;        
  27.     }
  28.     while(a<longitud_a){
  29.         if(array_a[a]>array_c[c]){
  30.             array_c[c]=array_a[a];    
  31.             c++;
  32.         }
  33.         a++;
  34.     }    
  35. printf("array_c: ");                        
  36. for(a=0; a<=c; a++){                  
  37.     printf("%i ", array_c[a]);              
  38. }
  39. printf("n");
  40. return 0;
  41. }
  42.  

Gracias por tu ayuda; a ver si pillo como se hace...la cosa es que el array_c empieza bien, pero le faltan números por mostrar...
Un saludo!

14
C/C++ / Re: Vector compuesto de dos vectores...
« en: Sábado 9 de Enero de 2010, 15:47 »
Hola Aragorn_montaraz. Sobre la solución que comentas, he estado trabajando y, aunque no entiendo muy bien como funciona...
... parece tener un problema a la hora de mostrar el vector resultante.

La cosa es que cuando lo muestra, añade basura al quedar sin machacar varias direcciones correspondientes a los elementos repetidos en los arrays de entrada.

Intento solucionarlo con un contador que debería incrementarse en uno cada vez que se guarda un valor en el array de salida. Más tarde, este contador será usado a modo de dimensión del array de salida, a la hora de mostrarlo en pantalla.

El problema está, supongo, en que como no se bien como trabaja el código, no se donde colocar los incrementos del contador.

Te envío el código para ver si puedes decirme dónde irían los incrementos del contador, o de que manera solucionarlo sin él.

Código: C
  1.  
  2. /*Escribir el array_c con los elementos de los arrrays 'a' y 'b'*/  
  3. for(a = 0, b = 0, c = 0; c < longitud_c; c++) {
  4.       if (array_a[a] < array_b[b] && a<longitud_a) {                           //Copiamos el menor elemento.
  5.          array_c[c] = array_a[a];
  6.          ele = array_a[a];
  7.          contador=contador+1;
  8.          while (array_a[a] == ele) a++;                                              //"Eliminamos" ese elemento de a y los repetidos.
  9.       }
  10.       else if (array_a[a] > array_b[b] && b<longitud_b) {                   //Copiamos el menor elemento.
  11.         array_c[c] = array_b[b];
  12.         ele = array_b[b];
  13.         contador=contador+1;
  14.         while (array_b[b] == ele) b++;                                              //"Eliminamos" ese elemento de b y los repetidos.
  15.       }
  16.       else {                                                         //Los dos elementos son iguales. Copiamos uno y eliminamos repetidos de los dos.
  17.        array_c[c] = array_b[b];      
  18.        ele = array_b[b];
  19.        while (array_b[b] == ele) b++;
  20.        while (array_a[a] == ele) a++;
  21.       }      
  22. }
  23.  
  24. printf("%in", contador);
  25. printf("array_c: ");                        //mostrar array_c
  26.       for(a=0; a<=contador+1; a++){
  27.     printf("%i ", array_c[a]);              
  28. }
  29.  
  30.  


Gracias por la ayuda.

Un saludo!

15
C/C++ / Re: Vector compuesto de dos vectores...
« en: Sábado 9 de Enero de 2010, 15:39 »
ProfesorX, he corregido lo del contador y he podido seguir con el ejercicio. He almacenado los valores de los dos arrays de entrada en el tercero y lo he ordenado de forma creciente con la "burbuja", pero a la hora de hacer lo que dices de recorrer el vector desplazando los repetidos para ehcarlos fuera, no logro hacerlo.

Lo he solucionado de dos formas: una es mostrando solamente los elementos no repetidos.
Código: C
  1.  
  2. /*Mostrar array_c SIN elementos repetidos (opción 'imprimir')*/
  3.     printf("array_c SIN elementos repetidos: ");  //no modifica array en memoria
  4.     for(a=0; a<longitud_c; a++){
  5.         if(array_c[a]!=array_c[a+1]){
  6.             printf("%i ", array_c[a]);
  7.         }else{
  8.             continue;
  9.         }
  10.     }
  11.     printf("n");
  12.     return 0;
  13. }
  14.  
  15.  

Cosa de no deja de resultarme bastante chapucera...

La otra, es volver a hacerle la "burbuja" al array de salida... tampoco de gusta mucho, pero al menos sí modifica el array en memoria:
Código: C
  1.  
  2. /*Mostrar array_c SIN elementos repetidos (opción 'burbuja')*/
  3.     for(a=0; a<longitud_c; a++){                    
  4.         if(array_c[a]==array_c[a+1]){          
  5.             posicion=a;                        
  6.             for(b=posicion+1; b<longitud_c; b++){  
  7.                 aux=array_c[b+1];                  
  8.                 array_c[b+1]=array_c[b];            
  9.                 array_c[b]=aux;                    
  10.             }                                  
  11.             longitud_c=longitud_c-1;  
  12.         }              
  13.     }
  14.  
  15.  

Que me deja algo más contento, pero no creo que se parezca a lo que comentabas.

Si puedes indicarme algo más sobre esa forma en que dices que puede hacerse...

Gracias ProfesorX :good:

16
C/C++ / Vector compuesto de dos vectores...
« en: Viernes 8 de Enero de 2010, 17:22 »
Buenas tardes a todos. Hoy tengo un (otro) superproblema con un ejercicio que no me sale 'ni palante ni patrás'. El enunciado dice así:

Esctribir un programa al que se le de como entrada dos arrays de enteros ordenados de forma creciente, y devuelva como salida un array ordenado de forma creciente formado por los elementos de las entradas y sin incluir los elementos repetidos.

Bueno, he probado muchas cosas, ninguna con éxito, para intentar que a la vez que almaceno los dos arrays de forma independiente, se guarden en el array conjunto... ese es un problema. El otro es que no se como hacer que se eliminen los elementos repetidos. Ordenarlos de forma creciente se hará con un ordenamiento burbuja (p. ej.) y lo de eliminar los repetidos, con alun tipo de comparación y contador...

El principal obstáculo lo encuentro en almacenas los datos de los dos primeros arrays en el array de salida.
En el código que mando, intento hacerlo con dos bucles for, pero luego me muestra un chorrazo de números de más...

Éste es el código que llevo hecho:
Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. #define TAMA 50
  6. #define LONG 100
  7.  
  8. int main (void){    
  9.     int array_a[TAMA];
  10.     int array_b[TAMA];
  11.     int array_c[LONG];
  12.     int a, b;
  13.     int longitud_a, longitud_b, longitud_c;
  14.        
  15.     printf("'Introduzca numero de elementos del array_a (hasta 50)': ");
  16.     scanf("%i", &longitud_a);
  17.     printf("'Introduzca numero de elementos del array_b (hasta 50)': ");
  18.     scanf("%i", &longitud_b);
  19.     longitud_c=longitud_a+longitud_b;
  20.     printf("n");  
  21.     printf("'Introduzca elementos del array_a'n");
  22.     for(a=0; a<longitud_a; a++){
  23.             printf("elemento %i array_a: ", a);
  24.             scanf("%i", &array_a[a]);                  
  25.     }
  26.     printf("n");  
  27.     printf("'Introduzca elementos del array_b'n");
  28.     for(b=0; b<longitud_b; b++){
  29.         printf("elemento %i array_b: ", b);
  30.         scanf("%i", &array_b[b]);
  31.                
  32.     }
  33.     printf("n");  
  34.    
  35.     printf("array_a: ");
  36.     for(a=0; a<longitud_a; a++){
  37.         printf("%i", array_a[a]);              
  38.     }
  39.     printf("n");
  40.     printf("array_b: ");
  41.     for(a=0; a<longitud_b; a++){
  42.         printf("%i", array_b[a]);              
  43.     }
  44.     printf("n");
  45.     /*Aqui intento llenar el array_c con los elementos de los otros dos pero..*/
  46.     for(a=0; a<longitud_a; a++){
  47.         array_c[a]=array_a[a];
  48.     }
  49.     a=a+1; b=0;
  50.     for(b=0; b<longitud_b; b++, a++){
  51.         array_c[a]=array_b[b];
  52.     }
  53.     /*al mostrarlo, no está como debiera*/
  54.     printf("array_c: ");
  55.     for(a=0; a<longitud_c; a++){
  56.         printf("%i", array_c[a]);              
  57.     }
  58.     printf("n");
  59.  
  60.     return 0;
  61. }
  62.  
  63.  


Ojalá podasi orientarme un poco, porque no se como segir.

Gracias. Un saludo!

Miguel.

17
C/C++ / Re: Palíndromo
« en: Domingo 3 de Enero de 2010, 20:57 »
Bueno chicos, despues de varias horas de trabajo y mezclar código de todos, por fin tengo mi programilla listo. Os lo mando para que lo leais. Muchas gracias por vuestro tiempo con los que estamos empezando.

Código: C
  1.  
  2. /*Ejercicio 7; Tema3; libro "FundamentosdeInformatica", Jose Joaquin Aguilera*/
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.      
  8. /*Algoritmo -> PALINDROMO*/
  9. int main (void){
  10.     char palabra[100];                      //cadena que almacena la palabra
  11.     int i, a, c;                            //contadores
  12.     printf("Escriba la palabra: ");
  13.     memset(&palabra, 0, sizeof(palabra));   //inicializar 'palabra'
  14.     scanf("%s", palabra);
  15.    
  16.     a = c = strlen(palabra);
  17.    
  18.     for (i=0;i<a;i++,c--){
  19.         if (palabra[i] != palabra[c-1]){
  20.             printf("La palabra '%s' no es palindromon", palabra);
  21.             return EXIT_FAILURE;
  22.         }
  23.    }
  24.    
  25.    printf("La palabra '%s' es un palindromon", palabra);
  26.    
  27.    return 0;
  28. }
  29.  
  30.  


Me gustaría haceros una pregunta. Ya se que no hay foro de pseudocódigo, pero de que manera puedo declarar la función return EXIT_FAILURE o EXIT_SUCCESS (una que me finalice el programa en ese punto) en un algoritmo escrito en pseudocódigo???

Gracias otra vez. Un saludo!

18
C/C++ / Re: Traspuesta de una matriz
« en: Domingo 3 de Enero de 2010, 10:35 »
Buenos días. Lamento decir que sigo sin saber como se utiliza la función malloc, como tantas otras... pero...
... ya tengo un código que me funciona. Es algo simple pero hace lo que tiene que hacer.

Os lo envío y mil gracias por todo. La verdad es que vuestras ayudas estimulan un montón...

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. #define NUM_ELEM 10
  6.  
  7. int main (void){
  8.     int matriz_a[NUM_ELEM][NUM_ELEM];
  9.     int matriz_b[NUM_ELEM][NUM_ELEM];
  10.     int dimension;  
  11.     int fila, columna;
  12.        
  13.     /*Dar dimension a la matriz (hasta 10x10)*/
  14.     printf("Numero de filas/columnas: ");
  15.     scanf("%i", &dimension);        
  16.     if(dimension < 1 || dimension > NUM_ELEM){
  17.         return EXIT_FAILURE;
  18.     }
  19.        
  20.     /*Escribir la matriz*/
  21.     printf("Introduzca la matriz origen: n");
  22.     for(fila=0; fila<dimension; fila++){
  23.         for(columna=0; columna<dimension; columna++){
  24.             printf("elemento[%i][%i]: ", fila, columna);
  25.             fflush(stdout);
  26.             scanf("%i", &matriz_a[fila][columna]);          
  27.         }
  28.     }
  29.     printf("n");
  30.    
  31.     /*Mostrar la matriz origen*/
  32.     printf("Matriz origen:n");
  33.     for(fila=0; fila<dimension; fila++){
  34.         for(columna=0; columna<dimension; columna++){
  35.             printf("%2i", matriz_a[fila][columna]);
  36.         }
  37.         printf("n");
  38.     }
  39.     printf("n");
  40.    
  41.     /*Hacer la matriz traspuesta*/
  42.     for(fila=0; fila<dimension; fila++){
  43.         for(columna=0; columna<dimension; columna++){
  44.             matriz_b[columna][fila]=matriz_a[fila][columna];
  45.         }
  46.     }
  47.    
  48.     /*Mostrar la traspuesta*/
  49.     printf("Traspuesta de la matriz origen:n");
  50.     for(fila=0; fila<dimension; fila++){
  51.         for(columna=0; columna<dimension; columna++){
  52.             printf("%2i", matriz_b[fila][columna]);
  53.         }
  54.         printf("n");
  55.     }
  56.     printf("n");
  57.     return 0;
  58. }
  59.  

Un saludo!

19
C/C++ / Palíndromo
« en: Martes 29 de Diciembre de 2009, 12:34 »
Buenos días. Mientras me llegaba la respuesta de la traspuesta de la matriz, comencé con la siguiente práctica, en la que se pide realizar un algoritmo que diga si una palabra es o nó un palíndromo (palabra que se lee igual de izquierda a derecha que de derecha a izquierda). He curioseado un poco por internet y es un tema bastante tocado, aunque los códigos fuente que he encontrado, u están incompletos, o usan instrucciones qu eno entiendo por mi escaso nivel.

Os dejo mi código por si veis los fallos u incoherencias para corregirlos. Gracias chicos!

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. /*Algoritmo -> PALINDROMO*/
  6. int main (void){
  7.    
  8.     int n=0;                    //contador del tamaño de 'operacion'
  9.     char palabra[100];          //cadena que almacena la palabra
  10.     char operacion[n];          //cadena para realizar la comparacion
  11.     int i, a, c;                //contadores
  12.        
  13.     printf("Escriba la palabra: ");
  14.     memset(&palabra, 0, sizeof(palabra));               //inicializar 'palabra'
  15.     scanf("%s", &palabra);
  16.    
  17.     for(c=0; c<100; c++){                   //guarda la palabra en 'operacion'
  18.         if(palabra[c]!=0){
  19.             operacion[c]=palabra[c];
  20.             n=n+1;                          //da el tamaño a 'operacion'
  21.         }
  22.     }
  23.    
  24.     /*comprueba si es palindromo, si la primera comprobacion falla,
  25.     termina el programa*/      
  26.     for(i=0; i<n; i++){
  27.         for(a=n-1; a>=0; a--){
  28.             if(operacion[i]!=operacion[a]){
  29.                 printf("La palabra %s no es palindromon", palabra);
  30.                 return EXIT_SUCCESS;
  31.             }
  32.         }
  33.     }
  34.    
  35.     printf("La palabra %s es un palindromo", palabra);
  36.    
  37.     return 1;  
  38. }
  39.  

Un abrazo y felices fiestas!

20
C/C++ / Re: Exponencial de un número
« en: Martes 29 de Diciembre de 2009, 12:25 »
Gracias punteronulo, era justamente eso de los tipos, y algo de código. Ya lo tengo, lo mando para que lo veais. Mil gracias.

Código: C
  1.  
  2.  
/*Ejercicio 6º; Tema 3*/

//Realizar un algoritmo que lea un numero 'x' mayor que cero y calcule su
//exponencial de la forma: e<x> = 1 + x<1>/1! + x<2>/2! + x<3>/3! +...+ x<i>/i!
//(<> representa 'elevado a '). Siendo 'i' el primer termino que hace:
//(x<i+1>)/(i+1)! < 0.001

/*Algoritmo -> EXPONENCIAL DE UN NUMERO*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//Funcion que calcula el factorial
double factorial (double x){
   if (x!=1){
      return (x*factorial(x-1));
   }
   return 1;
}

//Cuerpo del algoritmo
int main (void){
   /*Declaracion de variables*/
   double numero;               //numero al que se calcula el exponencial
   int i=0, a;                  //contadores
   double aux;                  //intermedia
   double exponencial=1;         //salida (muestra el resultado)
   /*Leer variables*/
   printf("Introduzca el numero a calcular");
   scanf("%lf", &numero);
   
   //OPERACIONES
   /*Encontrar el termino 'i'*/
   do{
      aux=(pow(numero, i+1)/factorial(i+1));
      i++;
   }while(aux >= 0.001);
   i=i-1;
   printf("son necesarios %i terminos en la sucesionn", i);
   /*Calculo del exponencial*/
   for(a=1; a<=i; a++){
      exponencial = exponencial +((pow(numero, a))/factorial(a));
   }
   
   //RESULTADOS
   printf("%f", exponencial);
   
   return EXIT_SUCCESS;
}
Código: C
  1.  
  2.  


Un saludo desde Granada.

21
C/C++ / Traspuesta de una matriz
« en: Domingo 27 de Diciembre de 2009, 17:35 »
Hola a todos. Ya se que éste es un tema tratado con anterioridad en el foro, pero he mirado todos los post anteriores y no me entero de nada. Supongo que debe ser porque aún no sé utilizar correctamente funciones y procedimientos (se supone que debo hacer el ejercicio sin usarlos). El tema es que mi código no hace nada, creo que el problema está en la declaración del array que guarda la matriz.

El ejercicio dice así: Escribir un algoritmo que lea por teclado una matriz cuadrada de tamano 'n' y muestre por pantalla su traspuesta.

Mi código es el siguiente:

Código: C
  1.  
  2.  

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

/*Algoritmo -> Traspuesta de una matriz*/
int main (void){
   //DECLARACION DE VARIABLES
   int m;               //el tamaño de la matriz   
   int matriz[m][m];      //la matriz cuadrada
   int fila, columna;      //contadores de la lectura de la matriz origen
   int i, j;            //contadores de la traspuesta
   int aux;            //intermedia de la traspuesta
   int a, b;            //contadores del resultado
   /*Leer variables*/
   printf("Inserte tamaño de la matriz cuadrada: ");
   scanf("%i", &matriz[m][m]);
   
   //OPERACIONES
   /*Escribir la matriz origen*/
   for(fila=0; fila<=m-1; fila++){
      for(columna=0; columna<=m-1; columna++){
         printf("Escriba valor en la posicion (%i,%i): ", fila, columna);
         scanf("%i", &matriz[fila][columna]);
      }
   }
   /*Traspuesta de la matriz origen (guardada en el mismo array)*/
   for(i=0; i<=m-1; i++){
      for(j=0; j<=m-1; j++){
         aux = matriz[j];
         matriz[j] = matriz[j];
         matriz[j] = aux;
      }
   }
   
   //RESULTADOS
   /*Mostrar la traspuesta*/
   for(a=0; a<=m-1; a++){
      for(b=0; b<=m-1; b++){
         printf("%2i", matriz[a]);
      }
      printf("n");
   }
   
   return 1;   
}
Código: C
  1.  
  2.  



Aver si me orientais un poco. Gracias a todos!

Un saludo desde Granada!

22
C/C++ / Re: Exponencial de un número
« en: Viernes 25 de Diciembre de 2009, 22:10 »
Gracias punteronulo, es un detalle bueno. No se si será lo que busco, porque el problema lo tengo en saber el valor de "i" para ver cuantos sumandos tiene la serie y conocer cuando hay que parar el bucle que hace la operación x<i>/i!.

Voy a probar a ver. Gracias y felices fiestas!

Un saludo!

23
C/C++ / Exponencial de un número
« en: Miércoles 23 de Diciembre de 2009, 11:58 »
Buenos días. Os mando este post porque tengo problemas al calcular el exponencial de un numero. Debería poder hacerlo sin funciones ni nada y, por supuesto, sin utilizar la función "exp" de la librería math.

El ejercicio dice así: Realizar un algoritmo que lea un número x mayor que cero y calcule su exponencial de la forma
e<x>=1+(x<1>/1!)+(x<2>/2!)+(x<3>/3!)+...+x<i>/i!); siendo "i" el primer término que hace |x<i+1>/(i+1)!|<0.001

La cosa es que mi programa funciona bien de 1 a 3. A partir de ahí, devuelve resultados que no son correctos, así como cuando el número iintroducido es de tipo REAL.

Aquí está el código, por si veis el/los fallos.

Gracias a todos!

Código: C
  1.  
  2.  
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//EXPONENCIAL DE UN NUMERO

/*Funcion que calcula el factorial de un numero*/
int factorial (int x){
   if(x!=1){
      return(x*factorial(x-1));
   }
   return 1;
}

/*Algoritmo -> Exponencial de un numero*/
int main (void){
   //DECLARACION DE VARIABLES
   double numero;               //numero al que se calcula al exponencial
   float exponumero;            //la exponencial de dicho numero (salida)
   int i=-1, a;                  //contadores
   float aproximacion, aux;      //intermedias
   /*Leer variables*/
   printf("Numero al que se calcula la exponencial: ");
   scanf("%lf", &numero);
   
   //OPERACIONES
   /*Encontrar el primer termino que cumple <0.001*/
   do{
      i=i+1;
      aproximacion=pow(numero, (i+1))/factorial(i+1);
   }while(!(aproximacion<0.001));   
   /*Calcular el factorial*/
   exponumero=1;            //asi se añade el "1+" de la sucesion
   for(a=1; a<=i; a++){
      aux=pow(numero, a)/factorial(a);
      exponumero=exponumero+aux;
   }
   
   //RESULTADOS
   printf("El exponencial de %lf es:   %ft", numero, exponumero);
   
   return 1;
}
Código: C
  1.  
  2.  


Un saludo!

24
C/C++ / Re: Ordenar 20 numeros de mayor a menor
« en: Lunes 21 de Diciembre de 2009, 17:18 »
Buemas tardes locazopro, eso de la burbuja está ok!, aunque tal y como lo has mostrado, ordena de menor a mayor. No obstante ha sido muy sencillo darle la vuelta y ya funciona.

Sois increibles. Se nota que chanelais de esto tela. Gracias por la atención. eres todo un maestro.

Un saludo.

Miguel.

25
C/C++ / Ordenar 20 numeros de mayor a menor
« en: Domingo 20 de Diciembre de 2009, 15:21 »
Buenas tardes, soy Miguel con otro problemilla. Tengo que hacer un ejercicio donde se almacenen 20 números en un vector y se muestren por pantalla de mayor a menor.
Mi programa lo hace, pero cambia el valor más pequeño por una cosa monstruosa que coloca en primer lugar.

Aquí os dejo el código por si veis el error y podeis orientarme. Gracias a todos.

Código: C
  1.  
  2.  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void){
   
   float mayor, aux;
   float vector[20];
   int i=0, a=0, b=0, c=0;
   
   memset(&vector, 0, sizeof(vector));
   
   for(i=0; i<=19; i++){
      printf("Introduzca numero: ");
      scanf("%f", &vector);
   }
   printf("n");
   
   for(a=0; a<=19; a++){
      for(c=0; c<=19; c++){
         if(vector[c]<vector[c+1]){
            mayor=vector[c+1];
            aux=vector[c];
            vector[c]=mayor;
            vector[c+1]=aux;
         }
      }
   }
      
   for(b=0; b<=19; b++){
      printf("%.3ft", vector);
   }
   printf("n");
   system("PAUSE");
}
Código: C
  1.  
  2.  

Un saludo!

Páginas: [1] 2