Mostrando entradas con la etiqueta hilos. Mostrar todas las entradas
Mostrando entradas con la etiqueta hilos. Mostrar todas las entradas

lunes, 6 de enero de 2020

Programa en C que genere 6 hilos y estos se identifiquen

Generemos un programa en lenguaje C que lance o genere 6 hilos y estos se identifiquen con un identificador.





#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

#define NUMERO 6

int contador;
static void *saluda (void *);

int main (void)
{
 int i;
 pthread_t hilo[NUMERO];

 for (i = 0; i < NUMERO ; i++) {
  sleep(1);
  pthread_create (&hilo[i],NULL,saluda,NULL);
 }

 for (i = 0; i < NUMERO ; i++) {

  pthread_join (hilo[i],NULL);
 }

 return 0;
}

static void *saluda (void *args) 
{
 contador += 1;
 printf ("Soy el thread %d y tengo el id %d\n",contador,(int) pthread_self());
 return NULL;
}

lunes, 3 de junio de 2019

Ejemplo completo de Matrices en C

A continuación, os pongo el ejemplo que se me ha ocurrido más completo sobre gestión de Matrices en C que reúne los ejemplos que he ido poniendo anteriormente.




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


void Ingresa_Matriz (int m[3][3], int f, int c);
void Utiliza_Matriz (int m[3][3], int f, int c);
void Visualiza_Matriz (int m[3][3], int f, int c);
void Rota_Matriz_D (int m[3][3], int f, int c);
void Rota_Matriz_I (int m[3][3], int f, int c);
void Multiplica_Matriz (int m[3][3], int f, int c, int cf, int *m0, int *m1, int *m2);

int main () {
    char ingresa;
    int m[3][3], cf = 0, direccion = 0, f = 0, c = 0;
    int m0, m1, m2;
    printf ("Deseas ingresar Matriz o utiliza la maqueta &lt;I/M&gt;: ");
    scanf ("%c",&amp;ingresa);
    if (ingresa == 'i') {
        Ingresa_Matriz(m, f, c);
    } else {
        Utiliza_Matriz(m, f, c);
    }
    Visualiza_Matriz(m, f, c);
    printf ("\nDeseas rotar la matriz a la derecha &lt;1&gt; o a la izquierda &lt;0&gt;: ");
    scanf ("%d",&amp;direccion);
    if (direccion == 1) {
        Rota_Matriz_D (m, f, c);
    } else {
        Rota_Matriz_I (m, f, c);
    }
    Visualiza_Matriz(m, f, c);
    printf ("\n¿Quieres multiplicar las filas (1) o las columnas (0)?: ");
    scanf ("%d",&amp;cf);
    Multiplica_Matriz(m, f, c, cf, &amp;m0, &amp;m1, &amp;m2);
    if (cf == 1) {
        printf ("\nMultiplicacion Fila 0: %d",m0);
        printf ("\nMultiplicacion Fila 1: %d",m1);
        printf ("\nMultiplicacion Fila 2: %d",m2);
    } else {
        printf ("\nMultiplicacion Columna 0: %d",m0);
        printf ("\nMultiplicacion Columna 1: %d",m1);
        printf ("\nMultiplicacion Columna 2: %d",m2);
    }
    return 0;
}

void Ingresa_Matriz (int m[3][3], int f, int c) {
    for (f=0;f&lt;3;++f) {
        for (c=0;c&lt;3;++c) {
            printf ("\nIntroduce posicion [%d][%d]: ",f,c);
            scanf ("%d",&amp;m[f][c]);
        }
    }
}

void Utiliza_Matriz (int m[3][3], int f, int c) {
    for (f=0;f&lt;3;++f) {
        for (c=0;c&lt;3;++c) {
            m[f][c]=rand()%50+1;
        }
    }
}

void Visualiza_Matriz (int m[3][3], int f, int c) {
    for (f=0;f&lt;3;++f) {
        for (c=0;c&lt;3;++c) {
            printf ("[%d] ",m[f][c]);
        } printf ("\n");
    }
}
void Rota_Matriz_D (int m[3][3], int f, int c) {
    int tmp[3][3];
    for (f=0;f&lt;3;++f) {
        for (c=0;c&lt;3;++c) {
                if (c == 2) {
                    tmp[f][0]=m[f][c];
                } else {
                    tmp[f][c+1]=m[f][c];
                }
            }
        }
    for (f=0;f&lt;3;++f) {
        for (c=0;c&lt;3;++c) {
            m[f][c]=tmp[f][c];
        }
    }
}

void Rota_Matriz_I (int m[3][3], int f, int c) {
    int tmp[3][3];
    for (f=0;f&lt;3;++f) {
        for (c=0;c&lt;3;++c) {
            if (c == 0) {
                tmp[f][2]=m[f][c];
            } else {
                tmp[f][c-1]=m[f][c];
            }
        }
    }
    
    for (f=0;f&lt;3;++f) {
        for (c=0;c&lt;3;++c) {
            m[f][c]=tmp[f][c];
        }
    }
}

void Multiplica_Matriz (int m[3][3], int f, int c, int cf, int *m0, int *m1, int *m2) {
    // 1 Multiplica filas
    // 0 Multiplica columnas
    int c0[3], c1[3], c2[3];
    
    if (cf == 0) {
        printf ("\nMultiplicando columnas...\n\n");
        for (f=0;f&lt;3;++f) {
            for (c=0;c&lt;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];
            }
        }
    } else {
        printf ("\nMultiplicando filas...\n\n");
        for (f=0;f&lt;3;++f) {
            for (c=0;c&lt;3;++c) {
                if (f == 0)
                    c0[c]=m[f][c];
                if (f == 1)
                    c1[c]=m[f][c];
                if (f == 2)
                    c2[c]=m[f][c];
            }
        }
    }
    *m0=c0[0]*c0[1]*c0[2];
    *m1=c1[0]*c1[1]*c1[2];
    *m2=c2[0]*c2[1]*c2[2];
}

viernes, 25 de enero de 2019

Ejercicios resueltos Matrices en C

He recopilado una serie de ejercicios sobre trabajo de matrices en C que espero sean de utilizar, no tenéis más que contactar en caso de dudas.




Ejercicio 1: Escribe un programa que pida cinco enteros al usuario y los almacene en una matriz. Calcula si la suma de los números almacenados es par o impar.



#include <stdio.h>


int main () {
    int m[5];
    int i, suma=0;
    
    for (i=0;i<5;i++) {
        printf ("Introduce numero [%i]: ",i+1);
        scanf ("%i",&m[i]);
    }
    
    for (i=0;i<5;i++) {
        suma+=m[i];
    }
    
    if (suma%2==0) {
        printf ("\nLa suma es PAR: %i",suma);
    } else {
        printf ("\nLa suma es IMPAR: %i",suma);
    }
    return 0;
}


Ejercicio 2: Escribe un programa que pida nueve números enteros y los almacene en una matriz 3x3. Calcula la suma de los números de cada fila y mostrar por pantalla el número de fila con mayor suma.



#include <stdio.h>

int main () {
    int m[3][3];
    int f,c, sumafila=0, nfila=0, mayorfila=0;
    
    for (f=0;f<3;f++) {
        for (c=0;c<3;c++) {
            printf ("Introduce el valor de [%i][%i]",f,c);
            scanf ("%i",&m[f][c]);
        } printf ("\n## Fila [%i] completada\n",f+1);
    }
    
    for (f=0;f<3;f++) {
        sumafila=0;
        nfila=f+1;
        for (c=0;c<3;c++) {
            sumafila+=m[f][c];
            if (sumafila > mayorfila) {
                mayorfila=sumafila;
            }
        }
    }
    
    printf ("\n-----------\n");
    printf ("La fila con suma mayor es: %i con resultado %i",nfila,mayorfila);
    
    return 0;
}


Ejercicio 3: Escribe un programa, que trabajando mediante funciones, presente un menú al usuario, rote la columnas a la derecha y suma filas.




  


#include <stdio.h>  
#define DIMENSION 3  
  
int m[3][3]={10,20,30,40,50,60,70,80,90};  
int n[3][3];  
int a,b,f,c, opcion, suma, resultado;  
  
int IntroduceMatriz (int m[3][3], int f, int c);  
int VisualizaMatriz (int m[3][3], int f, int c);  
int RotarMatrizDrcha (int m[3][3], int f, int c);  
int CambiarFilasColumnas (int m[3][3], int f, int c);  
int SumarFilasColumnas (int m[3][3], int f, int c);  
  
  
//struct ciudadano * CargarBBDDCiudadanos (struct *ciudadano, char *, char *, char *);  
  
  
int main () {  
      
  
    do {  
        printf ("--- MENU ---\n");  
        printf ("1. Introducir Matriz\n");  
        printf ("2. Visualizar Matriz\n");  
        printf ("3. Rotar Matriz Derecha\n");  
        printf ("4. Cambiar Filas/Columnas Matriz\n");  
        printf ("5. Sumar Filas\n");  
        printf ("6. Incremento dinero paso por referencia\n");  
        printf ("7. Incremento dinero paso por valor\n");  
        printf ("9. Salir\n\n");  
        printf ("Seleccione: ");  
        scanf ("%i",&opcion);  
        switch (opcion) {  
            case 1:  
                printf ("\nOpcion 1\n\n");  
                IntroduceMatriz (m, f,c);  
            break;  
            case 2:  
                printf ("\nOpcion 2\n\n");  
                VisualizaMatriz (m,f,c);  
            break;  
            case 3:  
                printf ("\nOpcion 3\n\n");  
                RotarMatrizDrcha (m,f,c);  
            break;  
            case 4:  
                printf ("\nOpcion 4\n\n");  
                CambiarFilasColumnas (m,f,c);  
            break;  
            case 5:  
                printf ("\nOpcion 5\n\n");  
                SumarFilasColumnas (m,f,c);  
            break;  
            case 6:  
                printf ("\nOpcion 6\n\n");  
  
            break;  
            case 7:  
                printf ("\nOpcion 7\n\n");  
  
            default:  
                printf ("\nSeleccione una opcion correcta\n");  
            break;  
                      
        }  
    } while (opcion != 9);  
    return 0;  
}  
  
  
int IntroduceMatriz (int m[3][3], int f, int c) {  
    for (f=0; f<DIMENSION; f++) {  
        for (c=0; c<DIMENSION; c++) {  
            printf ("Introduce coordenada [%i][%i]: ",f,c);  
            scanf ("%i",&m[f][c]);  
        }   
    }  
      
    printf ("\nDone!\n");  
}  
  
int VisualizaMatriz (int m[3][3], int f, int c) {  
    for (f=0; f<DIMENSION; f++) {  
        for (c=0; c<DIMENSION; c++) {  
            printf ("%i  ",m[f][c]);  
        } printf ("\n");  
    }  
      
    printf ("\nDone!\n");  
}  
  
int RotarMatrizDrcha (int m[3][3], int f, int c) {  
    for (f=0; f<DIMENSION; f++) {  
        for (c=0; c<DIMENSION; c++) {  
            if (c == 2) {  
                n[f][0] = m[f][c];  
            } else {  
                n[f][c+1] = m [f][c];  
            }  
        }  
    }  
      
    for (f=0; f<DIMENSION; f++) {  
        for (c=0; c<DIMENSION; c++) {  
            m[f][c] = n[f][c];  
        }  
    }  
    printf ("\nDone!\n");         
}  
  
  
int CambiarFilasColumnas (int m[3][3], int f, int c) {  
    for (f=0; f<DIMENSION; f++) {  
        for (c=0; c<DIMENSION; c++) {  
            n[c][f] = m[f][c];  
        }  
    }  
      
    for (f=0; f<DIMENSION; f++) {  
        for (c=0; c<DIMENSION; c++) {  
            m[f][c] = n[f][c];  
        }  
    }  
    printf ("\nDone!\n");         
}  
  
  
int SumarFilasColumnas (int m[3][3], int f, int c) {  
      
    for (f=0; f<DIMENSION; f++) {  
        suma=0;  
        for (c=0; c<DIMENSION; c++) {  
            suma+=m[f][c];  
            //printf ("Debug: %i\n",suma);  
            if (c == 2) {  
                printf ("\nLa Fila [%i] suma: %i\n",f,suma);  
            }  
        }  
    }  
      
    printf ("\nDone!\n");         
}