Mostrando entradas con la etiqueta paso por valor. Mostrar todas las entradas
Mostrando entradas con la etiqueta paso por valor. Mostrar todas las entradas

viernes, 1 de marzo de 2019

Ejercicios resueltos en C. Preguntas de examen

A continuación, voy a poner dos preguntas de examen resuelto en C.




Ejercicio 1: Escribe un programa en C, que multiplique las columnas de una Matriz 3x3.



#include <stdio.h>

int *m0,*m1,*m2;

int Multiplica_Columnas_Matriz (int m[3][3], int f, int c);
int main () {
    int m[3][3]={10,20,30,40,50,60,70,80,90}; 
    int f, c;
    
    Multiplica_Columnas_Matriz (m,f,c);
    printf ("\n\nMultiplicacion es: %d\n",m0);
    printf ("Multiplicacion es: %d\n",m1);
    printf ("Multiplicacion es: %d\n",m2);
    return 0;
}

int Multiplica_Columnas_Matriz (int m[3][3], int f, int c) {
    int c0[3];
    int c1[3];
    int c2[3];
        
    printf ("[INFO] Matriz original: \n\n");
    for (f=0; f<3; f++) {
        for (c=0;c<3;c++) {
            printf ("%i ",m[f][c]);
        } printf ("\n");
    }
    
    for (f=0; f<3; f++) {
        for (c=0;c<3;c++) {
            if (c == 0)
                c0[f]=m[f][c];
            if (c == 1)
                c1[f]=m[f][c];
            if (c == 2)
                c2[f]=m[f][c];
        }
    }
    
    m0=c0[0]*c0[1]*c0[2];
    m1=c1[0]*c1[1]*c1[2];
    m2=c2[0]*c2[1]*c2[2];
    
}


Ejercicio 2: Escribe un programa en C, en el que al introducir un número, indique la suma de sus dígitos así como indicar los dígitos.
Ejemplo: Si el número es 123, los dígitos serás 1, 2 y 3 y la suma será = 6.




#include <stdio.h>
#include <stdlib.h>
 
int v[10];  

int sumaDigitos(int Num){
    
    int Suma=0, Resto=0, contador=0;
 
    while(Num!=0){
        Resto=(Num%10);
        Suma=(Suma+Resto);
        Num=(Num/10);
        v[0+contador]=Resto;
        contador++;
    }
 
    return (Suma);
 
}
 
int main(){
    
    int Num,i,dim;
    printf("Ingresa un Numero : ");
    scanf("%d",&Num);
    
    printf("------\n");
    printf("La suma de los digitos del numero [%d] es : %d\n",Num,sumaDigitos(Num));
    while (Num !=0) {
        Num=(Num/10);
        dim++;
    }
    for (i=0;i<dim-1;i++) {
        printf ("Digito %i es: %i \n",i+1,v[i]);
    }
    return 0;
}

viernes, 25 de enero de 2019

Ejercicios resueltos en C. Funciones. Paso por valor y por referencia

En lenguaje C, es muy importante conocer cómo se trabaja con funciones, por ejemplo. Antes de entrar en materia con ejercicios que he resuelto, permitirme presentar la siguiente imagen, que bajo mi punto de vista es más que ilustrativa sobre en qué consiste un paso por valor o un paso por referencia y la importancia de utilizar un método u otro en función de nuestro objetivo.


Ejercicio 1: Escribir una función que sume dos números. Implemente un programa que la utilice.


#include <stdio.h>



int main () {

    int a, b;

    printf ("Numero 1: \n");

    scanf ("%d",&a);

    printf ("Numero 2: \n");

    scanf ("%d",&b);

 

    printf ("Resultado : %d",suma(a,b));

 

 

    return 0;

}



int suma (int a, int b) {

    return a+b;

}

</pre>




Ejercicio 2: Escribir un programa que reciba como argumento un conjunto de números. Calcular la media mediante una función.



#include <stdio.h>

float media (int *l,int n);
int main (int argc, char ** argv) {
    int i;
    int *lista;
    
    lista=(int *)malloc(sizeof(int *)*(argc-1)); // -1 al ser INT; +1 al ser CHAR
    if (lista == NULL) {
        printf ("ERROR");
        return 1;
    }
    
    for (i=0;i<argc;i++) {
        lista=atoi(argv[i]);
    }
    printf ("Media: %f",media(lista,(argc-1)));
    
    
    return 0;
}


float media (int *l,int n) {
    int i, suma =0;
    for (i=0;i<n;i++) {
        suma+=l[i];
    }
    return ((float)suma/(float)n);
}


Ejercicio 3: Escribir un programa que reciba una serie de cadenas de caracteres como argumentos. El programa deberá concatenarlas y dar la vuelta a la cadena resultante. La cadena que almacene la concatenación de los argumentos debe utilizar la memoria justa y necesaria.



  



#include <stdio.h>

int main (int argc, char **argv) {
    char *cadena;
    int i,largo,temp;
    
    // ¿Cuanto ocupa?
    for (i=0;i<argc;i++) {
        largo+=strlen(argv[i]);
    }
    
    // Realizo la reserva de memoria para almacenar, +1 fin de cadena
    cadena=(char *)malloc(sizeof(char)*(largo+1));
    strcpy (cadena,""); // Quito los espacios en blanco
    if (cadena == NULL) {
        printf ("Se produjo un error al reservar la memoria\n");
        return 1;
    }
    
    // Almacenamos argv en cadena
    for (i=0;i<argc;i++) {
        cadena=strcat(cadena,argv[i]);
    }
    
    printf ("\nLa cadena original es: %s\n",cadena);
    // Por último, damos la vuelta a la cadena resultante.
    for (i=0;i<strlen(cadena)/2;i++) {
        temp = cadena [i];
        cadena[i]=cadena[strlen(cadena)-1-i];
        cadena[strlen(cadena)-1-i]=temp;
    }
    
    printf ("\n-------\n");
    printf ("La cadena alterada es: %s",cadena);
    
    
    return 0;
}