• Sábado 4 de Mayo de 2024, 15:22

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.


Temas - ermiguel1979

Páginas: [1]
1
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!!

2
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!!

3
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!!

4
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!!

5
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!!

6
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.

7
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.

8
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!

9
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!

10
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!

11
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!

12
C/C++ / Ejercicio dificil, hasta de definir en ASUNTO!!
« en: Sábado 19 de Diciembre de 2009, 21:49 »
Buenas noches a toda la gente del foro. Soy Miguel, con otro ejercicio cojonero de clase que me trae por la calle de la amargura...
El bichejo dice así:

"Crea un programa que lea de teclado una secuencia de números enteros positivos de 0 a 100, ambos inclusives. La secuencia de números introducidos terminará cuando se introduzca un número que no cumpla la condición (que no esté entre 0 y 100). Al finalizar de introducir los números , mostrará cuantas veces se ha introducido cada número."

Tengo problemas con detener el ciclo cuando no se desee introducir más números (sin tener que terminar de rellenar el vector), y me parece que tanto condicional no debe ser una forma muy eficiente de resolverlo. Más que nada porque solo he implementado el algoritmo para números del 0 al 13...

Os mando lo que llevo hecho hasta ahora...

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

int main (void){
   int vector[50];
   int I, numero;
   int a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0; //Variables que anotan las_
   int i=0, j=0, k=0, l=0, m=0, n=0;         //_repeticiones de cada numero
   
   for(I=0; I<=50; I++){
      printf("Introduce numero entre 0 y 13: ");
      scanf("%i", &numero);
      if(numero>=0 && numero<=13){
         if(numero=0){
            a=a+1;
         }else{
            if(numero=1){
               b=b+1;
            }else{
               if(numero=2){
                  c=c+1;
               }else{
                  if(numero=3){
                     d=d+1;
                  }else{
                     if(numero=4){
                        e=e+1;
                     }else{
                        if(numero=5){
                           f=f+1;
                        }else{
                           if(numero=6){
                              g=g+1;
                           }else{
                              if(numero=7){
                                 h=h+1;
                              }else{
                                 if(numero=8){
                                    i=i+1;
                                 }else{
                                    if(numero=9){
                                       j=j+1;
                                    }else{
                                       if(numero=10){
                                          k=k+1;
                                       }else{
                                          if(numero=11){
                                             l=l+1;
                                          }else{
                                             if(numero=12){
                                                m=m+1;
                                             }else{
                                                if(numero=13){
                                                   n=n+1;
                                                }
                                             }
                                          }
                                       }
                                    }
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      if(numero<0 || numero>13){
         printf("numero incorrecto; el numero debe estar entre 0 y 13n");
      }
   }
      
   printf("0: %it1: %it2: %it3: %it4: %in", a, b, c, d, e);
   printf("5: %it6: %it7: %it8: %it9: %in", f, g, h, i, j);
   printf("10: %it11: %it12: %it13: %in", k, l, m, n);
   
   system("PAUSE");
}

Gracias a todos y un saludo!

13
C/C++ / Uso de los vectores
« en: Jueves 17 de Diciembre de 2009, 13:31 »
Hola a todos, tengo un problemilla (para variar) con otro de mis amadísimos ejercicios de programación. La criatura en cuestión dice así:

"Realizar un algoritmo que pida un conjunto de números, los almacene en un vector y calcule el mayor, el menor y la media de dichos números".

Lo que llevo hecho hasta ahora, ni me pide los números a introducir, ni hace las operaciones que debería. Os pongo el código por si le pillasis el/los errores.

Gracias chicos...


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

int main (void){
   //VARIABLES
   int vector[100];         //array donde se almacenan los numeros
   int mayor, menor;         //el mayor y el menor de todos
   float media=0;            //la media de los numeros
   
   int i;                  //contador
   int n;                  //cantidad de numeros a introducir
   int suma;               //suma de los numeros dados, de cara a la media
   /*Leer Variables*/
   printf("Indique numero de datos a introducir: ");
   scanf("%i", &n);
   
   //OPERACIONES
   for(i=0; i>=n; i++){
      printf("Introduzca numero: ");
      scanf("%i", &vector);
   }
   /*Inicializar variables relativas al vector*/
   mayor=vector[0];
   menor=vector[0];
   suma=vector[0];
   /*Recorrer el vector comparando y sumando numeros*/
   for(i=1; i>=n; i++){
      if(vector>mayor)  mayor=vector;
      if(vector<menor)  menor=vector;
      suma=suma+vector;
   }
   media=suma/n;
   //RESULTADOS
   printf("El mayor es: %in", mayor);
   printf("El menor es: %in", menor);
   printf("La media es: %fn", media);
}




Un saludo y felices fiestas...

14
C/C++ / Cambio de base
« en: Lunes 14 de Diciembre de 2009, 15:42 »
Hola a todos, tengo que hacer un programita que dice lo siguiente:
Realizar un porgrama para convertir números enteros decimales (en base 10) a sus respectivas representaciones octales (en base 8), por medio de sucesivas divisiones.

Y... no tengo ni idea de como hacerlo. Os agradezco toda la ayuda que me podais dar...

Un saluo!!!

15
C/C++ / DIVISORES
« en: Sábado 12 de Diciembre de 2009, 19:52 »
HOla chic@s; necesito hacer un programilla que te muestre en pantalla todos los divisores de un número entero.

He estado cacharreando, pero despues de escribir el codigo y tal, el programa no hace nada.
Pide y lee el número, pero se me atranca en el 'resto'.

Hay va la parida que llevo hecha:

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

/*Algoritmo -> DIVISORES de un numero dado*/
int main (void){
   /*VARIABLES*/
   //Entradas
   int num;      //El numero a estudiar
   //Intermedias
   int i;         //Contador del 'PARA'
   int aux;      //resto de 'num'/'i' en cada iteracion
   //Leer variables
   printf("Escribir un numero entero: ");
   scanf("%i", &num);
   
   /*OPERACIONES*/
   for(i=1; i<=num; i++){
      aux = num%i;
      if (aux=0){
         printf("%i es divisor de %in", i, num);
      }
   }
}


Bueno, que deciros a parte de que soy más malo que Fu-Manchú.... en esto del C.

Un saludo para la gente del foro!!!

16
C/C++ / Serie matemática...
« en: Jueves 10 de Diciembre de 2009, 11:42 »
Hola a todos y buenos días...

Tengo un problemilla con un ejercicio que no me sale; dice así:

Escribe un programa que calcule el valor de S para un número real X dado, utilizando la siguiente serie:
 S = 1 + X + ((X^2)/2!) + ((X^3)/3!) +((X^4)/4!)...

Llevo hecho lo siguiente, que solo me funciona si no pongo sumandos fraccionarios...

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

/*Algotirmo -> SUCESION*/
int main (void){
   /*Entradas*/
   int numaprox;   //el numero de sumandos factoriales deseados
   double x;      //el numero en cuestion para el que se calcula la sucesión
   /*Salidas*/
   float S;
   /*Intermedias*/
   float factorial=2;   //el factorial del número del denominador
   float aux;         //las X de los numeradores de los sumandos
   int i=2;            //contador del bucle 'for'
   float sumando=0;   //el valor del sumando concreto de la iteración
   float cuentasumando=0;   //el valor total de los sumandos fraccionarios
   /*Leer Entradas*/
   printf("Introducir numero real para la sucesion: ");
   scanf("%lg", &x);
   printf("Indicar el numero de sumandos factoriales deseados: ");
   scanf("%i", &numaprox);
   
   /*OPERACIONES*/
   /*Calculo de los Sumandos fraccionarios*/               
   if(numaprox > 0){
      for(i=2; i<=numaprox; i++){
         for(i=2; i<=numaprox; i++){            //calcular los factoriales
            factorial=factorial*i;
         }
         aux=pow(x, i);
         sumando=(aux/factorial);
         cuentasumando=cuentasumando+sumando;
      }
   }
   /*RESULTADOS*/
   S = 1+x+cuentasumando;
   printf("Para x=%lg, S = %fn", x, S);
   
   system("PAUSE");
}


Gracias a todos por vuestra atencion!!!

17
C/C++ / piramide de números...
« en: Viernes 20 de Noviembre de 2009, 11:28 »
Hola a todos. Tengo un ejercicio que realizar y no tengo ni ideita. Supuestamente tengo que hacerlo con bucles y arrays pero no le pillo el ritmo ni con un tambor. A ver si me echais una mano...

El ejercicio dice así:

Necesitamos un programa que imprima una pirámide de dígitos como la de la figura, tomando como entrada el número de filas de la misma:

            1
         1 2 1
      1 2 3 2 1
   1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1

18
C/C++ / elevar variables al cuadrado
« en: Jueves 5 de Noviembre de 2009, 13:36 »
Buenas tardes a todos; tengo un problemilla con una práctica que no se por donde coger. El ejercicio en cuestión dice así:

Diseñar un algoritmo que lea las longitudes de los tres lados de un triángulo (L1,L2,L3) y determine qué tipo de triángulo es, de acuerdo a los siguientes casos. Suponiendo que A determina el mayor de los tres lados y B y C corresponden con los otros dos, entonces:

Si A>=B+C                 No se trata de un triángulo.
Si A2 = B2+C2           Es un triángulo rectángulo.
Si A2>B2+C2             Es un triángulo obtusángulo.
Si A2<B2+C2             Es un triángulo acutángulo.


Supongo que esos DOSES que van con las letras serán CUADRADOS, y no se como ponerlos en mi código. Lo que llevo realizado hasta ahora es lo siguiente: ¡Por cierto, uso Dev-C++ y C-Free!

#include <cstdlib>
#include <iostream>
#include <cstdio>
#include<cstdlib>

#define CUADRADO(x) (x*x) /*Definicion de macros*/

/*DETERMINADOR DE TRIANGULOS*/

using namespace std;

int main(int argc, char *argv[])
{
    /*Declaracion Variables*/
    float a;
    float b;
    float c;
    float mayor; // el lado más grande
    float ladoB; // otro de los lados
    float ladoC; // otro de los lados
   
    /*Leer Variables*/
    printf("Introduzca medida primer lado L1: ");
    fflush(stdin);
    scanf("%f", &a);
    printf("Introduzca medida segundo lado L2: ");
    scanf("%f", &b);
    printf("Introduzca medida tercer lado L3: ");
    scanf("%f", &c);
   
    /*Seleccion lado MAYOR*/
    if(a > b && a > c){
         mayor = a;
         ladoB = b;
         ladoC = c;
    }else{
          if(b > a && b > c){
               mayor = b;
               ladoB = a;
               ladoC = c;
          }else{
                mayor = c;
                ladoB = a;
                ladoC = b;
          }
    }
   
    /*Indicar lado MAYOR y lados secundarios*/
    printf("nEl lado MAYOR es %f y los secundarios son %f y %fnn", mayor, ladoB, ladoC);
   
    /*Mostrar tipos de triangulos*/
    if(mayor >= ladoB+ladoC){
             printf("No se trata de ningun triangulonn");
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}


La macro del CUADRADO la vi por ahí en Internet, pero no consigo hace que funcione cuando pongo las otras condiciones con los "if"
Otra cosilla es que, dado mi nivel, solo puedo usar "if" y "switch" para hacerlo.

Gracias a todos y un saludo!

19
C++ Builder / Problema con hacer el factorial iterativo y recursivo
« en: Jueves 15 de Octubre de 2009, 13:07 »
Hola a todos y GRACIAS de antemano. Estoy empezando con C en la facultad, y no me queda claro si el siguiente ejemplo no hace nada en sí, o si falta declarar y darle valor a las variables, o que demonios necesita para que entregue el factorial de un número de forma recursiva e iterativa.

También incluyo dos ejemplos individuales que me dan error al compilar.

Ejemplo doble (iterativo/recursivo):

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#define VALOR 5
#define FACT 120

using namespace std;

int main(int argc, char *argv[])
{
    int fact_i(int v)
    {
        int r=1, i=0;
       
            while(i<=v)
            {
                       r=r*1;
                       i=i+1;
            }
        return r;
    }
   
    int fact_r (int v)
    {
        if(v==0) return 1;
       
        else return v*fact_r(v-1);
    }

    main() {
           int r, valor=VALOR;
           if((r=fact_i(valor)) !=fact_r(valor)) printf("Codificacion erronea!!.n");
           else if(r==FACT) printf("Codificacion correcta.n");
           else printf("Algo falla!!.n");
    }
   
    system("PAUSE");
    return EXIT_SUCCESS;
}


EJEMPLO RECURSIVO SIMPLE:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int factorial(int n) {
        if ((n==0)||(n==1))
           return(1);
        else
            return(n*factorial(n-1));
    {
    system("PAUSE");
    return EXIT_SUCCESS;
}


EJEMPLO ITERATIVO SIMPLE:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int factorial(int n) {
        int i, fact=1;
       
        for (i=2; i<=n; i++)
            fact=fact*i;
        return(fact);
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

Páginas: [1]