Advertisement
Lagx

Cuestionario de Programación #6 Módulo #3 - Funciones y Matr

Oct 2nd, 2017
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.72 KB | None | 0 0
  1. 1)
  2. #include <stdio.h>
  3.  
  4. int esIdentidad(int filas,int matriz[][filas]) // funcion que comprueba si es matriz identidad
  5. {
  6.     int i,j;
  7.     int cont=0;
  8.     int flag=0;
  9.    
  10.     for(i=0;i<filas;i++)
  11.     {
  12.         cont=0;
  13.         for(j=0;j<filas;j++)
  14.         {
  15.             if(matriz[i][j] != 0) //si la fila contiene un numero diferente de 0 aumenta el contador
  16.             {
  17.                 cont++;
  18.             }
  19.             if(matriz[i][i] != 1) //si la fila no contiene un 1 en la posicion adecuada se actualiza el valor de flag
  20.             {
  21.                 flag=1;
  22.             }
  23.         }
  24.         if(cont != 1) //si la fila contiene mas o menos de un numero distinto de 0 entonces se actualiza el valor de flag
  25.         {
  26.             flag=1;
  27.         }
  28.     }
  29.    
  30.     if(flag==0) // si flag vale 0 la funcion retorna 1
  31.     {
  32.         return 1;
  33.     }
  34.    
  35.     return 0;
  36. }
  37.  
  38. int main()
  39. {
  40.     int filas,i,j;
  41.     do{
  42.         scanf("%d",&filas); //lectura del numero de filas
  43.         int matriz[filas][filas]; //declaracion de arreglo bidimensional donde se almacena la matriz
  44.        
  45.         if(filas != 0) // si filas s distinto de 0 se ejecutan las instrucciones
  46.         {
  47.             for(i=0;i<filas;i++)// lectura de la matriz
  48.             {
  49.                 for(j=0;j<filas;j++)
  50.                 {
  51.                     scanf("%d",&matriz[i][j]);
  52.                 }
  53.             }
  54.            
  55.             if(esIdentidad(filas,matriz)) //se llama a la funcion para ver si es matriz identidad
  56.             {
  57.                 printf("SI\n"); // se imprime "SI" en caso de que la funcion retorne 1
  58.             }
  59.             else
  60.             {
  61.                 printf("NO\n"); // se imprime "NO" en caso de que la funcion retorne 0
  62.             }
  63.         }
  64.        
  65.     }while(filas != 0); //condicion para que finalize el ciclo
  66.    
  67.     return 0;
  68. }
  69. 2)
  70. #include <stdio.h>
  71. //Funcion que verifica si alrededor de una celda libre hay por lo menos 6 minas
  72. int cuentaMinas(int alto,int ancho,int matriz[][ancho])
  73. {
  74.     int i,j,cont_minas,cont=0;
  75.    
  76.     for(i=1;i<alto-1;i++)//ciclo que recorre las filas de la matriz
  77.     {
  78.         for(j=1;j<ancho-1;j++)//ciclo que recorre las columnas de la matriz
  79.         {
  80.             cont_minas=0; // variable que aumneta cada vez que se encuentra una mina alrededor de una celda libre
  81.             if(matriz[i][j]==45)// si se encuentra una celda libre se ejecutan las instrucciones
  82.             {
  83.             //se pregunta si cada celda alrededor de la celda libre es una mina. Si es asi se aumenta el contador
  84.                 if(matriz[i-1][j-1]==42)
  85.                 {
  86.                     cont_minas++;
  87.                 }
  88.                 if(matriz[i-1][j]==42)
  89.                 {
  90.                     cont_minas++;
  91.                 }
  92.                 if(matriz[i-1][j+1]==42)
  93.                 {
  94.                     cont_minas++;
  95.                 }
  96.                 if(matriz[i][j-1]==42)
  97.                 {
  98.                     cont_minas++;
  99.                 }
  100.                 if(matriz[i][j+1]==42)
  101.                 {
  102.                     cont_minas++;
  103.                 }
  104.                 if(matriz[i+1][j-1]==42)
  105.                 {
  106.                     cont_minas++;
  107.                 }
  108.                 if(matriz[i+1][j]==42)
  109.                 {
  110.                     cont_minas++;
  111.                 }
  112.                 if(matriz[i+1][j+1]==42)
  113.                 {
  114.                     cont_minas++;
  115.                 }
  116.             }
  117.             if(cont_minas>=6)// si hay almenos 6 minas alrededor se aumenta el contador
  118.             {
  119.                 cont++;
  120.             }
  121.         }
  122.     }
  123.    
  124.     return cont;// retorna el numero de celdas libres con al menos 6 minas alrededor
  125. }
  126. //Programa Principal
  127. int main()
  128. {
  129.     int ancho,alto,resultado=0,i,j;
  130.     do{
  131.         scanf("%d%d",&ancho,&alto);//lee el ancho y alto del campo
  132.         getchar();
  133.         if(((ancho!=0)&&(alto!=0)))//si el ancho y el alto son distintos de 0 se ejecutan las instrucciones
  134.         {
  135.             char campo[alto][ancho];
  136.             int matriz[alto][ancho];
  137.             for(i=0;i<alto;i++)
  138.             {
  139.                 for(j=0;j<ancho;j++)
  140.                 {
  141.                     scanf("%c",&campo[i][j]);//se lee el campo en caracteres
  142.                     matriz[i][j]=campo[i][j];//traspasa el campo a una matriz de enteros
  143.                 }
  144.                 getchar();
  145.             }
  146.             resultado = cuentaMinas(alto,ancho,matriz);// llamada a la funcion cuentaMinas
  147.             printf("%d\n",resultado);//imprime el resultado
  148.         }
  149.     }while((ancho!=0)&&(alto!=0));//si el ancho y el alto son distintos de 0 continua el ciclo
  150.    
  151.     return 0;
  152. }
  153.  
  154. 3)
  155.  
  156. #include <stdio.h>
  157.  
  158. void asignacion(int c,int f,int a,int matriz[][c]);
  159. void inicializar(int c,int f,int matriz[][c]);
  160. int contador(int c,int f,int matriz[][c]);
  161.  
  162. int main()
  163. {
  164.     int c,f,a;
  165.     do{
  166.         scanf("%d%d%d",&c,&f,&a);
  167.         if((c!=0)&&(f!=0))
  168.         {
  169.             int matriz[f+1][c+1];
  170.             if(a>0)
  171.             {
  172.                 inicializar(c,f,matriz);
  173.                 asignacion(c,f,a,matriz);
  174.                 printf("%d\n",contador(c,f,matriz));
  175.             }
  176.             else
  177.             {
  178.                 printf("0\n");
  179.             }
  180.         }
  181.     }while((c!=0)||(f!=0));
  182.     return 0;
  183. }
  184.  
  185. void inicializar(int c,int f,int matriz[][c])
  186. {
  187.     int i,j;
  188.     for(i=1;i<=f;i++)
  189.     {
  190.         for(j=1;j<=c;j++)
  191.         {
  192.             matriz[i][j] = 0;
  193.         }
  194.     }
  195. }
  196.  
  197. void asignacion(int c,int f,int a,int matriz[][c])
  198. {
  199.     int i,x,y;
  200.     for(i=0;i<a;i++)
  201.     {
  202.         scanf("%d%d",&y,&x);
  203.         matriz[x][y] = 1;
  204.         if((matriz[x-1][y-1]!=1)&&(x-1>=1) && (y-1>=1))
  205.         {
  206.             matriz[x-1][y-1]=2;
  207.         }
  208.         if((matriz[x-1][y]!=1) &&(x-1 >=1))
  209.         {
  210.             matriz[x-1][y]=2;
  211.         }
  212.         if((matriz[x-1][y+1]!=1) && (x-1>=1)&& (y+1<=c))
  213.         {
  214.             matriz[x-1][y+1]=2;
  215.         }
  216.         if((matriz[x][y-1]!=1)&&(y-1>=1))
  217.         {
  218.             matriz[x][y-1]=2;
  219.         }
  220.         if((matriz[x][y+1]!=1)&&(y+1<=c))
  221.         {
  222.             matriz[x][y+1]=2;
  223.         }
  224.         if((matriz[x+1][y-1]!=1)&&(x+1<=f)&&(y-1>=1))
  225.         {
  226.             matriz[x+1][y-1]=2;
  227.         }
  228.         if((matriz[x+1][y]!=1)&&(x+1<=f))
  229.         {
  230.             matriz[x+1][y]=2;
  231.         }
  232.         if((matriz[x+1][y+1]!=1)&&(x+1<=f)&&(y+1<=c))
  233.         {
  234.             matriz[x+1][y+1]=2;
  235.         }
  236.     }
  237. }
  238.  
  239. int contador(int c,int f,int matriz[][c])
  240. {
  241.     int i,j,cont=0;
  242.     for(i=1;i<=f;i++)
  243.     {
  244.         for(j=1;j<=c;j++)
  245.         {
  246.             if(matriz[i][j] == 2)
  247.             {
  248.                 cont++;
  249.             }
  250.         }
  251.     }
  252.     return cont;
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement