Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- autor: Jean Rodriguez H.
- fecha: Miercoles 19 de Octubre, 2017
- nombre del programa: sombras en el camping.
- descripcion: dado el ancho,el largo de una parcela y una cantidad de arboles, muestra el total de sombras disponibles.
- el programa finaliza con un ancho o largo en 0.
- ejemplo:
- input output
- 7 7 8 22
- 7 2 3 3 4 3 4 4 3 5 4 5 1 7 2 7 8
- 5 3 1
- 3 2
- 0 0 0
- */
- #include <stdio.h>
- #include <string.h>
- typedef struct coordenadas{
- int x;
- int y;
- }coordenadas;
- void leerarbol(coordenadas posicion[], int largo); //almacena las coordenadas de los arboles
- int sombras(coordenadas posicion[], int largo, int filas, int columnas); //ubica los arboles y las sombras. returna el total de sombras
- int main(void)
- {
- int c,f,arboles; //columnas, filas, arboles
- scanf("%i %i %i",&c,&f,&arboles);
- while(c && f) { //termina cuando columna o fila sean 0
- coordenadas posicion[arboles]; //guarda las coordenadas de los arboles
- leerarbol(posicion, arboles);
- printf("%i\n",sombras(posicion, arboles, f, c));
- scanf("%i %i %i",&c,&f,&arboles);
- }
- return 0;
- }
- void leerarbol(coordenadas posicion[], int largo)
- {
- int i;
- for(i=0 ; i<largo ; i++) {
- scanf("%i %i",&posicion[i].x,&posicion[i].y);
- }
- }
- int sombras(coordenadas posicion[], int largo, int filas, int columnas)
- {
- int i,j,total=0;
- int bosque[filas+1][columnas+1];
- memset(bosque, 0, sizeof bosque);
- for(i=0 ; i<largo; i++) {
- int x=posicion[i].x -1;
- int y=posicion[i].y -1;
- bosque[y][x] = 1;
- }
- for(i=0 ; i<filas ; i++) {
- for(j=0 ; j<columnas ; j++) {
- /* se rellena con 2 en el lugar de las sombras*/
- if(bosque[i][j]==1) {
- if(!bosque[i][j-1]) bosque[i][j-1]=2;
- if(!bosque[i][j+1]) bosque[i][j+1]=2;
- if(!bosque[i-1][j-1]) bosque[i-1][j-1]=2;
- if(!bosque[i-1][j]) bosque[i-1][j]=2;
- if(!bosque[i-1][j+1]) bosque[i-1][j+1]=2;
- if(!bosque[i+1][j-1]) bosque[i+1][j-1]=2;
- if(!bosque[i+1][j]) bosque[i+1][j]=2;
- if(!bosque[i+1][j+1]) bosque[i+1][j+1]=2;
- }
- }
- }
- for(i=0 ; i<filas ; i++) {
- for(j=0 ; j<columnas ; j++) {
- if (bosque[i][j]==2) total++;
- }
- }
- return total;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement