respuestas guia 09 (arrays y structs)

23

Click here to load reader

Upload: skilltik

Post on 11-Jun-2015

632 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Respuestas Guia 09 (Arrays y Structs)

Fundamentos de Programación 2008

UNIDAD 9Arrays y Structs en C++

Respuestas a los ejercicios de la Guía Nº 9

EJERCICIO 9.1

Generar aleatoriamente un arreglo lineal a de 120 elementos numéricos, con enteros entre 1000 y 1500 y mostrarlo en el display de video. Luego ingresar dos valores en las variables m y p. El valor m debe ser insertado en la posición p del arreglo. Mostrar el vector modificado.Utilice el código del recuadro de la derecha, complételo y diseñe las funciones allí invocadas.

// arreglo formado por 'l' enteros al azar entre 'i' y 'f'#include<iostream.h>#include<time.h>#include<iomanip.h>using namespace std;int x[100];void gen_array(int v[],int i, int f,int l){ srand( time(NULL) );for (int j=0; j<l; j++)

v[j]= 1000 + (rand() % (f-i)); };//---------------------------------------------------------void mostrar_array(int v[],int l){

for (int i=0; i<l; i++)cout<<"v["<<i<<"]="<<setw(8)<<v[i]<<endl;

};//---------------------------------------------------------void insertar(int v[],int c, int p, int l){int x;for (x=(l-1); x>p-1; x--)

v[x]= v[x-1]; //desplazo los elementos hasta la pos p-1v[p]= c;};//---------------------------------------------------------int main(void){

int a[121], m, p;gen_array(a,1000,1500,120);mostrar_array(a,120);cout<<"Valor a insertar:";cin>>m;

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 1 de 18

.....void main ()coinst N=120;gen_array(a,1000,1500,N);cout<<”Valor a insertar:”;cin>>m>>p;insertar(a,N,m,p);....}

Page 2: Respuestas Guia 09 (Arrays y Structs)

cout<<"Posicion a insertar (comienza en 0):";cin>>p;insertar(a,m,p,121);mostrar_array(a,121);return 0;

}

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 2 de 18

Page 3: Respuestas Guia 09 (Arrays y Structs)

EJERCICIO 9.2Leer las calificaciones y dni de un grupo de alumnos que asistieron a unaevaluación parcial de programación. Generar un vector con los dni de losalumnos aprobados y otro con los dni de los no aprobados (Nota<7).Los datos finalizan con el dni 0.Se desea obtener como información de salida en el orden indicado:a. Un listado de los DNI de los alumnos aprobados.b. Las 2 mayores calificaciones y los DNI de los alumnos que las obtuvieron.c. Un listado con los DNI de los alumnos que no aprobaron la evaluación.

#include<iostream.h>#include<time.h>#include<iomanip.h>using namespace std;int main(void){ long ap[100];//Vector para los DNI de los alumnos Aprobados long nap[100];//Vector para los DNI de los alumnos No Aprobados long dni1=0,dni2=0;//para almacenar los DNI de los alumnos de mayor nota long dni;//variable para leer los dni int nota1=0, nota2=0;//para almacenar las mayores nota int ca=0, cap=0, cnap=0;//Contadores de Alumos, Aprobados y No Aprobados int nota;//variable para leer la nota while (true){ cout<<"\nIngrese un DNI: "; cin>>dni; if (dni==0) break;//fuerza a la salida del while cout<<"\nIngrese la Nota: "; cin>>nota; //Almacena el DNI en el vector que corresponde if (nota > 6) ap [cap++] = dni; else nap[cnap++]=dni; //Algoritmo para almacenar los 2 mayores if (nota>nota1) { nota2= nota1; dni2=dni1; nota1=nota; dni1=dni;} else if (nota>nota2) {nota2=nota; dni2= dni;}; } //fin del while, termina la carga de los arreglos //Respuesta al Item (a) for (int x=0; x<cap; x++) {cout<<"\nAprobados ["<<x<<"]= "<<ap[x]<<endl;}; //Respuesta al Item (b) cout<<"\nDNI del Primer Alumno de mayor nota: "<<dni1<<" Nota: "<<nota1; cout<<"\nDNI del Segundo Alumno de mayor nota: "<<dni2<<" Nota: "<<nota2<<endl; //Respuesta al Item (c) for (int x=0; x<cnap; x++) {cout<<"\nNO_Aprobados ["<<x<<"]= "<<nap[x]<<endl;};cout<<"\n\n\n\n\n\nPulse una tecla para continuar";}//Profesor Gerardo Sas - Fundamentos de Programacion - FICH - UNL

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 3 de 18

Page 4: Respuestas Guia 09 (Arrays y Structs)

EJERCICIO 9.3Leer N datos numéricos. Obtener la media y la desviación standard de la lista.Las expresiones para el cálculo se indican abajo. Utilice 2 funcionesllamadas media( ) y desviostd( ) para resolver el caso:

#include<iostream.h>#include<iomanip.h>#include<math.h>using namespace std;//Prototipos de las funcionesfloat media(int v[],int largo); //Prototipo de la funcionfloat desviostd(int v[],int largo );//Prototipo de la funcion//Cuerpo principal de programaint main(void){int N; float M, DS; int arreglo [1000];cout<<"ingrese la cantidad de datos que quiere ingresar: ";cin>>N;for (int x=0; x < N; x++) {cout<<"\nArreglo["<<x<<"]= "; cin>> arreglo[x]; };//fin del forM= media(arreglo,N);DS= desviostd(arreglo,N);cout<<"\n\n\n\n\n\n";cout<<" Media = "<<setw(8)<<M;cout<<"\n\n Desv. Std="<<setw(8)<<DS;

cout<<"\n\n\n\n\n\nPulse una tecla para continuar";}// Fin del Main//------------------------------float media(int v[],int largo){float suma=0; for(int i=0; i < largo; i++) suma += v[i]; return(suma/largo);//Retorna la media};//------------------------------float desviostd(int a[],int l ){float m= media(a,l), sum=0; for(int i=0; i < l; i++) sum += pow((a[i]-m),2); return(sqrt(sum/l));//Retorna la Desv. Stand.};//Profesor Gerardo Sas - Fundamentos de Programacion - FICH - UNL

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 4 de 18

Page 5: Respuestas Guia 09 (Arrays y Structs)

EJERCICIO 9.4Ejercicio 9.4Leer en un arreglo lineal una lista de N datos numéricos. Eliminar del arreglo el valor 523. Si este dato aparece más de una vez eliminar todas las ocurrencias. Informar el arreglo así modificado.Pregunta: al eliminar el valor 523 de la lista, ¿aumenta la disponibilidad de recursos en la computadora (memoria)? NO

Esta función C++ permite eliminar un valor determinado de un arreglo de enteros. La función debe recibir como parámetros el arreglo, su longitud y el valor a eliminar. Si el dato a eliminar aparece más de una vez se eliminan todas las ocurrencias.

#include<iostream.h>#include<math.h>using namespace std;//---Prototipos ---void mostrar(int a[],int largo); //Prototipo de la funcionvoid eliminar_valor(int a[],int &N,int m); //Prototipo de la funcion//-----------------------------------------int main(void){int N; int arreglo [1000],m;cout<<"ingrese la cantidad de datos que quiere ingresar: ";cin>>N;for (int x=0; x < N; x++) {cout<<"\nArreglo["<<x<<"]= "; cin>> arreglo[x]; };//fin de la carga del arreglocout<<"\nIngrese el dato a eliminar: ";cin>>m;eliminar_valor(arreglo, N, m);//llamo a la funcion, N es enviado por referenciamostrar(arreglo,N);//llamo a la funcion que muestra el arreglo por pantalla.cout<<"\n\n\n\n\nPulse una Tecla para Continuar";}//Fin del Main//-----------------------------------------void mostrar(int a[],int largo){for (int x=0; x < largo; x++) {cout<<"\nArreglo["<<x<<"]= "<<a[x];};};//-----------------------------------------void eliminar_valor(int a[],int &N,int m){for (int x=0; x < N; x++) if (a[x] == m) {for (int i= x; i< N; i++) a[x]= a[x+1]; N--;//Al eliminar 1 elemento se decrementa N en 1

x--; };//del if};//Profesor Gerardo Sas - Fundamentos de Programacion - FICH - UNL

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 5 de 18

Page 6: Respuestas Guia 09 (Arrays y Structs)

EJERCICIO 9.5Una asociación cooperadora escolar recibe aportes de dinero variable de losestudiantes asociados. Se leen sin orden alguno los montos aportados en elúltimo año y la fecha correspondiente (día, mes). Estos datos terminan con elvalor de monto cero. Informe:a) el total recaudado por mes,b) El mes de menor aporte.Para resolver el problema organice un arreglo de 12 elementos con los montosmensuales de los aportes y considere el tipo enumerado meses enum meses{ENE,FEB,MAR,ABR,MAY,JUN,JUL,AGO,SET,OCT,NOV,DIC};para referenciar a cada elemento del arreglo.

#include<iostream.h>using namespace std;

enum meses{ENE,FEB,MAR,ABR,MAY,JUN,JUL,AGO,SET,OCT,NOV,DIC};

int main(void){meses pos;//variables de tipo mesesint monto, menor_mes,dia, mes, menor_monto, v[DIC];//inicializo en 0 al vector acumulador para cada mesfor (int x=ENE; x<=DIC; x++){cout<<x<<endl;v[x]=0;};//cargo los datos en el vectorwhile (true){ cout<<"Ingrese el monto: ";cin>>monto;if (monto==0) break;//Si el monto es 0 sale del whilecout<<"Ingrese el dia: ";cin>>dia;//este dato no tiene aplicacion en ningun calculocout<<"Ingrese el numero de mes: ";cin>>mes;// podria ser pos = mes-1;switch (mes){//como lo pide el enunciado, debo hacer referencia al indicecase 1: pos= ENE; break;// con el tipo enumerado.case 2: pos= FEB; break;case 3: pos= MAR; break;case 4: pos= ABR; break;case 5: pos= MAY; break;case 6: pos= JUN; break;case 7: pos= JUL; break;case 8: pos= AGO; break;case 9: pos= SET; break;case 10: pos= OCT; break;case 11: pos= NOV; break;case 12: pos= DIC; break;};//del switchcout<<endl;v[pos]+= monto;//Acumulo el monto en la posicion indicada};//fin del while

//------item (a)----------for (int x=ENE; x<=DIC; ((meses)(int)(x)++))

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 6 de 18

Page 7: Respuestas Guia 09 (Arrays y Structs)

cout<<"\n\nMes "<<x+1<<"= "<<v[x];

//------item (b)-----------menor_monto= v[ENE]; menor_mes=0;for (int x=FEB; x<=DIC; x++)

if (v[x] < menor_monto){ menor_monto= v[x];menor_mes= x;};

cout<<"\n\nEl mes de menor aporte es "<<menor_mes+1<<"\n\n\n\n";

//------------------------cout<<"\n\n\n\nPulse una tecla para continuar.";

}//Fundamentos de Programacion - F.I.C.H. - U.N.L.//Profesor Gerardo Sas.//consultas a [email protected]

EJERCICIO 9.6En una olimpíada estudiantil compiten N alumnos en 3 pruebas(1: matemáticas, 2: física y 3: computación)..Se ingresan por cada inscripto el DNI y su número asignado para la competencia (entre 1 y N). Luego, sin orden alguno, se van ingresando ternas con lospuntajes de cada prueba: nro de participante, código de actividad(1: matemáticas, 2: física y 3: computación), puntaje en la actividad.Escriba un programa C++ que determine:a) El DNI del ganador de la competencia y el puntaje total obtenido.b) El DNI del estudiante que ocupó el 2do lugar y su puntaje.c) ¿Qué puntaje obtuvo en Computación el ganador de la competencia?

#include<iostream.h>#include<iomanip.h>#include<stdlib.h>#include<time.h>using namespace std;int main(void){int prueba[100][4],x,y;//en el arreglo guardo el DNI y las 3 marcas de tiempo//En el enunciado dice que se ingresan sin orden, para agilizar yo los genere//en forma aleatoriasrand( time(NULL) );for (x=0;x<100;x++) {prueba[x][0]= 30000+rand()%10000; cout<<setw(10)<<prueba[x][0]<<" "; for (y=1;y<4;y++) {prueba[x][y]= rand()%11; cout<<setw(3)<<prueba[x][y];}; cout<<endl; };//---Termina la carga y comienza el proceso de obtener los 2 mayores//--Items a y b. int suma, DNI1=0,mayor1=0,DNI2=0,mayor2=0,ganador; for (x=0;x<100;x++) {suma=0; for (y=1;y<4;y++)//Acumula las 3 mediciones

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 7 de 18

Page 8: Respuestas Guia 09 (Arrays y Structs)

suma += prueba[x][y]; if (suma>mayor1)//Algoritmo de los 2 mayores {mayor2 = mayor1; DNI2 = DNI1; mayor1 = suma; DNI1 = prueba[x][0]; ganador= x; }//del if else if (suma>mayor2) {mayor2 = suma; DNI2 = prueba[x][0]; };//del if };//del forcout<<"\n\na) El DNI del ganador de la competencia "<<DNI1;cout<<" y el puntaje total obtenido "<<mayor1;cout<<"\n\nb) El DNI del estudiante que ocupó el 2do lugar "<<DNI2;cout<<" y su puntaje "<<mayor2;cout<<"\n\nc) El puntaje que obtuvo en Computación ";cout<<"el ganador de la competencia es "<<prueba[ganador][3];cout<<"\n\n Pulse una tecla para continuar.";}//Fundamentos de Programacion - F.I.C.H. - U.N.L.//Profesor Gerardo Sas.//consultas a [email protected]

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 8 de 18

Page 9: Respuestas Guia 09 (Arrays y Structs)

EJERCICIO 9.7Una empresa distribuidora comercializa 25 artículos. Posee 4 sucursales ydesea analizar el desempeño de las mismas. Para ello se ingresan los datoscorrespondientes a las ventas efectuadas en cierto período:códigosucursal (1..4), código artículo (1..25), cantidad unidades vendidas.Determine e informe: a. Las cantidades de unidades vendidas por la empresa de cada artículo.b. El total de unidades vendidas por la sucursal 3, sumando todos los artículos.c. La cantidad vendida por la sucursal 1 del artículo 6.d. La sucursal que vendió más unidades del artículo 8.Emplee funciones para resolver cada caso.

#include<iostream.h>#include<iomanip.h>#include<stdlib.h>using namespace std;//En esta oportunidad desarrollamos las funciones antes del main()void item_a(long empre[][25]){ //Articulo primero, recorro la matriz por Articulo cout<<"\nTotal por Articulo 1 - 25.\n"; for (int art=0; art<25; art++)//son 25 articulos {int sum=0; for (int suc=0; suc<4; suc++)//cuatro sucursales sum += empre[suc][art]; cout<<"\n Articulo "<<art+1<<" = "<<sum; };};//--------------------------------------------void item_b(long empre [][25]) {int sum=0; for (int art=0; art<25; art++)//son 25 articulos sum += empre[3][art];//la suc 3 queda fija cout<<"\n Total de la Sucursal 3: "<<sum; };//--------------------------------------------void item_c(long empre[][25]){ cout<<"\n Total Sucursal 1, Articulo 6: "<<empre[3][6]; };//--------------------------------------------void item_d(long empre[][25]) {int may=0,SM=0; for (int suc=0; suc<4; suc++)//cuatro sucursales if (empre[suc][8]> may) {may= empre[suc][8]; SM=suc; }; cout<<"\n La Sucursal que mas vendio del articulo 8 es: "<<SM+1; };//--------------------------------------------int main(void){long empresa[4][25],art,suc; char cont; //Sucursal primero, recorro la matriz por sucursal para la carga de datos for (suc=0; suc<4; suc++)//cuatro sucursales

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 9 de 18

Page 10: Respuestas Guia 09 (Arrays y Structs)

for (art=0; art<25; art++)//25 articulos {empresa[suc][art]= rand()%10;//para hacer la carga de los 100 valores automatica //cout<<"\nSucursal "<<suc+1<<" Articulo "<<art+1<<" Cantidad: "; //cin>>empresa[suc][art];//para la carga manual }; //mostrar la Matriz for (suc=0; suc<4; suc++)//cuatro sucursales {for (art=0; art<25; art++)//25 articulos cout<<setw(3)<<empresa[suc][art]; cout<<"\n\n\n"; }; cout<<"\n\nPulse una tecla para continuar.";item_a (empresa);item_b(empresa);item_c(empresa);item_d(empresa); cout<<"\n\nPulse una tecla para continuar.";}//---------------------------------------------------------------------------//Fundamentos de Programacion - F.I.C.H. - U.N.L.//Profesor Gerardo Sas.//consultas a [email protected]

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 10 de 18

Page 11: Respuestas Guia 09 (Arrays y Structs)

EJERCICIO 9.8Considere el mismo enunciado del problema anterior. Incorpore -además- losdatos de los precios de los 25 artículos que comercializa la empresa.Determine e informe:a) La recaudación de cada sucursal.b) La recaudación de la empresa.c) La sucursal que obtuvo mayor recaudación. Utilice funciones.

#include<iostream.h>#include<iomanip.h>#include<stdlib.h>using namespace std;void item_ab(long empre[][25],long prec[]){ //Primero, recorro la matriz por sucursal sumando los artículos cout<<"\nTotal por Sucursal.\n"; int sum, sum2=0,suc,art; for (suc=0; suc<4; suc++)//cuatro sucursales {sum = 0; for (art=0; art<25; art++)//son 25 articulos sum += empre[suc][art]*prec[art]; sum2 +=sum; cout<<"\n Total Sucursal: "<<suc+1<<" = "<<sum; }; cout<<"\n\n Total recaudado por la Empresa: "<<sum2;};//--------------------------------------------------------------void item_c(long empre[][25],long prec[]){ int may=0,SM=0, sum, suc, art; for (suc=0; suc<4; suc++)//cuatro sucursales {sum = 0; for (art=0; art<25; art++)//son 25 articulos sum += empre[suc][art]*prec[art]; if (sum > may) {may= sum; SM=suc; }; }; cout<<"\n\n La Sucursal que mas vendio es: "<<SM+1;};//--------------------------------------------------------------

int main(void){long empresa[4][25],art,suc; long precios[25]; char continua; //Sucursal primero, recorro la matriz por sucursal for (suc=0; suc<4; suc++)//cuatro sucursales for (art=0; art<25; art++)//25 articulos {empresa[suc][art]= rand()%10;//para hacer la carga de los 100 valores automatica //cout<<"\nSucursal "<<suc+1<<" Articulo "<<art+1<<" Cantidad: "; //cin>>empresa[suc][art];//para la carga manual }; for (art=0; art<25; art++)//25 articulos

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 11 de 18

Page 12: Respuestas Guia 09 (Arrays y Structs)

precios[art]= rand()%10;//los genero al aleatoriamente

//mostrar la Matriz cout<<"\n\nArticulos: \n"; for (art=0; art<25; art++)//25 cout<<setw(3)<<art+1; cout<<endl<<endl; for (suc=0; suc<4; suc++)//cuatro sucursales {for (art=0; art<25; art++)//25 articulos cout<<setw(3)<<empresa[suc][art]; cout<<"\n"; };cout<<"\n\nPrecios: \n";for (art=0; art<25; art++)//25 articulos cout<<setw(3)<<precios[art];//muestra los precios

cout<<"\n\n\n\nPulse na tecla para continuar."; continua=cin.get();item_ab(empresa, precios);item_c(empresa, precios);cout<<"\n\n Pulse una tecla para continuar.";}//---------------------------------------------------------------------------///Fundamentos de Programacion - F.I.C.H. - U.N.L.//Profesor Gerardo Sas.//consultas a [email protected]

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 12 de 18

Page 13: Respuestas Guia 09 (Arrays y Structs)

Ejercicio 9.9Se leen los datos de una matriz o tabla de 5x12 que contiene los valores en mmde lluvias producidas en 5 departamentos de la provincia durante los 12 mesesde 2007. Se sabe que en algunos departamentos tienen datos faltantes por lo quese ha completado con -1 cada uno de esos casos.Escriba un programa C++ que a través de 2 funciones:a) complete los datos de lluvia faltantes con el promedio anual de precipitación en el departamento correspondiente. Cada promedio debe obtenerse con los datos reales existentes (no contar los -1).b) Amplíe la matriz agregando una nueva columna con los totales de mm caídos en todo el año en cada departamento.Informe: 1) la matriz original de datos, 2) la matriz modificada 3) los totales anuales de lluvia por departamento.

#include<iostream.h>#include<iomanip.h>using namespace std;//------------------------------------------------//muestra la matriz, el segundo parametro indica hasta que columna se desea mostrarvoid mostrar(int ll[][13],int largo){int d,m; for (d=0; d<5; d++)//cinco departamentos {for (m=0; m<largo; m++)//12 meses, la 13 es la suma del departamento cout<<setw(4)<<ll[d][m]; cout<<"\n"; };};//------------------------------------------------void completa(int ll[][13]){int d,m,s,c; float promedio; for (d=0; d<5; d++)//cinco departamentos {s=0;c=0; for (m=0; m<12; m++)//12 meses if (ll[d][m]!=(-1)) {s+= ll[d][m]; c++; };//del if //--Calcula el promedio del departamento promedio= s/c; for (m=0; m<12; m++)//12 meses if (ll[d][m]==(-1)) ll[d][m]=(int)promedio; //--Asigna la suma s a la columna 13 por departamento ll[d][12]= s; };//del for};//------------------------------------------------//------------------------------------------------

int main(void){int lluvia [5][13];//Matriz que almacena la totalidad de mm caidos en los 4 dptos. int dep, mes;//contadores

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 13 de 18

Page 14: Respuestas Guia 09 (Arrays y Structs)

//El enunciado dice que se leen los datos, //para agilizar yo los genero aleatoriamente for (dep=0; dep<5; dep++)//carga Automatica de la matriz for (mes=0; mes<12; mes++) {lluvia [dep][mes]= rand()%10;//Genera numeros aleatorios entre 0 y 10 if (lluvia [dep][mes]==1) lluvia [dep][mes]*= -1;//para que este presente el -1 };cout<<"Matriz de lluvias original\n";mostrar(lluvia,12);//llama a la funcion que muestra la matrizcompleta(lluvia);//llama a la funcion que reemplaza los -1 y calcula la sumacout<<"\nMatriz sin los -1\n";mostrar(lluvia,12);//llama a la funcion que muestra la matrizcout<<"\nMatriz Ampliada con los totales por Departamento\n";mostrar(lluvia,13);//Muestra Matriz Ampliada con los totales por Departamentocout<<"\n\n Pulse una tecla para continuar.";}//---------------------------------------------------------------------------//Fundamentos de Programacion - F.I.C.H. - U.N.L.//Profesor Gerardo Sas.//consultas a [email protected]

Ejercicio 9.10Declare un tipo struct con el nombre ficha_alumno indicando al menos 10 campos de tipo simple o string correspondientes a los datos de un alumno de la UNL. Luego declare 3 variables de ese tipo. Nota: para declarar un string llamado apellido debe escribir

char apellido[12];

struct ficha_alumno {char apellido[12];char nombres[12];char Calle[12];int Numero[12];char Departamento[12];char Provincia[12];char Pais[12];char telefono[18];char email[50];longint dni;int edad;int cant_materias;

};…main(){…ficha_alumno A, B, C;…

Ejercicio 9.11a) Considere el struct ficha_alumno del ejercicio anterior. Agregue al tipo ficha_alumno un campo llamado materias el cual debe almacenar las calificaciones (de 1 a 10) de las asignaturas aprobadas por cada alumno en su carrera. Considere que la carrera consta de 32 materias. b) Indique la sintaxis para asignar las calificaciones 8, 7 y 10 a las materias 6, 11 y 12 respectivamente a los miembros correspondientes de una variable de tipo ficha_alumno.

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 14 de 18

Page 15: Respuestas Guia 09 (Arrays y Structs)

struct ficha_alumno {char apellido[12];char nombres[12];char Calle[12];int Numero[12];char Departamento[12];char Provincia[12];char Pais[12];char telefono[18];char email[50];longint dni;int edad;int cant_materias;float materias[32];

};…main(){…ficha_alumno A;A.materias[6]= 8;A.materias[11]= 7;A.materias[12]= 10;…

Ejercicio 9.12Declare una variable x con la cual Ud. pueda representar en un programa C++ a una lista de hasta 200 alumnos, cuyos datos se organizan en la estructura tipo ficha_alumno que creó antes.

ficha_alumno A[200];

Ejercicio 9.13Un número complejo tiene la forma a+bi donde a y b son números reales. Las operaciones básicas con complejos son: Suma, Resta, Producto y Cociente:Escriba un programa C++ que permita ingresar las componentes de 2 números complejos y a través de un menú el usuario seleccione la operación a realizar. Proponga una struct de 2 miembros llamados parte_real y parte_imag para representar y operar los números complejos.

#include<iostream.h>#include<iomanip.h>#include<stdlib.h>#include<math.h>#include <ctype.h>using namespace std;//------------------------------------------------typedef struct { float r,i;} complejo;//------------------------------------------------void suma(complejo c1, complejo c2, complejo &r1);void resta(complejo c1, complejo c2, complejo &r1);void producto(complejo c1, complejo c2, complejo &r1);void division(complejo c1, complejo c2, complejo &r1);//------------------------------------------------int main(void){complejo c1,c2,r1;c1.r=0,c2.r=0,r1.r=0;c1.i=0,c2.i=0,r1.i=0;

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 15 de 18

Page 16: Respuestas Guia 09 (Arrays y Structs)

bool bandera=false;char op=' ';while (op!='F'){ cout<<endl<<" C1: "<<c1.r<<" + "<<c1.i<<" i / C2: "<<c2.r<<" + "<<c2.i<<" i"<<endl<<endl<<endl; cout<<" CALCULOS"<<endl; cout<<" A- Ingresar nuevo par de Numeros Complejos."<<endl; cout<<" B- Suma. "<<endl; cout<<" C- Resta"<<endl; cout<<" D- Producto."<<endl; cout<<" E- Division"<<endl; cout<<" F- Salir"<<endl; cout<<"Elija una Opción (A..F): "; do{ do{ cin>>op; op= toupper(op); if (op=='A') bandera=true; } while ((op<'A')||(op>'F'));//valida opciones de A - F. } while ((op!='A')&&(op!='F')&&(!bandera));//mientras los 2 sean verdad switch (op){ case 'A':{ cout<<"C1- Ingresar parte Real: "; cin>>c1.r; cout<<"C1- Ingresar parte imaginaria: "; cin>>c1.i; cout<<"C2- Ingresar parte Real: "; cin>>c2.r; cout<<"C2- Ingresar parte imaginaria: "; cin>>c2.i; break;}; case 'B':{//Calcula la Suma de los Complejos suma(c1,c2,r1); cout<<"B - La Suma es: "<<r1.r<<" + "<<r1.i<<" i"; break;}; case 'C':{//Calcula la Resta de los Complejos resta(c1,c2,r1); cout<<"C - La Resta es: "<<r1.r<<" + "<<r1.i<<" i"; break;}; case 'D':{//Calcula el Producto de los complejos producto(c1,c2,r1); cout<<"D - El Producto es: "<<r1.r<<" + "<<r1.i<<" i"; break;}; case 'E':{//Calcula la Division de los complejos division(c1,c2,r1); cout<<"E - La Division es: "<<r1.r<<" + "<<r1.i<<" i "; break;}; case 'F':{ cout<<"Gracias por utilizar nuestro programa\n\n"; break;}; };//fin del switch.

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 16 de 18

Page 17: Respuestas Guia 09 (Arrays y Structs)

cout<<"\n\n\n\n\n\nPulse una tecla para continuar";};//del while op}//del main

void suma(complejo c1, complejo c2, complejo &r1){ r1.r= c1.r + c2.r; r1.i= c1.i + c2.i;}void resta(complejo c1, complejo c2, complejo &r1){r1.r= c1.r - c2.r; r1.i= c1.i - c2.i;}void producto(complejo c1, complejo c2, complejo &r1){r1.r= c1.r*c2.r - c1.i+c2.i; r1.i= c2.r*c1.i + c1.r*c2.i;}void division(complejo c1, complejo c2, complejo &r1){complejo conjugado,aux; conjugado=c2; conjugado.i= -conjugado.i; producto(c1,conjugado,aux); r1.r= aux.r/pow(c2.r,2); r1.i= aux.i/pow(c2.i,2);}

Ejercicio 9.14Considere el struct complejo del ejercicio anterior. Escriba una función C++ llamada opera_complex( ) cuyo prototipo se indica abajo:

complejo opera_complex(complejo c1, compljo c2, char op)

Su objetivo es recibir 2 complejos como parámetros y un carácter que indique la operación: ‘+’,’-‘,’*’ . Debe devolver el resultado de la operación.

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

#include<iostream.h>#include<iomanip.h>#include<stdlib.h>#include<math.h>#include <ctype.h>using namespace std;//------------------------------------------------typedef struct { float r,i;} complejo;//------------------------------------------------void suma(complejo c1, complejo c2, complejo &r1);void resta(complejo c1, complejo c2, complejo &r1);void producto(complejo c1, complejo c2, complejo &r1);void division(complejo c1, complejo c2, complejo &r1);complejo opera_complex(complejo c1, complejo c2, char op);

int main(void){char op=' ';complejo c1,c2,result;c1.r=0,c2.r=0,result.r=0;

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 17 de 18

Page 18: Respuestas Guia 09 (Arrays y Structs)

c1.i=0,c2.i=0,result.i=0;cout<<"\nC1- Ingresar parte Real: ";cin>>c1.r;cout<<"\nC1- Ingresar parte imaginaria: ";cin>>c1.i;cout<<"\nC2- Ingresar parte Real: ";cin>>c2.r;cout<<"\nC2- Ingresar parte imaginaria: ";cin>>c2.i;cout<<"\n--- Ingresar la operacion (+, -, *, /): ";cin>>op;cout<<endl<<" ("<<c1.r<<" + "<<c1.i<<" i) "<<op<<" ("<<c2.r<<" + "<<c2.i<<" i)"<<endl;//llamada a funcionresult= opera_complex(c1, c2, op);cout<<"\nEl resultado de la operacion "<<op<<" es: "<<endl<<endl<<endl;cout<<" ("<<result.r<<' '<<op<<' '<<result.i<<" i)"<<endl;}//del main

void suma(complejo c1, complejo c2, complejo &r1){ r1.r= c1.r + c2.r; r1.i= c1.i + c2.i;}void resta(complejo c1, complejo c2, complejo &r1){r1.r= c1.r - c2.r; r1.i= c1.i - c2.i;}void producto(complejo c1, complejo c2, complejo &r1){r1.r= c1.r*c2.r - c1.i+c2.i; r1.i= c2.r*c1.i + c1.r*c2.i;}void division(complejo c1, complejo c2, complejo &r1){complejo conjugado,aux; conjugado=c2; conjugado.i= -conjugado.i; producto(c1,conjugado,aux); r1.r= aux.r/pow(c2.r,2); r1.i= aux.i/pow(c2.i,2);}complejo opera_complex(complejo c1, complejo c2, char op){complejo rr1;switch (op){ case '+':{//Calcula la Suma de los Complejos suma(c1,c2,rr1); break;}; case '-':{//Calcula la Resta de los Complejos resta(c1,c2,rr1); break;}; case '*':{//Calcula el Producto de los complejos producto(c1,c2,rr1); break;}; case '/':{//Calcula la Division de los complejos division(c1,c2,rr1); break;}; };//fin del switch.return rr1;//retorno el complejo resultado}

Profesor Gerardo Sas - Fundamentos de Programacion - FICH – UNL Página N° 18 de 18