martes, 14 de febrero de 2012

Tarea 2: AWK

Para acceder a los códigos fuente de esta tarea dar click aquí
Tarea2
View more presentations from melizondo_amaya.

#!/usr/bin/awk -f 
BEGIN {
    nodos=0;
    coordx=201.348998;
    coordy=63.024305;
    nodoi=17;
    nodoj=42;
    radio=100;
    minD=1000000;
    maxD=0;
    minimoD="";
    maximoD="";
    for(k=0; k<3 ;k++){
    suma[k]=0;
    min[k]=1000000;
    max[k]=0;
    minimo[k]="";
    maximo[k]=""
    }
    cIN=0;
    for(k=0; k<60; k++){
    grado[k]=0;
    }
    adyacentes=0;
}

{
    if(NR==1){
    nodos=$0
    }
   
    if(NR>1 && NR<=(nodos+1)){
   
#Array de nodos cuya distancia al pundo tado es menor al
#radio de cobertura
   
    D=sqrt(((coordx-$2)^2+(coordy-$3)^2))
    if(D<=radio){
        nodosIN[cIN]=$1
        cIN++
    }

#Suma de actividades nodales y obtencion de minimos y maximos

    for(k=0; k<3; k++){       
        suma[k]=$(k+4)
       
        if (min[k]>=$(k+4)){
        min[k]=$(k+4)
        minimo[k]=$1
        }
        else if (max[k]<=$(k+4)){
        max[k]=$(k+4)
        maximo[k]=$1
        }
    }
    }
    for(k=0; k<3; k++){       
    promedio[k]=suma[k]/nodos;
    }

#busca adyacencias

    if (NR==(nodos+2))
    adyacencias=$0

    if (NR>(nodos+2) && NR<(nodos+2+adyacencias)){
    grado[$1]++
    grado[$2]++   
    if(($1==nodoi && $2==nodoj) || ($1==nodoj && $2==nodoi))
        adyacentes=1;
    }
   
}
END{   
    print "\n Cantidad de nodos= " nodos "\n"
    print " Nodos dentro de un radio de cobertura r= " radio
    print " para el punto (" coordx "," coordy ") :"
    for (k=0;k<cIN;k++){
    print nodosIN[k]
    } 
    print "\n Minimos y maximos para actividades nodales: \n"
    for (k=0;k<3;k++){
    print "\n Actividad " k+1 " : \n El promedio es: " promedio[k] "
    print " El minimo es el nodo " minimo[k] " con " min[k]
    print " El maximo es el nodo " maximo[k] " con " max[k]   
    }
    print "\n En total hay " adyacencias " adyacencias"
    print " El grado de cada nodo es el siguiente: \n"
    for(k=0; k<nodos;k++){
    print "Nodo " k+1 ": grado " grado[k]
    }
    if(adyacentes==0)
    print "Los nodos proporcionados " nodoi " y " nodoj " NO son adyacentes"
    else
    print "Los nodos proporcionados " nodoi " y " nodoj " SI son adyacentes"
}

No hay comentarios:

Publicar un comentario