domingo, 1 de junio de 2014

Practica No. 6

Problema #1

Se esta realizando un análisis de los accidentes que ocurren en el centro de cierta ciudad. Por simplificar, las calles y avenidas se representan por una retícula como la siguiente:
     30     31     32     33     34     35...............40
1
2
3
4
5

Donde los encabezados de los renglones indican las avenidas y los encabezados de las columnas señalan las calles. Las posiciones en la retícula indican el numero de accidentes que han ocurrido en las cercanías de dicha intersección durante el ultimo periodo.
Haga un programa para leer estos datos, que no se encuentran en secuencia. Una vez que los datos han sido leídos y almacenados, Imprima las tres intersecciones mas peligrosas.



Codigo:

#include <iostream>
#include <conio.h>
#include <iomanip>
#include <stdlib.h>

using namespace std;
void recibirdt(int calle[5],int ave[11],int acci[5][11]);
void imprimirdt(int calle[5],int ave[11],int acci[5][11]);
void calcularmax(int calle[5],int ave[11],int acci[5][11]);

int main()
{
    int calle[5];
    int ave[11];
    int acci[5][11];


    recibirdt(calle,ave,acci);
    imprimirdt(calle,ave,acci);
    calcularmax(calle,ave,acci);

getch();
return 0;
}

void recibirdt(int calle[5],int ave[11],int acci[5][11])
{
    int i,j;

    for(i=1;i<=5;i++)
    {

        cout<<"\n\nCALLE "<<i<<endl;
        for(j=30;j<=40;j++)
        {
        cout<<"\nAvenida "<<j<<endl;
        cout<<"\nNumero de accidentes: ";
        cin>>acci[i][j];
        }

    }
}

void imprimirdt(int calle[5],int ave[11],int acci [5][11])
{
    int i,j;
    cout<<"\nAVENIDA  30  31  32  33  34  35  36  37  38  39  40"<<endl;

    for(i=1;i<=5;i++)
    {
        cout<<setw(5)<<"\nCALLE "<<i;

        for(j=30;j<=40;j++)
        {

            cout<<setw(4)<<acci[i][j];

        }

        cout<<endl;

    }




}


void calcularmax(int calle[5],int ave[11],int acci[5][11])
{

int i,j;

int maxi1=0;
int maxi2=0;
int maxi3=0;

cout<<"\nLos valores maximos:\n";






for(i=1;i<=5;i++)
    {

        for(j=30;j<=40;j++)
        {

            if(acci[i][j]>maxi1 && acci[i][j]<maxi2)
            {

                maxi1=acci[i][j];
            }
            if(acci[i][j]>maxi2 && acci[i][j]<maxi3)
            {

                maxi1=maxi2;
                maxi2=acci[i][j];
            }
            if(acci[i][j]>maxi3)
            {
                maxi1=maxi2;
                maxi2=maxi3;
                maxi3=acci[i][j];
            }
        }

    }

cout<<"\nMaximo 1: "<<maxi3<<endl;
cout<<"\nMaximo 2: "<<maxi2<<endl;
cout<<"\nMaximo 3:  "<<maxi1<<endl;
}

Diagrama de Flujo:


Estructura general






Parametros de la funcion recibirdt






Parametros de la funcion imprimirdt







Parametros de la funcion calcularmax






Imagen del programa:




Problema 2

Suponga que se tiene una tabla de enteros A, con 3 filas y 5 columnas y un arreglo de enteros, X, con 5 elementos. Se desea generar una nueva lista de enteros Y, que se forma con las siguientes operaciones:

Y[0]=A[0][0]*X[0]+A[0][1]*X[1]+......+A[0][4]*X[4]
Y[1]=A[1][0]*X[0]+A[1][1]*X[1]+......+A[1][4]*X[4]
.
.
.
Y[2]=A[2][0]*X[0]+A[2][1]*X[1]+......+A[2][4]*X[4]

Imprimir los datos de los elementos de entrada (los valores de los elementos A, X), seguidos por los valores de los elementos de Y.



Codigo:

#include <iostream>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <iomanip>

using namespace std;

const int filas = 3;
const int columnas = 5;

void leerdatos(int A[3][5], int X[5]);

void calcular(int A[filas][columnas], int X[columnas], int Y[filas]);

void desplegar(int A[3][5], int X[5], int Y[filas]);

int main()
{
    int A[filas][columnas];
    int X[columnas];
    int Y[filas];

    leerdatos(A,X);
    calcular(A,X,Y);
    desplegar(A,X,Y);

    getch();
    return 0;
}

void leerdatos(int A[filas][columnas], int X[columnas])
{
    int a,i;

    for(a=0; a<columnas; a++)
    {
        for(i=0; i<filas; i++)
        {
            cout<<"Ingrese un numero para la tabla A: ";
            cin>>A[i][a];
        }
    }
    for(a=0; a<columnas; a++)
    {
        cout<<"Ingrese un numero para la lista X : ";
        cin>>X[a];
    }
}

void calcular(int A[filas][columnas], int X[columnas], int Y[filas])
{
    system("cls");

    Y[0]=A[0][0]*X[0]+A[0][1]*X[1]+A[0][2]*X[2]+A[0][3]*X[3]+A[0][4]*X[4];
    Y[1]=A[1][0]*X[0]+A[1][1]*X[1]+A[1][2]*X[2]+A[1][3]*X[3]+A[1][4]*X[4];
    Y[2]=A[2][0]*X[0]+A[2][1]*X[1]+A[2][2]*X[2]+A[2][3]*X[3]+A[2][4]*X[4];


}

void desplegar(int A[filas][columnas], int X[columnas],int Y[filas])
{
    int a,i;

   cout<<"sus terminos bidimencionales, A son :  ";
    for(i=0;i<3;i++)
           {
             cout<<"\n"<<endl;
          for(a=0;a<5;a++)
         {

               cout<<setw(4)<<A[i][a];

           }
         }
    cout<<"\n\nsus terminos unidimencionales, X son:\n\n ";
    for(a=0; a<columnas; a++)
    {
        cout<<"\t"<<X[a]<<endl;
    }
    cout<<"\n\nvalores finales de la multiplicacion de los arreglosm Y son: \n\n";
    cout<<Y[0]<<endl;
    cout<<Y[1]<<endl;
    cout<<Y[2]<<endl;
}

Pseudocodigo:

Inicio

A[filas][columnas]: int
X[columnas]: int
Y[filas]: int
leerdatos(A,X)
calcular(A,X,Y)
desplegar(A,X,Y)

Fin

funcion leerdatos(A[filas][columnas]: int,X[columnas]: int)
{
a,i: int
for(a=0 to a<columnas step a=a+1)
{
for(i=0 to filas step i=i+1)
        {
write "Ingrese un numero para la tabla A:"
Read A[i][a]
}
}
for(a=0 to columnas step a=a+1)
{
write "Ingrese un numero para la lista X:"
Read X[a]
}
}

funcion calcular(A[filas][columnas]: int, X[columnas]: int, Y[filas]: int)
{
Y[0]=A[0][0]*X[0]+A[0][1]*X[1]+A[0][2]*X[2]+A[0][3]*X[3]+A[0][4]*X[4]
Y[1]=A[1][0]*X[0]+A[1][1]*X[1]+A[1][2]*X[2]+A[1][3]*X[3]+A[1][4]*X[4]
Y[2]=A[2][0]*X[0]+A[2][1]*X[1]+A[2][2]*X[2]+A[2][3]*X[3]+A[2][4]*X[4]
}

funcion desplegar(A[filas][columnas]: int, X[columnas]: int, Y[filas]: int)
{
a,i: int
write "sus terminos bidimencionales, A son :"
for(i=0 to 3 step i=i+1)
{
write "\n"
for(a=0 to 5 step a=a+1)
{
write setw(4), A[i][a]
}
}
write "\n\nsus terminos unidimencionales, X son:\n\n "
for(a=0 to columnas step a=a+1)
{
write "\t",X[a]
}
write "\n\nvalores finales de la multiplicacion de los arreglosm Y son: \n\n"
write Y[0]
write Y[1]
write Y[2]
}

Imagen del programa:





Problema #3

Haga un programa que considere una tabla de N filas o renglones y M columnas.
Sume cada renglon e imprima las sumas e imprima el renglon con la suma mayor y menor. Igualmente sume cada columna e imprima sus valores, la columna de mayor y menor valor. Finalmente imprima la suma total, el dato mayor y el dato menor, calcular y desplegar el promedio de la tabla.



Codigo:


#include <iostream>
#include <conio.h>
#include <stdlib.h>

using namespace std;

template <class T>
void leer_valores(T valores[20][20],int x, int y);
template <class T>
void suma_filas(T valores[20][20], int x, int y);
template <class T>
void suma_columnas(T valores[20][20], int x, int y);
template <class T>
void suma_total(T valores[20][20], int x, int y);
int main()
{
    int VALORES[20][20];
    int FILAS, COLUMNAS;
    cout<<"De cuantas filas sera su tabla? ";
    cin>>FILAS;
    cout<<"\nDe cuantas columnas sera su tabla? ";
    cin>>COLUMNAS;

    leer_valores(VALORES,FILAS,COLUMNAS);
    suma_filas(VALORES,FILAS,COLUMNAS);
    suma_columnas(VALORES,FILAS,COLUMNAS);
    suma_total(VALORES,FILAS,COLUMNAS);

    getch();
    return 0;
}

template <class T>
void leer_valores(T valores[20][20], int x, int y)
{
    int i,j;
    cout<<endl;
    for(i=0; i<x; i++)
    {
        for(j=0; j<y; j++)
        {
            cout<<"Por favor introduce el valor ("<<i+1<<","<<j+1<<") :";
            cin>>valores[i][j];
        }

    }


}

template <class T>
void suma_filas(T valores[20][20], int x, int y)
{
    int i,j;
    T mini,maxi=0;
    T mayor;
    T menor;
    T suma;
    cout<<endl;

    for(i=0; i<x; i++)
    {
        suma=0;
        for(j=0; j<y; j++)
        {
            suma=suma+valores[i][j];
        }
        cout<<"\nLa suma del renglon "<<(i+1)<<" es: "<<suma;

        if(i== 0)
        {
            mini=suma;
            menor=i+1;
        }
        if(suma>maxi)
        {
            maxi=suma;
            mayor=(i+1);
        }
        if(suma<mini)
        {
            mini=suma;
            menor=i+1;
        }
    }

        cout<<"\n\nLa fila con la suma mayor es: "<<mayor;
        cout<<"\nLa fila con la suma menor es: "<<menor;
}


template <class T>
void suma_columnas(T valores[20][20], int x, int y)
{
    int i,j;
    T mini,maxi=0;
    T mayor;
    T menor;
    T suma;
    cout<<endl;

    for(i=0; i<y; i++)
    {
        suma=0;
        for(j=0; j<x; j++)
        {
            suma=suma+valores[j][i];
        }
        cout<<"\nLa suma de la columna "<<(i+1)<<" es: "<<suma;

        if(i== 0)
        {
            mini=suma;
            menor=i+1;
        }
        if(suma>maxi)
        {
            maxi=suma;
            mayor=(i+1);
        }
        if(suma<mini)
        {
            mini=suma;
            menor=i+1;
        }
    }

        cout<<"\n\nLa columna con la suma mayor es: "<<mayor;
        cout<<"\nLa columna con la suma menor es: "<<menor;

}

template <class T>
void suma_total(T valores[20][20], int x, int y)
{
    int i,j;
    T valor=0, valormax=0, valormin,suma=0;
    int maximo1,maximo2,minimo1,minimo2;
    for(i=0; i<x; i++)
    {
        for(j=0; j<y; j++)
        {
            valor=valores[i][j];
            suma=suma+valores[i][j];

            if(i==0 && j==0)
            {
                valormin=valores[i][j];
                maximo1=i+1;
                maximo2=j+1;
            }
            if(valor<valormin)
            {
                valormin=valor;
                minimo1=i+1;
                minimo2=j+1;
            }
            if(valor>valormax)
            {
                valormax=valor;
                maximo1=i+1;
                maximo2=j+1;
            }

        }
    }
    cout<<"\n\n\nLa suma total de la tabla es: "<<suma;
    cout<<"\nEl valor maximo esta en la posicion ("<<maximo1<<","<<maximo2<<"): "<<valormax;
    cout<<"\nEl valor minimo esta en la posicion ("<<minimo1<<","<<minimo2<<"): "<<valormin;

}


Pseudocodigo:

inicio

    VALORES[20][20],FILAS, COLUMNAS:int
    write "De cuantas filas sera su tabla? "
    read FILAS
    write "\nDe cuantas columnas sera su tabla? "
    read COLUMNAS

    leer_valores(VALORES,FILAS,COLUMNAS)
    suma_filas(VALORES,FILAS,COLUMNAS)
    suma_columnas(VALORES,FILAS,COLUMNAS)
    suma_total(VALORES,FILAS,COLUMNAS)

fin



funcion leer_valores(valores[20][20]:T, x,y:int)
{
    i,j:int
    for(i=0 to x step i=i+1)
    {
        for(j=0 to y step j=j+1)
        {
            write "Por favor introduce el valor (",i+1,",",j+1,") :"
           read valores[i][j]
        }

    }

}


funcion suma_filas(valores[20][20]:T, x,y:int)
{
    i,j:int
    mini,maxi=0:T
    mayor:T
    menor:T
    suma:T

    for(i=0 to x step i=i+1)
    {
        suma=0
        for(j=0 to y step j=j+1)
        {
            suma=suma+valores[i][j]
        }
        write "\nLa suma del renglon ",(i+1)," es: ",suma

        if(i= 0)
        {
            mini=suma
            menor=i+1
        }
        if(suma>maxi)
        {
            maxi=suma
            mayor=(i+1)
        }
        if(suma<mini)
        {
            mini=suma
            menor=i+1
        }
    }

        write "\n\nLa fila con la suma mayor es: ",mayor
        write "\nLa fila con la suma menor es: ",menor
}


float suma_columnas(valores[20][20]:T, x,y:int)
{
    i,j:int
    mini,maxi=0:T
    mayor:T
    menor:T
    suma:T

    for(i=0 to y step i=i+1)
    {
        suma=0
        for(j=0 to x j=j+1)
        {
            suma=suma+valores[j][i]
        }
        write "\nLa suma de la columna ",(i+1)," es: ",suma

        if(i== 0)
        {
            mini=suma
            menor=i+1
        }
        if(suma>maxi)
        {
            maxi=suma
            mayor=(i+1)
        }
        if(suma<mini)
        {
            mini=suma
            menor=i+1
        }
    }

        write "\n\nLa columna con la suma mayor es: ",mayor
        write "\nLa columna con la suma menor es: ",menor

}

funcion suma_total(valores[20][20]:T, x,y:int)
{
    i,j;:int
    valor=0, valormax=0, valormin,suma=0:T
    maximo1,maximo2,minimo1,minimo2:int
    for(i=0 to x step i=i+1)
    {
        for(j=0 to y step j=j+1)
        {
            valor=valores[i][j]
            suma=suma+valores[i][j]

            if(i==0 and j==0)
            {
                valormin=valores[i][j]
                maximo1=i+1
                maximo2=j+1
            }
            if(valor<valormin)
            {
                valormin=valor
                minimo1=i+1
                minimo2=j+1
            }
            if(valor>valormax)
            {
                valormax=valo
                maximo1=i+1
                maximo2=j+1
            }

        }
    }
    write "\n\n\nLa suma total de la tabla es: ",suma
    write "\nEl valor maximo esta en la posicion (",maximo1,",",maximo2,"): ",valormax
    write "\nEl valor minimo esta en la posicion (",minimo1,",",minimo2,"): ",valormin

}


Imagen del programa:





Problema  #4

Los estudiantes de una clas tienen la calificacion de 4 examenes de un curso de programacion. Escribir un programa interactivo  que acepte como entrada cada nombre de estudiante y sus puntuaciones (validar la entradade las calificaciones entre 0 y 100, si hay una calificion invalida vuelva a solicitar el dato), determinar la calificacion promedio de cada estudiante y desplegar un reporte con el nombre del estudiante, las calificaciones de los examenes, su promedio y el promedio general de 15 estudiantes. Desplegar los nombres de los 3 alumnos con mas altas calificaciones.



Codigo:

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <iomanip>

/*
Practica No.6
Problema 4
01/06/2014
*/

using namespace std;

const int alumnos = 15;
const int cletras = 30;
const int examenes = 4;

void leer_datos(char Nombres[alumnos][cletras], int calificaciones[examenes][alumnos]);

void promedio(int calificaciones[examenes][alumnos], double Prom[alumnos], int Total[alumnos],int posmax[2], double respaldoP[alumnos]);

double pgeneral(double Prom[alumnos]);

void ordenar(int posmax[2], double respaldoP[alumnos]);

void imprimir(char Nombres[alumnos][cletras], int calificaciones[examenes][alumnos], double Prom[alumnos], double P, int primero, int segundo, int tercero);


int main()
{
    char Nombres[alumnos][cletras];
    int calificaciones[examenes][alumnos];
    int Total[alumnos];
    double P, Prom[alumnos];
    double respaldoP[alumnos];
    int posmax[2];
    int primero, segundo, tercero;


        leer_datos(Nombres,calificaciones);
        promedio(calificaciones,Prom,Total,posmax,respaldoP);
        ordenar(posmax,respaldoP);

        primero = posmax[0];
        segundo = posmax[1];
        tercero = posmax[2];

        P = pgeneral(Prom);
        imprimir(Nombres, calificaciones,Prom,P,primero,segundo,tercero);

    getch();
    return 0;
}

void leer_datos(char Nombres[alumnos][cletras],int calificaciones[examenes][alumnos])
{
    int i, a;

    for(i=0; i<alumnos; i++)
    {
        system("cls");

        cout<<"Ingrese el nombre del alumno: ";

        cin.getline(Nombres[i],cletras);

        for(a=0; a<examenes; a++)
        {
            system("cls");

            do
            {
                cout<<"\nIngrese su calificacion del examen "<<a + 1<<" :";
                cin>>calificaciones[a][i];

                if(calificaciones[a][i] > 100 || calificaciones[a][i] < 0)
                {
                    cout<<"\t\tCalificacion invalida";
                    getch();

                    system("cls");
                }
                cin.ignore();
            }
            while(calificaciones[a][i] > 100 || calificaciones[a][i] < 0);
        }
    }
}

void promedio(int calificaciones[examenes][alumnos], double Prom[alumnos], int Total[alumnos],int posmax[2], double respaldoP[alumnos])
{
    int i,a,total;

    for(i=0; i<alumnos; i++)
    {
        total = 0;

        for(a=0; a<examenes; a++)
        {
            total = calificaciones[a][i] + total;
        }
        Total[i] = total;
    }

    for(i=0; i<alumnos; i++)
    {
        Prom[i] = Total[i]*(1.0)/examenes*(1.0);
        respaldoP[i] = Total[i]*(1.0)/examenes*(1.0);
    }
}

double pgeneral(double Prom[alumnos])
{
    int i, total;
    double Pgeneral;

    total = 0;

    for(i=0; i<alumnos; i++)
    {
        total = Prom[i] + total;
    }

    Pgeneral = total*(1.0)/alumnos*(1.0);

    return Pgeneral;
}

void ordenar(int posmax[2], double respaldoP[alumnos])
{
int i,a,maximo,pos;

    for(a=0; a<3; a++)
    {
        if(a > 0)
        {
            respaldoP[pos] = 0;
        }
        for (i=0; i<alumnos; i++)
        {
            if(a > 0)
            {
                if(i==0)
                {
                    pos = i;
                    maximo = respaldoP[i];
                }
                if(respaldoP[i] >= maximo)
                {
                    pos = i;
                    maximo = respaldoP[i];
                }
            }
            else
            {
                if(i==0)
                {
                    pos = i;
                    maximo = respaldoP[i];
                }
                if(respaldoP[i] > maximo)
                {
                    pos = i;
                    maximo = respaldoP[i];
                }
            }
        }
        posmax[a] = pos;
    }
cout<<posmax[0]<<posmax[1]<<posmax[2]<<endl;
}

void imprimir(char Nombres[alumnos][cletras], int calificaciones[examenes][alumnos], double Prom[alumnos], double P, int primero, int segundo, int tercero)
{

    int i,a;

    cout<<"\n\n";
    cout<<"                   Nombre     Unidad 1  Unidad 2  Unidad 3  Unidad 4   Promedio\n"<<endl;

    for(i=0; i<alumnos; i++)
    {
        cout<<setw(25)<<Nombres[i];

        for(a=0; a<examenes; a++)
        {
        cout<<setw(10)<<calificaciones[a][i];
        }
        cout<<setw(12)<<Prom[i]<<endl;
    }
    cout<<"\n\n                                                        Promedio general "<<P<<endl;

    cout<<"Los tres promedios mas altos son: "<<Nombres[primero]<<endl;
    cout<<"                                  "<<Nombres[segundo]<<endl;
    cout<<"                                  "<<Nombres[tercero]<<endl;

}


Pseudocodigo:

alumnos = 15 : int
cletras = 30 : int
examenes = 4 : int

Inicio

    int calificaciones[examenes][alumnos], Total[alumnos], posmax[2], primero, segundo, tercero : int
    P, Prom[alumnos], respaldoP[alumnos] : real
    Nombres[alumnos][cletras] : char

        leer_datos(Nombres,calificaciones)
        promedio(calificaciones,Prom,Total,posmax,respaldoP)
        ordenar(posmax,respaldoP)

        primero = posmax[0]
        segundo = posmax[1]
        tercero = posmax[2]

        P = pgeneral(Prom)
        imprimir(Nombres, calificaciones,Prom,P,primero,segundo,tercero)

Fin

funcion leer_datos(Nombres[alumnos][cletras] : char, calificaciones[examenes][alumnos] : int)
{
    i, a : int

    for(i=0 to alumnos step i = i+1)
    {
        write"Ingrese el nombre del alumno: "

        read (Nombres[i],cletras)

        for(a = 0 to examenes step a = a+1)
        {
            do
            {
                write"Ingrese su calificacion del examen ",a + 1," :"
                read calificaciones[a][i]

                if(calificaciones[a][i] > 100 || calificaciones[a][i] < 0)
                {
                    write "Calificacion invalida"
                }
            }
            while(calificaciones[a][i] > 100 || calificaciones[a][i] < 0)
        }
    }
}

funcion promedio(calificaciones[examenes][alumnos] : int , Prom[alumnos] : real , Total[alumnos] : int , posmax[2] : int , respaldoP[alumnos] : real)
{
    i,a,total : real

    for(i=0 to alumnos step i=i+1)
    {
        total = 0

        for(a=0 to examenes step a=a+1)
        {
            total = calificaciones[a][i] + total
        }
        Total[i] = total
    }

    for(i=0 to alumnos step i=i+1)
    {
        Prom[i] = Total[i]/examenes
        respaldoP[i] = Total[i]/examenes
    }
}

 real pgeneral(Prom[alumnos] : real)
{
    i, total : int
    Pgeneral : real

    total = 0

    for(i=0 to alumnos i=i+1)
    {
        total = Prom[i] + total
    }

    Pgeneral = total/alumnos

    return Pgeneral;
}

funcion ordenar(posmax[2] : int, respaldoP[alumnos] : real)
{
i,a,maximo,pos : int

    for(a=0 to 3 step a=a+1)
    {
        if(a > 0)
        {
            respaldoP[pos] = 0;
        }
        for (i=0 to alumnos step i=i+1)
        {
            if(a > 0)
            {
                if(i==0)
                {
                    pos = i
                    maximo = respaldoP[i]
                }
                if(respaldoP[i] >= maximo)
                {
                    pos = i
                    maximo = respaldoP[i]
                }
            }
            else
            {
                if(i==0)
                {
                    pos = i
                    maximo = respaldoP[i]
                }
                if(respaldoP[i] > maximo)
                {
                    pos = i
                    maximo = respaldoP[i]
                }
            }
        }
        posmax[a] = pos
    }
}

funcion imprimir(Nombres[alumnos][cletras] : char, calificaciones[examenes][alumnos] : int, Prom[alumnos] : real, P : real, primero : int , segundo : int, tercero : int)
{

    i,a : int

    write"Nombre     Unidad 1  Unidad 2  Unidad 3  Unidad 4   Promedio"

    for(i=0 to alumnos step i=i+)
    {
        cout<<setw(25)<<Nombres[i]

        for(a=0 to examenes step a=a+1)
        {
        write calificaciones[a][i]
        }
        write Prom[i]
    }
    write"Promedio general ",P

    write"Los tres promedios mas altos son: ",Nombres[primero]
    write"                                  ",Nombres[segundo]
    write"                                  ",Nombres[tercero]

}



Imagen del programa:



No hay comentarios:

Publicar un comentario