lunes, 17 de diciembre de 2012

Unidad 3. Tarea 3.

Tarea 3
1. ¿Cuál es la opcion por omisión en C++?
Es hacer transmisiones por valor en lugar de transmisiones por referencia, precisamente para limitar la capacidad de una función llamada para alterar variables en la función que llama.


2-¿En que consiste el proceso conosido como transmicion por referencia?
Proceso en el que la funcion llamada puede hacer referencia , o tener acceso, a la variable cuya direccion se le transmitio.
3. Explique la precaucion que dice que los argumentos de referencia deben ser variables?
Es decir, no puede usarse para cambiar constantes. Por ejemplo, llamar a intercambio() con dos constantes como en la llamada intercambio(20.5, 6.5) transmite dos constantes a la función.


4. Mencione otra precaucion:
Es que una llamada función en si no da indicio de que la función llamada usara parámetros de referencia.


5-Explique la sintaxis para declarar un parametro de referencia en C++:
tipo-de-dato& nombre-de-referencia.
6-¿Cual es el significado de utilizar el simbolo & dentro de una declaracion ?
Se refiere a "la direccion del" tipo precedente de dato.

  7-¿De un esquema general aplicable a la ingenieria y ciencia?
Algoritmo:
Obtener los datos aportados al problema. Calcular los reultados deseados. Reportar los resultados de los calculos.
8. ¿Como se puede trabajar el algoritmo para resolver problemas?
Cada tarea en el algoritmo para resolver problemas puede trabajarse en forma independiente como una funcion, una especie de "mini" programam en C++ que de manera tipica es mas facil de completar que un programa entero. 

9. ¿A que se refiere la aplicacion de simulacion?
Hay muchos problemas de simulacion cientificos y de ingenieria enlos que hay qyue considerar la probabilidado deben utilizarse tecnicas de muestreo estadistico. Todos estos modelos estadisticos requieren la generacion de numeros alatorios. 

10. ¿Para que se requiere la generacion de numeros aleatorios?
Para crear un conjunto de numeros cuyo orden sea imprecindible.
11. ¿Que son los numeros seudoaleatorios?
Ya que las computadoras solo pueden manejar numeros dentro de un rango finito y con precision limitada los numeros seudoaleatorios son numeros lo suficientemente aleatorios para las tareas que vamos a realizar.
12. Defina los tipos de funciones que producen numero aleatorios en C++:
Son rad( ), que genera nunmeros aleatorios, y srand( ), que siembra valores aleatorios iniciales. 
 
13. Explique en que consiste el escalamiento:
Es el metodo para ajustar los numeros aleatorios producidos por un generador de numeros aleatorios para que residan dentro de dichos rangos.
14. ¿Cuales son las variables locales?
Son las variables creadas dentro de una funcion que solo estan disponibles en forma convencional solo para la misma funcion.
15. ¿Que es el alcanse de un identificador?
Se define como la seccion del programa donde el identificador, tal como una variable, es valido o "conosido". Esata seccion del programa tambie se conoce como la ubicacion donde la variable es visible.
16. Explique en que consiste una variable con alcance local:
Variable que solo tiene ubicacion de almacenaje reservada por una instruccion de declaracion hecha dentro del contenido de la funcion. Las variables locales solo tienen significado cuando se utilizan en expreciones o instrucciones dentro de de la funcion que las declara.
17. Explique en que consiste una variable de alcance global:
En estas variables el espacio de almacenaje se crea mediante una instruccion declaratoria ubicada fuera de cualquier funcion. Estas variables pueden ser utilizadas por todas las funciones que esten colocadas fisicamente despues de la declaracion de la variable global.
18. Explique cual seria un mal uso de las variables globales:
Utilizar todas las variables globales de manera indiscriminada destruiria las defensas que C++ proporciona para hacer que las funciones sean independientes y esten aisladas entre si, incluyendo la nesesidad de seleccionar cuidadosamente el tipo de argumentos que requiere una funcion, las variables que esta utilizada y el valor que devuelve.
19. ¿Que ocurre cuando una variable local tiene el mismo nombre que una variable global?
Todas las referencias al nombre de la variable hecha dentro del alcance de la variable local se refieren a ella.
20. ¿Cuál es la característica fundamental de los parámetros de referencia?
Tan solo proporciona la capacidad para que una función llamada y una que llama tenga acceso a la misma área de almacenamiento usando nombres diferentes.

Ejecicio 6.3
Problema 3
Ejercicio 6.4
Problema 2
Problema 5

Unidad 3. Tarea 2.

UNIDAD III TAREA 2

1. ¿Qué es transmitido por valor?
Es cuando la función llamada solo recibe copias de los valores contenidos en los argumentos en el momento de la llamada.

2. ¿Cuántos valores de forma directa puede devolver una función?
Solo un valor de forma directa.

3. ¿Qué debe usar una función para devolver un valor?
Debe usar una instrucción de devolución (return expression;).

4. ¿Qué datos debe proporcionar la función llamada?
El tipo de datos del valor devuelto.
El valor real que se devuelve.

5. ¿Qué datos debe proporcionar la función que llama?
Ser alertada del tipo de valor a esperar.
Usar de manera apropiada el valor devuelto.

6. ¿Qué es una función inLine?
Es la que agrupa las lineas repetitivas decodigo bajo n nombre de función común y hace que el compilador coloque este código en forma directa en el programa siempre que se llame a la función.

7. ¿Qué causa que se indique al compilador C++ que una función es inLine?
Causa que una copia del código dela función seacolocada en el programa en el punto en que es invocada.

8. ¿Cómo se declara una función como inLine?
Se requiere colocar la palabra inline antes del nombre de la función y definir la función antes que se haga cualquier llamada.

9. ¿A que se le llama transmisión por referencia?
Es la transmisión de direcciones, es que la función llamada pueda hacer referencia, obtener acceso a la variable cuyadireccion se ha transmitido.

10. ¿Qué parámetros de dirección proporciona C++?
Dos, referencias y apuntadores.

11. ¿Cómo se declara el encabezado de una función de transmisión por referencia?
Void valnuevo(doublé& num1, doublé& num2)

12. ¿Cómo se declara el prototipo de una funcion de transmission por referencia?
Void valnuevo(doublé&, doublé&);

13. ¿Cuáles son los tres pasos del algoritmo de intercambio?
1. Guardar el valor del primer parámetro en una ubicación temporal.
2. Almacenar el valor delsegundo parámetro en la primera variable.
3. Almacenar el valor temporal en el segundo parámetro.

14. Explique la precaucion que dice que los argumentos de referencia deben ser variables?
Es decir, no puede usarse para cambiar constantes. Por ejemplo, llamar a intercambio() con dos constantes como en la llamada intercambio(20.5, 6.5) transmite dos constantes a la función.


15. Mencione otra precaucion:
Es que una llamada función en si no da indicio de que la función llamada usara parámetros de referencia.

16. ¿Cuál es la opcion por omisión en C++?
Es hacer transmisiones por valor en lugar de transmisiones por referencia, precisamente para limitar la capacidad de una función llamada para alterar variables en la función que llama.

17. Como se declara la sintaxis de un parámetro de referencia.
Tipo-de-datos& nombre-de-referencia.

18. ¿Qué significa el símbolo &?
En C++ significa “la dirección de”.

19. ¿Cómo se lee la declaración “doublé& num1”?
“num1 es la dirección de un valor de precisión doble”.

20. De un ejemplo de una función de transmisión de referencia?
Void valNuevo(doublé&, doublé&)
Int main()
{
     -
-
-
valNuevo();
return 0;
}
Void valNuevo(double& xnum, double& ynum)
{
     ---
     Return 0;
}


Problema de aplicacion



Ejercicio 6.2 pag. 331 problema10,12
Problema 10

Problema 12


Ejercicio 6.3 pag. 341 poblema 4,5

Problema 4

Problema 5


Practica 13

Problema 1
 
Pseudocodigo:
 
struct producto
{
noProd int
descrip[30] char
precio real
cantidad int
}
producto Registro
FILE *alias
inicio funcion void ALTA_SECUENCIAL()
{
no_prod int
clrscr()
print "\n\rALTAS DE REGISTROS DE PRODUCTOS"
alias=fopen("C:\\datos\\PRODUCTO.SEC","rb+")
if(alias==NULL)
alias=fopen("c:\\datos\\PRODUCTO.SEC","wb")
print "\n\n\n\rNumero de producto: "; cin >> no_prod
fread(&Registro,sizeof(Registro),1,alias)
while(!feof(alias))
{
if(Registro.noProd==no_prod)
{
print  "\n\n\n\rRegistro duplicado !!!"
fclose(alias)
}
fread(&Registro,sizeof(Registro),1,alias)
}
print  "\n\rDescripcion: "
read gets(Registro.descrip)
print  "\n\rCantidad : "
read Registro.cantidad
print "\n\rPrecio : "
read Registro.precio
Registro.noProd=no_prod
fwrite(&Registro,sizeof(Registro),1,alias)
fclose(alias)
print "\n\n\n\rProducto registrado !!!"
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
fin funcion void ALTA_SECUENCIAL
 

inicio funcion void CONSULTA_SECUENCIAL(void)
{
no_prod int
clrscr()
print "\n\rCONSULTA DE REGISTROS DE PRODUCTOS"
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb")
if(alias==NULL)
{
print "\n\n\n\rNo existe el archivo !!!"
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
print "\n\n\n\rNumero de producto: "
read no_prod
while(!feof(alias))
{
if(Registro.noProd==no_prod)
{
print "\n\rNo Prod Descripcion Cantidad Precio "
print "\n\r----------------------------------------------------\n\n"
print Registro.noProd,setw(20),Registro.descrip,setw(10),Registro.cantidad,setw(10),Registro.precio
fclose(alias)
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
fread(&Registro,sizeof(Registro),1,alias)
}
print "\n\rNo se encuentra ese registro !!!"
fclose(alias)
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
funcion void CONSULTA_SECUENCIAL
 

inicio funcion void LISTADO_SECUENCIAL(void)
{
clrscr()
print "\n\rLISTADO DE REGISTROS DE PRODUCTOS"
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb"); // Intenta abrir el archivo
if(alias==NULL)
{
print "\n\n\n\rNo existe el archivo !!!"
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
print "\n\rNo Prod Descripcion Cantidad Precio "
print "\n\r-------------------------------------------------------------------\n\n"
fread(&Registro,sizeof(Registro),1,alias)
while(!feof(alias))
{
print Registro.noProd,setw(20),Registro.descrip,setw(10),Registro.cantidad,setw(10),Registro.precio
fread(&Registro,sizeof(Registro),1,alias)
}
fclose(alias)
print "\n\r------------------------------------------------------------------\n\n"
print "\n\rFin del listado !!!"
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
fin funcion void LISTADO_SECUENCIAL
inicio funcion int menu()
{
opcion int
print "\n\n1)alta de producto "
print "\n2)Consulta de producto"
print "\n3)Listado de productos"
print "\n4)Modificar datos de productos"
print "\n5)Baja Logica de productos"
print "\n6)Baja Fisica de productos"
print "\n7)Salida Programa"
print "\n\nSelecciona opcion = ?  "
read opcion
return opcion
}
fin funcion int menu
inicio funcion void MODIFICACION_SECUENCIAL(void)
{
no_prod int
clrscr()
print "\n\rMODIFICACION DE REGISTROS DE PRODUCTOS"
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb+")
if(alias==NULL)
{
print "\n\n\n\rNo existe el archivo !!!"
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
print "\n\n\n\rNumero de producto: "
read no_prod
fread(&Registro,sizeof(Registro),1,alias)
while(!feof(alias))
{
if(Registro.noProd==no_prod)
{
print "\n\rNo Prod Descripcion Cantidad Precio \n\n"
print "\n\r--------------------------------------------------------------\n\n"
print Registro.noProd,setw(20),Registro.descrip,setw(10),Registro.cantidad,setw(10),Registro.precio
print "\n\n\n\rAnote los nuevos datos ..."
print "\n\rDescripcion: "
gets(Registro.descrip)
print "\n\rCantidad : "
read Registro.cantidad
print "\n\rPrecio : "
read Registro.precio
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET)
fwrite(&Registro,sizeof(Registro),1,alias)
fclose(alias)
print "\n\n\n\rRegistro modificado !!!"
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
fread(&Registro,sizeof(Registro),1,alias)
}
print "\n\rNo se encuentra ese registro !!!"
fclose(alias)
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
fin funcion void MODIFICACION_SECUENCIAL
inicio funcion void BAJA_LOGICA_SECUENCIAL(void)
{
no_prod int
op char
clrscr()
print "\n\rBAJAS LOGICAS DE REGISTROS DE PRODUCTOS"
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb+")
if(alias==NULL)
{
print "\n\n\n\rNo existe el archivo !!!"
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
print "\n\n\n\rNumero de producto: "
read no_prod
fread(&Registro,sizeof(Registro),1,alias)
while(!feof(alias))
{
if(Registro.noProd==no_prod)
{
print "\n\rNo Prod Descripcion Cantidad Precio "
print "\n\r---------------------------------------------------------------\n\n"
print Registro.noProd,setw(20),Registro.descrip,setw(10),Registro.cantidad,setw(10),Registro.precio
Registro.noProd=0
strcpy(Registro.descrip,"")
Registro.cantidad=0
Registro.precio=0.0
do {
cout <<"\n\n\rEsta seguro que desea borrarlo? [S/N] ---> "
op=toupper(getche())
}while(op!='S' and op!='N')
if(op=='S')
{
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET)
fwrite(&Registro,sizeof(Registro),1,alias)
print "\n\n\n\rRegistro eliminado !!!"
}
fclose(alias)
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
fread(&Registro,sizeof(Registro),1,alias)
}
print "\n\rNo se encuentra ese registro !!!"
fclose(alias)
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
fin funcion void BAJA_LOGICA_SECUENCIAL
inicio funcion void BAJA_FISICA_SECUENCIAL(void)
{
FILE *temporal
clrscr()
print "\n\rBAJAS FISICAS DE REGISTROS DE PRODUCTOS"
alias=fopen("C:\\datos\\PRODUCTO.SEC","rb")
if(alias==NULL)
{
print "\n\n\n\rNo existe el archivo !!!"
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
temporal=fopen("C:\\datos\\TEMPORAL.TMP","wb")
fread(&Registro,sizeof(Registro),1,alias)
while(!feof(alias))
{
if(Registro.noProd!=0)
fwrite(&Registro,sizeof(Registro),1,temporal)
fread(&Registro,sizeof(Registro),1,alias)
}
fcloseall()
remove("C:\\datos\\PRODUCTO.SEC")
rename("C:\\datos\\TEMPORAL.TMP","C:\\datos\\PRODUCTO.SEC")
print "\n\n\n\rArchivo compactado !!!"
print "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
fin funcion void BAJA_FISICA_SECUENCIAL
 
inicio funcion principal
opc int
  do
{
clrscr()
  opc=menu()
  switch(opc)
{
case 1:
ALTA_SECUENCIAL()
break
case 2:
CONSULTA_SECUENCIAL()
break
case 3:
LISTADO_SECUENCIAL()
break
case 4: MODIFICACION_SECUENCIAL()
break
case 5 : BAJA_LOGICA_SECUENCIAL()
break
case 6: BAJA_FISICA_SECUENCIAL()
break
case 7: print "\n\nFinal programa "
break
default: print "\nError en opcion"
  }
}
while(opc !=7)
fin

 
Lenguaje C++
 
Problema 2
 
Pseudocodigo:
 
inicio funcion void salida_datos_file(int n)
 {
 ofstream salida
 salida.open("C:\\Datos\\calificaciones.txt")
 i int
 name[30] char

for(i=1 to n step i=i+1)
 {
 print "nombre ",i,"= "
 gets(name)
 salida,name

}
 salida.close()
 }

fin funcion void salida_datos_file
 
inicio funcion void agregar_datos_file()
 {
 ofstream salida
 salida.open("C:\\Datos\\calificaciones.txt",ios::app)
 i=1 int
 name[30],sigue char
 do
 {
 print "nombre ",i,"= "
 gets(name)
 salida,name
 print "\nDeseas continuar s/n "
 read sigue
 }
 while(sigue=='s' or sigue=='S')
 salida.close()
 }

fin funcion void agregar_datos_file

inicio funcion void entrada_datos_file()
 {
 ifstream entrada

entrada.open("C:\\Datos\\calificaciones.txt")
name[30] char
 print "\nListado de nombre \n"
 entrada.getline(name,30)
print name
 while(!entrada.eof())
 {
 entrada.getline(name,30)
 print ,name
 }
 entrada.close()
 }

fin funcion void entrada_datos_file

inicio funcion void almacena_calif(int n)
 {
 ofstream salida
 salida.open("C:\\Datos\\calificaciones.txt")
 r,c,calif int
 for(r=0 to <n r=r+1)
 {
 print "introduce calificaciones del estudiante ",(r+1)
 for(c=0 to <6 step c=c+1)
 {
 print "calificacion ",(c+1),"= "
 read calif
 salida calif," "
 }
 salida, "\n"
 }
 salida.close()
 }

fin funcion void entrada_datos_file

inicio funcion void leer_archivo_calif(int a[20][6],int promedio[20],int n)
 {
 ifstream entrada
 entrada.open("C:\\Datos\\calificaciones.txt")
 int r,c,suma
 for(r=0 to <n step r=r+1)
 {
 suma=0
 for(c=0 to <6 step c=c+1)
 {
 entrada a[r][c]
 print a[r][c],"\t"
 suma=suma+a[r][c]
 }

promedio[r]=suma/6
 print promedio[r]
 }
 entrada.close()
 }

fin funcion void entrada_datos_file

inicio funcion void menu()
 {
 print "  Menu de opciones \n"
 print "\n1)agregar nombre de alumnos "
 print "\n2)Listado de nombre de alumnos "
 print "\n3)agregar calificaciones de alumnos "
 print "\n4)Listado de calificaciones"
 print "\n5)Fin de programa\n"
 print "Seleccione opcion --->"
 }

fin funcion void menu

inicio programa
n,opcion int
c[20][6],p[20] int
 print "cantidad de alumnos "
 read n
 do
 {
 clrscr()
 menu()
 read opcion
 switch(opcion)
 {
 case 1:salida_datos_file(n)
 break
 case 2:entrada_datos_file()
 break
 case 3:almacena_calif(n)
 break
 case 4:
   print "listado de calificaciones alumnos\n\n"
   leer_archivo_calif(c, p, n)
       break
 case 5: print "\n\n FIN PROGRAMA\n "
         break
 default: print "error en opcion "
 }
 }
 while(opcion!=5)
 fin


Lenguaje C++


Problema 3

Pseudocodigo:
inicio funcion void almacena_datos_archivo()
{
ofstream salida
salida.open("C:\\datos\\numeros.txt")
i,j,n,dato int
for(i=1 to 3 step i=i+1)
{
print "cantidad de datos del grupo: ",i
read n
salida,n
for(j=1 to n step j=j+1)
{
print "dato ",j," grupo ",i,": "
read dato
salida,dato
}
}
salida.close()
}

fin funcion void almacena_datos_archivo

inicio funcion void leer_datos_archivo()
{
ifstream entrada
entrada.open("C:\\datos\\numeros.txt")
dato,n,suma,i,j int
for(i=1 to 3;step i=i+1)
{
entrada,n
suma=0
for(j=1 to n;step j=j+1)
{
entrada,dato
suma=suma+dato
}
print "el promedio del grupo ",i," es: ",(suma/n)
}
entrada.close()
}

fin funcion void leer_datos_archivo

inicio funcion void listado_datos_archivo()
{
dato int
ifstream entrada
entrada.open("C:\\datos\\numeros.txt")
if(entrada.fail())
{
print  "\nEl archivo no se abrio con exito\n por favor comprueve que el archivo existe\n"
exit(1)
}
print "listado datos archivo \n\n"
entrada,dato
while(!entrada.eof())
{
print dato," "
entrada>>dato
}
entrada.close()
}

funcion void listado_datos_archivo

inicio funcion void menu()
{
print "1)Crear el archivo de grupo de numeros \n\n"
print "2)Leer datos archivo para calcular el promedio sde cada grupo \n\n"
print "3)Listado de datos \n\n"
print "4)salida del programa \n\n"
print "seleccione opcion==> "
}

fin funcion void menu

inicio programa
opcion int
do
{
clrscr()
menu()
read opcion
switch(opcion)
{
case 1:almacena_datos_archivo()
break
case 2:leer_datos_archivo()
break
case 3:listado_datos_archivo()
break
case 4:print "\n\nsalida del programa "
break
default:print "error en opcion \n\n"
}
}
while(opcion !=4)

fin

Lenguaje C++



Problema 4

Pseudocodigo:

inicio funcion void agregar_datos_file()
{
ofstream salida
salida.open("C://Datos//grupo.txt",ios::app)
j,calf int
name[30],sigue char
calif int
do
{
 print "Nombre = ? "
gets(name)
salida,name
for(j=1 to 4 step j=j+1)
{
 print "Calificacion ",j," : "
 read calf
salida,calf
}
 print "\n\nDeseas Registrar otro alumno s/n ? "
 read sigue
  }
while(sigue=='s'  or sigue=='S')
salida.close()
}

fin funcion void agregar_datos_file

 inicio funcion void listado_datos_file()
{
 i,suma=0,promedio int
ifstream entrada
entrada.open("C://Datos//grupo.txt")
 nombre[30] char
 c1 int
clrscr()
 print "nombre alumno c1 c2 c3 c4 Promedio "
entrada.getline(nombre,30)
while(entrada.good())
{
 print ,setw(20),nombre
suma=0
for(i=1 to 4 step i=i+1)
{
entrada,c1
  print setw(4),c1
  suma=suma + c1
  }
promedio=suma/4
  print ,setw(5),promedio
  entrada.ignore()
  entrada.getline(nombre,30)
  }
entrada.close()
   }

fin funcion void listado_datos_file

 inicio funcion void menu()
{
  print "1)Agregar datos alumno\n"
  print "2)Listado de alumnos\n "
  print "3)Fin de programa\n"
  print "Elige opcion ==> "
  }

fin funcion void menu


inicio programa
opcion int
do
{
clrscr()
menu()
 read opcion
switch(opcion)
{
case 1: agregar_datos_file()
    break
case 2: listado_datos_file()
    break
case 3: cout<<"\n\nFin del programa \n\n"
    break
default: print "Error en opcion "
   break
}
}
while(opcion !=3)
fin


Lenguaje C++