domingo, 20 de mayo de 2012

Unidad 3: Tarea 2

1)      Qué diferencia existe entre cadena de texto y arreglo de caracteres?

 
En el lenguaje C una cadena de texto se debe simular mediante un arreglo de caracteres, en donde la terminación de la cadena se debe indicar con nulo. Un nulo se especifica como ‘\0’. Por otra parte cuando se quiere declarar un arreglo de caracteres se debe considerar un carácter adicional a la cadena más larga que se guarde. Por ejemplo, si se quiere declarar un arreglo cadena que guarde una cadena con 10 caracteres, se hará de la siguiente manera:




Char cadena[11];


Los arreglos siendo una lista ordenada de datos de un mismo tipo, necesitan ser declarados especificando su tamaño, por ejemplo un arreglo que contenga 10 números enteros seria :


int x [10];


Por otra parte la cadena de texto viene siendo un arreglo de caracteres como lo mencionado al comienzo de esta tarea. Es importante mencionar que en las cadenas de texto por comodidad, la constante tipo cadena es la unida constante que soporta C. El tamaño del arreglo debe considerar un espacio más al final del arreglo para colocar un carácter. Finalmente, cabe destacar que para las cadenas de texto no existen operadores, existen las librerías como “<string.h>” para copiar, comparar y procesar cadenas en general.


2)      Declaración de una cadena de texto


Para declarar una cadena se hace como en el caso de un arreglo. Por ejemplo, si se quiere declarar una cadena con una longitud de 20 caracteres se declararía de la siguiente manera:


Char texto[20];


Al igual que en el caso de un arreglo, no se puede introducir mas de 20 elementos en la cadena. Por ejemplo:


#include <stdio.h>


Main()
{
Char nombre[20];
Printf (“introdusca su nombre(20 letras máximo) : “) ;
Scanf (“%s”, nombre );
Printf ( “\nEl nombre que ha escrito es: %s\n”, nombre);
}


3)      Como se realiza la lectura de cadenas de texto?


Existen diferentes funciones las cuales funcionan con la cadena de caracteres, cabe destacar que cada una de estas funciones que se presentara funcionan con la biblioteca o librería string.h por lo que es necesario incluirla en la sección de librerías.


·         Funcion cin.getline();
Esta función requiere de 3 datos o parámetros: nombre, longitud y carácter de fin.


Nombre: nombre de la variable que va a contener la cadena
Longitud: la cantidad de caracteres que se podrán introducir en la cadena.
Carácter de fin: carácter que el usuario usara al final de la cadena.


Por ejemplo:


Si se tiene un arreglo char de 300 elementos llamado str (nuestra cadena) y queremos pedirle al usuario que la llene, la función cin.getline quedaría de la siguiente manera:


Cin.getline(str,300, ‘\n’);


·         Funcion cin.get();
Esta función sirve para leer un carácter del flujo de entrada.


Por ejemplo:
La función cin.get(letra) lee un carácter y lo guarda en letra. Devuelve 0 si el carácter leído es final de archivo. En otro caso devuelve 1.


·         Funcion cin.ignore()
Esta función sirve para leer uno o más caracteres sin procesar del flujo de entrada.


·         Funcion gets()
Esta función sirve para ller una línea desde el archivo de entrada. Lee hasta que encuentra un salto de línea. Esta función es llamada con el nombre de la variable donde queremos guardar la cadena leida.


Por ejemplo:


Char nombre[20];

Gets(nombre);
….

 ·         Función getch()
Esta función sirve para leer un carácter del flujo de entrada sin que aparezca en pantalla. Se le llama sin argumentos y devuelve un entero.


Ejemplo:
Char letra;

Letra=getch();
If(letra==’S’)
Cout<<”Ha elegido seguir”;



·         Funcion getchar()
Sirve para leer el siguiente carácter del flujo de entrada. Se le llama sin argumentos y devuelve un entero.

Ahora se presentaran las funciones utilizadas para la manipulación de cadenas con el uso de la librería <string.h>

 ·         Funcion Strlen
Esta función regresa la longitud de una cadena de caracteres.


Por ejemplo:
Este programa lee una cadena de caracteres e imprime por emdio de la función strlen el numero de caracteres tecleado.

#include<string.h>
#include<stdio.h>
#include<conio.h>
void main(void)
{char cadena[80];
clrscr();
printf("Teclea una cadena de maximo 80 caracteres ");
gets(cadena);
printf("La longitud de la cadena que tecleaste es de %d",strlen(cadena));
getch();
}
·         Funcion Strcpy
Esta función copia a una cadena otra cadena de caracteres.

Ejemplo:
Este programa, lee una temperatura en grados F y manda un mensaje de acuerdo a la temperatura, el mensaje se copia en una variable y esta solo se imprime al final.


#include<conio.h>
#include<stdio.h>
#include<string.h>
void main(void)
{
Char mensaje[40];
Float temp;
clrscr();
printf("Cual fue la temperatura promedio en øF el dia de hoy");
scanf("%f",&temp);
if (temp<= 60)
strcpy(mensaje,"CASI NOS CONGELAMOS");
else
if(temp<=80)
strcpy(mensaje,"GENIAL PARA DIA DE CAMPO ");
else
if (temp<=100)
strcpy(mensaje,"PARA PASARSELA EN LA ALBERCA");
else
strcpy(mensaje,"COMO PARA ESTAR EN EL CONGELADOR ");
puts(mensaje);
getch();
}


·         Funcion Stricmp(cadena1,cadena2)
Compara 2 cadenas de caracteres alfabéticamente y regresa un valor entero de acuerdo a la comparación.


·         Funcion Strcat(cadena destino,cadena origen)
Esta función agrega al final de una cadena de caracteres otra cadena de caracteres.

 
Por ejemplo:
#include<conio.h>
#include<stdio.h>
#include<string.h>
voidmain()
{
Char cadena[80];
clrscr();
printf(“Teclea una cadena”);
gets(cadena);
strcat(cadena,”Agrega al final”);
puts(cadena);
getch();
}





Esta informacion fue consultada en las siguientes paginas:

http://codigoc.org/464-como-usar-cin-getline-en-c
http://www.iqcelaya.itc.mx/~vicente/Programacion/Cadenas.pdf
http://yaqui.mxl.uabc.mx/~eherrera/pcadenas.html
http://gpd.sip.ucm.es/yolanda/ProgI0910/P1-006.pdf

viernes, 18 de mayo de 2012

Practica 14

Practica 14 Problema 1

Pseudocodigo

template<class t>
Funcion void introducedatosarreglo(t tabla [20][5],int numalumnos,int numexa,char name[20][30])
{ r,c int 
print "Introduce los siguientes datos: "<<endl
for(r=0 to r<numalumnos step r++)
{
print "Nombre del alumno: " 
read (name[r])
for(c=0 to c<numexa step c++)
{
print "Tabla[",(r+1),",",(c+1),"]="
read tabla[r][c]
}}}
Fin funcion
template <class t>
Funcion t calcularpromedio(t tabla[20][5],int na,int ne,char name[20][30]){
r,c,amayor int 
mayor=0 real  
suma=0, promedioG=0 t
print "Nombre: \t\tCalificaciones\t\tPromedio"
for(r=0 to r<na step r++)
{
suma=0
print name[r],"\t"
for(c=0 to c<ne step c++){
print "\t"<<tabla[r][c]
suma=suma+tabla[r][c] }
promedioG=promedioG+(suma/ne)
print "\t\tPromedio: ",suma/ne
if((suma/ne)>mayor){
mayor=(suma/ne) amayor=r }}
print "\n\n\tPromedio General: ",(promedioG/na)
print "\n\n\nMejor Promedio:\n\nNombre: ",name[amayor]
print "\n\tMejor Promedio: ",mayor
return (promedioG/na) }
Fin funcion
Inicio Programa
int main(){
numalumnos,numexam int
name[20][30] char
tabla[20][5] real
print "Numero de alumnos: "
read numalumnos
print "Numero de examenes por alumno: "
read numexam
introducedatosarreglo(tabla, numalumnos, numexam, name)
calcularpromedio(tabla, numalumnos, numexam, name)
}
Fin programa




Practica 14 Problema 2

Pseudocodigo

Inicio Funciones
void datosarreglo(int datos[4][4]){
r,c int   
randomize() 
for(r=0  r<4  r++){
for(c=0  c<4  c++){
datos[r][c]=random(10)+1 
print setw(2),datos[r][c],"  "  }
}}
Fin funcion
void sumacolumnas(int datos[4][4]){
r,c,suma int
for(c=0  c<4  c++){
suma=0 
for(r=0  r<4  r++){
suma=suma+datos[r][c]  }
print "Suma Columna ",(c+1)," = ",suma
}}
Fin funcion
void sumarenglones(int datos[4][4])
{
r,c,suma=0  int
for(r=0  r<4  r++){
suma=0 
for(c=0  c<4  c++){
suma=suma+datos[r][c]  }
print "Suma Renglon ",(r+1)," = ",suma
}}
Fin funcion
void sumadiagonalprincipal(int datos[4][4]){
z,suma=0 int 
for(z=0  z<4  z++){
suma=suma+datos[z][z]  }
print "Suma Diagonal Principal = ",suma }
void sumadiaginv(int datos[4][4]){
r,c,suma=0 int
c=3 
for(r=0  r<4  r++){
suma=suma+datos[r][c] 
c--  }
print "Suma Diagonal Inversa= ",suma }
Fin función
 
Inicio Programa
int main()
{
datos[4][4] int
datosarreglo(datos) 
sumacolumnas(datos) 
sumarenglones(datos) 
sumadiagonalprincipal(datos) 
sumadiaginv(datos) 
Fin programa
}




Practica 14 Problema 3

Pseudocodigo

Inicio Funciones
void datosproduccion (int produccion[13][8],char nomemp[12][30])
{
r,c int
randomize() 
for(r=0  r<12  r++)
{
print "Nombre de la Planta " , (r+1) , " : " 
read (nomemp[r]) 
for(c=0  c<7  c++){
produccion[r][c]=random(10)+1 
}}}
Fin funcion
void prosem(int produccion[13][8])
{
r,c,suma int  
for(r=0  r<12  r++){
suma=0 
for(c=0  c<7  c++){
suma=suma+produccion[r][c]  }
produccion[r][7]=suma 
}}
Fin funcion
void producdia(int produccion[13][8],int & sumat){
r,c,mayor=0,suma int 
sumat=0 
for(c=0  c<7  c++){
suma=0 
for(r=0  r<12  r++){
suma=suma+produccion[r][c]  }
produccion[12][c]=suma 
sumat=sumat+suma 
}}
Fin funcion
void pmayor(int produccion[13][8], int & mayor, int & posmayor){
r int 
mayor=0 
posmayor=0 
for (r=0  r<12  r++){
if (produccion[r][7]> mayor)
{mayor=produccion[r][7] 
posmayor=r 
}}}
Fin funcion
void dmayor(int produccion[13][8], int & mayor2, int & posmayor2){
c int  
mayor2=0 
posmayor2=0 
for (c=0  c<7  c++){
if (produccion[12][c]> mayor2)
{mayor2=produccion[12][c] 
posmayor2=c 
}}}
Fin function
 
Inicio Programa
void main()
{
produccion[13][8], r, c int
posmayor, mayor, posmayor2,mayor2,sumat  int
nomemp[12][30] char
datosproduccion(produccion,nomemp) 
producdia(produccion, sumat) 
prosem(produccion) 
pmayor(produccion, mayor, posmayor) 
dmayor(produccion, mayor2, posmayor2) 
print "Reporte Semanal de Produccion\n" 
print "Planta\tDia 1\tDia 2\tDia 3\tDia 4\tDia 5\tDia 6\tDia7\tPro. Semanal\n" 
for(r=0  r<12  r++){
print nomemp[r] , "\t" 
for(c=0  c<7  c++){
print setw(4) , produccion[r][c] , "\t"  }
print setw(4) , produccion[r][7]  }
print 
for(c=0  c<7  c++){
print "\t" 
print setw(4) , produccion[12][c]  }
print "\t" , setw(4) , sumat 
print "La planta mas productiva es: " , (nomemp[posmayor])  
print "Mayor produccion de planta: " , mayor  
print "Dia de mas produccion: " , (posmayor2+1) 
print "Mayor produccion por dia: " , mayor2  
}
Fin programa









lunes, 7 de mayo de 2012

Practica 13

Practica 13 Problema 1

Pseudocodigo

Inicio
int main()
{
a[10] real
 n1 int
do
{print "Introduce numero de datos(<=10)= "
read n1
}
while(n1<=0 || n1>10)
introduceDatosArreglo(a,n1)
print "La media geometrica es : ", mediaGeometrica(a,n1)
print "La media Armonica es   : ", mediaArmonica(a,n1) 
print "El Intervalo es de     :[", menor(a,n1), ",", mayor(a,n1), "]"
print "La Variancia es        : ", variancia(a,n1), 
print "La Desviacion estandar : ", pow(variancia(a,n1),.5)
}
Fin Programa

Inicio Funciones
template <class T>
void introduceDatosArreglo(T arreglo[10],int n)
{
int i=0
for(i=0 i<n i++)
{
print "DATO ", (i+1), "= "
read arreglo[i]
}}
Fin Funcion
template <class T>
T mediaGeometrica(T arreglo[10],int n)
{
T suma=1
int i=0
for(i=0 i<n i++)
{
suma=suma*arreglo[i]
}
return pow(suma,1.0/n)
}
Fin funcion
template <class T>
T mediaArmonica(T arreglo[10],int n)
{
T suma=0
int i=0
for(i=0 i<n i++)
{
suma=suma+1.0/arreglo[i]
}
return n/suma
}
Fin funcion
template <class T>
T menor(T arreglo[10],int n)
{
T menor=99999
int i=0
for(i=0 i<n i++)
{
if(arreglo[i]<menor)
{
menor=arreglo[i]
}}
return menor
}
Fin funcion
template <class T>
T mayor(T arreglo[10],int n)
{
T mayor=0
int i=0
for(i=0 i<n i++)
{
if(arreglo[i]>mayor)
{
mayor=arreglo[i]
}}
return mayor
}
Fin funcion
template <class T>
T variancia(T arreglo[10],int n)
{
T media=0
T suma=0
int i=0
for(i=0 i<n i++)
{
suma=suma+arreglo[i]
}
media=suma/n
suma=0
for(i=0 i<n i++)
{
suma=suma+pow(media-arreglo[i],2)
}
return suma/n
}
Fin funcion





 Practica 13 Problema 2

Pseudocodigo

Inicio Programa
void main ()
{
nom_vend[5][30]char
sueldos[5]={0,0,0,0,0}real
nom_art[5][30]char
precios[5]={0,0,0,0,0} real
numeroV,numeroART,CANT int
sigue char
print "Introduce nombre de vendedores"
Datosarreglo(nom_vend)
print "Nombre de los articulos"
Datosarreglo(nom_art)
print "Introduce precios de los articulos"
preciosART(precios)
do
{
print "Numero de vendedor ="
read numeroV
print "Numero de articulo ="
read numeroART
print "Cantidad de articulos ="
read CANT
print "Numero de verndedor: ",numeroV
print "Sueldo de verndedor: ",sueldovendedor(numeroV,numeroART,sueldos,precios,CANT)  
print "Desea hacer otro calculo (s/n) ="
read sigue
}
while (sigue=='s'||sigue=='S')
}
Fin programa

Inicio Funciones
void Datosarreglo(char A[5][30])
{
int I
for (I=0 I<=4 I=I+1)
{
print "dato ",(I+1),": "
read A[I]
} 
}
Fin funcion

void preciosART(float P[5])
{
int I
for (I=0 I<=4 I=I+1)
{
print "Articulo ",(I+1),": "
read P[I]
} 
}
Fin function

float sueldovendedor(int numeroV, int numeroART, float S[5], float P[5], int CANT)
{
switch(numeroV)
{
case 1: S[numeroV-1]=S[numeroV-1]+P[numeroART-1]*CANT*0.05
break
case 2: S[numeroV-1]=S[numeroV-1]+P[numeroART-1]*CANT*0.04
break
case 3:
case 4:
case 5: S[numeroV-1]=S[numeroV-1]+P[numeroART-1]*CANT*0.02
break
default: print "Error "
}
return S[numeroV-1]
}
Fin funcion



Practica 13 Problema 3

Pseudocodigo

Inicio Programa

void main()

{

 nombre[3][30],reg char

 saldoI[3],saldof[3],retiros[3]={0,0,0},deptos[3]={0,0,0},retiro,dep  real

 c,o,mov[3]={0,0,0} int



DatosClientes(nombre,saldoI,saldof) 

do

{



menu() 



print "Seleccione la opcion que desee: " 

read o 



switch(o)

{

case 1:



print "\nIntroducir la cantidad a retirar: " 

read retiro 

print "Introducir el numero de cliente: " 

read c 

retiros[c-1]=retiros[c-1]+retiro 

saldof[c-1]=saldof[c-1]-retiro 

mov[c-1]=mov[c-1]+1 

print "Para regresar (s o S): " 

read reg 

break 



case 2:



print "\nIntroducir la cantidad a depositar: " 

read dep 

print "Introducir el numero de cliente: " 

read c 

deptos[c-1]=deptos[c-1]+dep 

saldof[c-1]=saldof[c-1]+dep 

mov[c-1]=mov[c-1]+1 

print "Para regresar (s o S): " 

read reg 

break 



case 3:



print "\nIntroducir el numero de cliente: " 

read c 

Inicio Funciones



DlesplegarResultados(nombre,saldoI,saldof,deptos,retiros,mov,c) 

print "Para regresar (s o S) o salir(n o N): " 

read reg 

break 

default: print "error en opcion" ,   

}

}while(reg=='s'||reg=='S') 

}

Fin funcion





void DatosClientes(char n[3][30],float saldo[3],float saldofinal[3])

{

int i 

for(i=0  i<3  i++)

{

print "Nombre del cuentahabiente " ,  (i+1) ,  " : " 

read n[i] 

print "Saldo inicial del cliente " ,  (i+1) ,  " : " 

read saldo[i] 

saldofinal[i]=saldo[i] 

}

}

Fin funcion

void menu()

{

print "\n1) Retiro de efectivo"    

print "2) Deposito de efectivo"    

print "3) Estado de cuenta"    

}

Fin funcion

void DlesplegarResultados(char n[3][30],float saldo[3],float saldofinal[3], float d[3],float r[3],int movi[3],int num)

{

print "\n\nEstado De cuenta"    

print "Cuentahabiente: " ,  n[num-1]    

print "Saldo Inicial: " ,  saldo[num-1]    

print "Movimiento\tDeposito\tRetiro\tSaldo" ,   

print movi[num-1] ,  "            \t" ,  d[num-1] ,  "        \t" ,  r[num-1] ,  "       " ,  saldofinal[num-1]    

}

Fin funcion