martes, 29 de mayo de 2012

practica 13 (problemas).

problema 1.
haga un programa que considere una matriz de 4x4 y realice las siguientes funciones:
a) introducir los datos de la matriz.
b) sumar los datos de la matriz.
c) encontrar el dato mayor.
d) desplegar los datos de la matriz.
e) sumar la diagonal principal.
f) buscar un dato y encontrar las veces de la existencia del dato.



P-seudo codigo.
1.- Inicio
void insertardatos(int tabla[4][4])
{int R,C
for(R=0 to R<4 step R++)
{for(C=0 to C<4 step C++)
{Print "Punto M[" ,(R+1), "][" ,(C+1), "]= "
Print tabla[R][C]}}
Print  endl}

template <class T>
T suma(T sum[4][4])
{int R,C,s=0
for(R=0 to R<4 step R++)
{for(C=0 to C<4 step C++)
{s=s+sum[R][C]}}
return s}

void max(int M[4][4])
{int R,C,mayor=M[0][0]
for(R=0 to R<4 step R++)
{for(C=0 to C<4 step C++)
{if(M[R][C]>=mayor)
{mayor=M[R][C]}}}
Print  "El dato mayor de la tabla es= " ,mayor}

void desplegar(int d[4][4])
{int R,C=0,D=1,E=2,F=3
Print  "\tDatos de la matriz"
for(R=0 to R<4 step R++)
{Print "\t" ,d[R][C], "\t" ,d[R][D], "\t" ,d[R][E], "\t" ,d[R][F]}
Print  endl}

template <class T>
T diagonal(T X[4][4])
{int r=0,s=0
while(r<4)
{s=s+X[r][r]
r++}
return s}

void exist(int e[4][4])
{int x=0,s=0,R,C
Print  "Que dato desea encontrar?"
Print  "Dato= "
Read x
for(R=0 to R<4 step R++)
{for(C=0 to C<4 step C++)
{if(x==e[R][C])
{s=s+1}
else
{s=s+0}}}
if(s==0)
{Print "No se encontro el dato"}
else
{Print "El dato se encontro " ,s, " veces"}}

1.- Inicio de programa
void main()
{int matriz[4][4]
insertardatos(matriz)
Print "La suma de todos los valores es= " ,suma(matriz)
max(matriz)
Print "La suma de la diagnoal principal es= " ,diagonal(matriz)
Print endl
desplegar(matriz)
exist(matriz)
fin.


problema 2.

a.-Escriba un programa que sume los elementos equiparables bidimensionales denominados primero y segundo. Ambos arreglos deben tener dos renglones y tres columnas. Por ejemplo los elementos [1][2] del arreglo que resulte deben ser la suma de primero [1][2] y segundo [1][2]. Los arreglos primero y segundo deben realizarse de la manera siguiente:
                                         primero:                                           segundo:
                              16          18        23                       24             52           77
                              54          91        11                       16             19           59



P-seudo codigo.
1.- Inicio
void pri(int x[2][3])
{int R,C=0,V=1,B=2
Print  "Primer arreglo"
for(R=0 to R<2 step R++)
{Print x[R][C], "\t" ,x[R][V], "\t" ,x[R][B]}
Print endl}

void seg(int y[2][3])
{int R,C=0,V=1,B=2
Print  "Segundo arreglo"
for(R=0 to R<2 step R++)
{Print y[R][C], "\t", y[R][V], "\t" ,y[R][B]}
Print  endl}

void suma(int x[2][3],int y[2][3])
{int R,a=0,s=1,d=2
cout<<"Suma equiparable de los arreglos"
for(R=0;R<2;R++)
{Print (x[R][a]+y[R][a]), "\t" ,(x[R][s]+y[R][s]), "\t" ,(x[R][d]+y[R][d])}
Print  endl}

void pri3(int D[2][3])
{int R,C=0,V=1,B=2
cout<<"Primer arreglo"
for(R=0 to R<2 step R++)
{Print D[R][C], "\t" ,D[R][V], "\t" ,D[R][B]}
Print  endl}

void seg2(int S[2][3])
{int R,C=0,V=1,B=2;
Print  "Segundo arreglo"
for(R=0 to R<2 step R++)
{Print S[R][C], "\t" ,S[R][V], "\t" ,S[R][B]}
Print  endl}

void pri2(int D[2][3],int S[2][3])
{int R,C
randomize()
for(R=0 to R<2 step R++)
{for(C=0 to C<3 step C++)
{D[R][C]=random(100)+1
S[R][C]=random(100)+1}}}

void suma2(int D[2][3],int S[2][3])
{int R,a=0,s=1,d=2
Print  "Suma equiparable de los arreglos"
for(R=0 to R<2 step R++)
{Print (D[R][a]+S[R][a]), "\t" ,(D[R][s]+S[R][s]), "\t" ,(D[R][d]+S[R][d])}}

1.- Inicio de programa
void main()
{int primero[2][3]={16,18,23,54,91,11}
int segundo[2][3]={24,52,77,16,19,59}
int A[2][3],B[2][3]
pri(primero)
seg(segundo)
suma(primero,segundo)
pri2(A,B)
pri3(A)
seg2(B)
suma2(A,B)
fin.


b.- Escriba un programa que sume los elementos equiparables de los arreglos bidimensionales denominados primero y segundo. ambos arreglos debe tener dos renglones y tres columnas. Los arreglos primero y segundo deben generarse con numeros aleatorios.


P-seudo codigo.
inicio.
void introducevolt(float arreglo[3][5])
{int r,c
srand(time(NULL))
for(r=0; r<3; r++)
{for (c=0; c<5; c++)
{arreglo[r][c]=rand()%100+1;}}}

void rangovoltajes(float arreglo[3][5], int &v1, int&v2, int &v3, int &v4, int &v5)
{v1=v2=v3=v4=v5=0
int r,c
for (r=0; r<3; r++)
{for (c=0; c<5; c++)
{if (arreglo[r][c] < 60)
{v1++}
else
{if (arreglo[r][c] >=60 && arreglo[r][c]< 70)
{v2++}
else
{if (arreglo[r][c] >=70 && arreglo[r][c]< 80)
{v3++}
else
{if (arreglo[r][c] >=80 && arreglo[r][c]< 90)
{v4++}
else
{v5++}}}}}}}

void main()
{real voltajes[3][5]
int c1,c2,c3,c4,c5
introducevolt(voltajes)
rangovoltajes(voltajes,c1,c2,c3,c4,c5)
print"numero de vltajes menores que 60 =",c1
print" numero de voltajes mayores que 60, pero menores que 70 =",c2
print" numero de voltajes mayores que 70, pero menores que 80 =",c3
print" numero de voltajes mayores que 80, pero menores que 90 =",c4
print" numero de voltajes mayores que 90 =",c5



practica 14 (practicas).

problema 1.
Elabora un programa que leea el nombre de 10 trabajadores y su producción mensual por cada uno de los 12 meses del ano, en dos arreglos uno para nombres y otro para producciones, en los cuales el elemento N corresponde al trabajador N. Se requiere que imprima el siguiente reporte:
análisis de producción.

                                                   nombre                                      total de producción
promedio de producción:
debe imprimir solo los que tengan producción por arriba del promedio.


P-seudo codigo.
1.- Inicio
void tabla0(int prod[10][12])
{int t,y
for (t=0 to t<10 step t++)
{for(y=0 to y<12 step y++)
{prod[t][y]=0}}}

void datos(int prod[10][12],int N, char nombres[10][20])
{int t,r
Print  "Nombre del trabajador " ,N, "= "
gets(nombres[N-1])
srand(time(NULL))
for(t=0 to t<10 step t++)
{for(r=0 to r<12 step r++)
{prod[t][r]=rand()%10+1}}}

template <class T>
void tabla (T prod[10][12])
{int t,r
const int reng=10
const int colm=12
Print  endl
Print  "\t\t\tMeses"
Print  "   1   2   3   4   5   6   7   8   9   10  11  12"
Print  "------------------------------------------------"
for(t=0 to t<reng step t++)
{Print "Trabajador ", (t+1)
for(r=0 to r<colm step r++)
{prod[t][r]
Print  setw(4), prod[t][r]}
Print endl
Print  endl}}

int prom(int prod[10][12])
{int suma=0,t ,r
for(t=0 to t<10 step t++)
{for(r=0 to r<12 step r++)
{suma=suma+prod[t][r]}}
return suma/120}

void analisis(int prod[10][12], char nombres[10][20])
{int t,r,suma,promedio
promedio=prom(prod)
Print  "Analisis de produccion"
Print endl
Print  "Nombre\t\t Total de produccion"
for(t=0 to t<10 step t++)
{suma=0
for(r=0 to r<12 step r++)
{suma=suma+prod[t][r]}
if(suma/12>promedio)
{Print nombres[t], "\t\t\t", suma/12}}
Print  "Promedio de produccion= ", promedio}

1.- Inicio de programa
void main()
{int t
char nombres[10][20]
int prod[10][12]
tabla0(prod)
for(t=1 to t<=10 step t++)
{datos(prod,t,nombres)}
tabla(prod)
Print endl
analisis(prod,nombres)
fin.


problema 2.
se tienen varios empleados, por cada empleados se tienen los siguientes datos:
nombre y la producción de los 30 días del mes. Elaborar un programa que lea y genere los siguientes reporte.
                                                      Reporte mensual de producción.
Nombre                   Produccion              Promedio           Días arriba
                                Mes                         diario                 del promedio 




P-seudo codigo.
inicio.
void limpiartabla(int produccion[10][30])
{int r,c
const int reng=10
const int colm=30
for (r=0 to r<reng step r++)
{for (c=0 to c<colm step c++)
{produccion[r][c]=0}}}


void insertadatosdeproduccion(int produccion[10][30], int n, char nombres[10][10])
{int r,c
const int reng=10
const int colm=30
print" nombre trabajador ",n,"="
gets (nombres[n-1]);
'\t\n';
srand(time(NULL));
for (r=0 to r<reng step r++)
{for (c=0 to c<colm step c++)
{produccion[r][c]=rand()%9+1;}}}


void despliegatabla (int produccion[10][30],char nombre[10][10])
{int r,c
const int reng=10
const int colm=30
cout<<"\t\t datos dela produccion"<<endl;
for (r=0; r<reng; r++)
{print"\t\n"
for (c=0 to c<colm step c++)
{produccion[r][c]
print,setw (2),produccion[r][c]}
print""}}

int calcularpromedio(int produccion[10][30])
{int suma=0
int r,c
for (r=0 to r<10 step r++)
{for (c=0 to c<30 step c++)
{suma=suma+produccion[r][c]}}
return suma/300}


void desplegarreporte( int produccion[10][30], char nombres[10][10])
{int r,c
int suma
int promedio
promedio=calcularpromedio(produccion)
print" analissis dela produccion"
print" nombre        prod.mes.mayor que el prom"
for (r=0 to r<10 step r++)
{suma=0
for (c=0 to c<30 step c++)
{suma=suma+produccion[r][c]}
if (suma/30>promedio)
{print,nombres [r],"\t\t\t",suma/30}}
print" promedio dela  produccion =",promedio}

int main ()
inicio del programa.
system("color 7")
int n
real promdia
char nombres[10][10]
int produccion[10][30]
limpiartabla(produccion)
for (n=1to n<=10 step n++)
{insertadatosdeproduccion(produccion,n,nombres)}
despliegatabla(produccion,nombres)
print""
desplegarreporte(produccion,nombres)
fin.



problema 3.
Se tienen 15 estaciones de trabajo, cada una de las cuales tiene un encargado, del cual se conoce su nombre y la producción que se tuve por cada 1 de los meses del ano. elaborar un programa que lea 10 nombres y los guarde en un arregle; que haga lo mismo con los 12 meses de producción de cada una de las estaciones y que los almacene en una matriz de 10x12. Se requiere que imprima el siguiente reporte:
Análisis de producción
Estacion             Total de producción
Total                  XXXXX
Estación mas productiva:

Encargado de la estación:

Cantidad producida:




P-seudo codigo.
inicio.
void limpiartabla(int produccion[10][12])
{int r,c
const int reng=10
const int colm=12
for (r=0; r<reng; r++)
{for (c=0; c<colm; c++)
{produccion[r][c]=0}}}

void insertadatosdeproduccion(int produccion[10][12], int n, char nombres[10][10])
{int r,c
const int reng=10
const int colm=12
print" nombre trabajador ",n,"="
gets (nombres[n-1])
srand(time(NULL))
for (r=0 to r<reng step r++)
{for (c=0 to c<colm step c++)
{produccion[r][c]=rand()%10+1}}}


template <class t>
void despliegatabla (t produccion[10][12])
{int r,c
const int reng=10
const int colm=12
"\t\t datos dela produccion"
for (r=0 to r<reng step r++)
{for (c=0 to c<colm step c++)
{produccion[r][c]
print,setw (4),produccion[r][c]}
print""}}

void desplegarreporte(int produccion[10][12])
{int r,c,suma,total
const int reng=10
const int colm=12
print" \n\t analisis de la produccion \n"
for(r=0 to r<reng step r++)
{suma++
for (c=0 to c<colm step c++)
{suma=suma+produccion[r][c]}}
cout<<"total dela produccion es =",suma
for (r=0 to r<reng step r++)
{suma=0
for(c=0 to c<colm step c++)
{suma=suma+produccion[r][c]}}
print"cantidad producida en la estacion mas producctiva = ",suma}

int main ()
inicio.
int n
char nombres[10][10]
int produccion[10][12]
limpiartabla(produccion)
for (n=1 to n<=10 step n++)
{insertadatosdeproduccion(produccion,n,nombres)}
despliegatabla(produccion)
print""
desplegarreporte(produccion)
fin.


martes, 22 de mayo de 2012

Tarea. Cadena de caracteres.

¿Que son?

Las cadenas de caracteres (también llamadas cadenas o strings) son un tipo particular de vectores, son de hecho vectores de char, con la particularidad que tienen una marca de fin (el caracter '\0'), además el lenguaje nos permite escribirlas como texto dentro de comillas dobles. Veamos unos ejemplos de su declaración:

        char cadena_hola[]="Hola";
        char otro_hola[]={'H','o','l','a','\0'}; // Igual al anterior
        char vector[]={'H','o','l','a'}; /* Un vector de 4 elementos,
                con los elementos 'H','o','l' y 'a' */
        char espacio_cadena[1024]="Una cadena en C";
        char cadena_vacia[]="";


¿Como se declaran o definen las cadenas de caracteres?

Una cadena en C++ es un conjunto de caracteres, o valores de tipo char, terminados con el carácter nulo, es decir el valor numérico 0. Internamente, en el ordenador, se almacenan en posiciones consecutivas de memoria. Este tipo de estructuras recibe un tratamiento muy especial, ya que es de gran utilidad y su uso es continuo.
La manera de definir una cadena es la siguiente:

  • char <identificador> [<longitud máxima>];

Una cadena de caracteres se maneja con string. Para esto se incluye <string>.
Para declarar una cedena, se puede hacer:

  • string cadena = "texto";

Y para buscar una subcadena dentro de otra se puede usar el método find.

¿como se hace una lectura de una cadenas de caracteres?

Para hacer la lectura de una cadena de caracteres se pueden utilizar la función scanf o gets de la siguiente forma:

  • scanf("%s",cadena); o gets(cadena);

La ventaja de utilizar el gets en lugar del scanf es la lectura de los espacios en blanco, cosa que no hace el scanf.
Otra forma de leer una cadena de caracteres es hacerlo caracter por caracter como un arreglo unidimensional o vector, manejandola posicion por posicion cadena[posicion], mas adelante se vera un ejemplo de lo antes mencionado.

¿Como se hace una impresión de caracteres?

Para imprimir una cadena de caracteres se puede utilizar la función puts o la función printf, como se indica a continuación:

  • puts(cadena); 

  • printf("%s",cadena); 

la diferencia entre la funcion printf y puts para cadenas de caracteres es que la funcion puts cambia de linea por si sola y la función printf no, la ventaja de la funcion printf es que con ella si se pueden desplegar varias cadenas.
Al igual que para leer una cadena tambien se puede desplegar una cadena como un arreglo, es decir posicion por posición, esto tambien se manejara en un ejemplo mas adelante.

Algunos ejemplos usando <string.h>:


#include <stdio.h>
#include <string.h>
...
        char color[] = "rojo";
        char grosor[] = "grueso";
        ...
        char descripcion[1024];
 
        strcpy(descripcion, "Lapiz color ");
        strncat(descripcion, color, 1024);
        strncat(descripcion, " de trazo ", 1024);
        strncat(descripcion, grosor, 1024);
        // descripcion contiene "Lapiz color rojo de trazo grueso"
...

void intercambiar(char vector[], int pos1, int pos2);
void invierte_cadena(char cadena[])
{
        int largo = strlen(cadena);
        for (int i=0; i < (largo/2); i++) {
                intercambiar(cadena, i, (largo-1)-i);
        }
}
void intercambiar(char vector[], int pos1, int pos2)
{
        char aux=vector[pos1];
        vector[pos1]=vector[pos2];
        vector[pos2]=aux;
}

miércoles, 9 de mayo de 2012

practica 12 (problemas).

problema 1.
a) escriba una función denominada revisar() que tenga 3 parámetros. El primer parámetro acepta un numero entero, el segundo parámetro un numero en punto flotante y el tercer  parámetro un numero  en doble presicion. El contenido de una función solo debe mostrar los valores de los otros transmitidos a la función cuando se le llame.



b) escribir una plantilla de función denominada encontrar_abs() que acepte las transmisiones de un numero, calcule el valor absoluto y lo entregue en el momento de llamada.
c) escriba una plantilla de función denominada mult() que acepte como parámetro dos valores, multiplique estos y despliegue el resultado.
d) escribe una función denominada funpot() que eleve un valor a una potencia positiva de numero entero y entregue el resultad en el momento de llamada.



P-seudocodigo.
1.- Inicio
void revisar(int n1, real n2, double n3)
{Print "Valor entero= "
Read n1
Print "Valor flotante= "
Read n2
Print "Valor doble presicion= "
Read n3
Print endl}

void encontrar_abs(int n1)
{Print "Calcular el valor absoluto de un dato"
Print "Dato= "
Read n1
if(n1<0)
{n1=n1*(-1)}
Print "El valor absoluto es= ", n1
Print endl}

void mult(int n1,float n2)
{Print "Valor 1= "
Read n1
Print "Valor 2= "
Read n2
Print "La multiplicacion de " ,n1, "*" ,n2, " es= ", (n1*n2)
Print endl
Print endl}

void funpot(int dato)
{int pot
Print "Potencia= "
Read pot
Print "El valor elevado es= ", pow(dato,pot)}

1.- Inicio de programa
void main()
{int X=0,N1
Real N2
double N3
revisar(N1,N2,N3)
encontrar_abs(N1)
mult(N1,N2)
Print "Elevar un valor entero a cierta potencia"
Print "Valor= "
Read X
funpot(X)
fin.