programación digital fiee-uni parte 3

16
PROGRAMACIÓN DIGITAL FIEE-UNI PARTE III 1)Escribir las ecuaciones de mallas del circuito eléctrico mostrado, donde R1,R2,R3,R4,R5 Y R6 son resistencias en ohmios y E1,E2,E3,E4 son las tensiones continuas en voltios, ambos conjuntos de valores de tipo real y las corrientes I1,I2,I3 son las incognitas del sistema de ecuaciones.Utilizar los siguientes metodos: .leer(): número de ecuaciones y número de variables. .cargaResistencia(): carga los valores de la resistencia. .cargaTension(): carga los valores de las tensiones .triangularSuperior(): convierte la matriz a triangular superior .sustitucion(): halla los valores de las corrientes .impresión(): imprime la matriz resistencias, el vector tensión, el vector solución. Observación: La matriz del sistema de ecuaciones quedará así: ( R 1+R 5+R 6 R 6 R 5 R 6 R 2+ R 4 +R 6 R 4 R 5 R 4 R 3+ R 4+R 5 )( I 1 I 2 I 3 ) = ( E 1 E 2E 4 E 4E 3 ) Sol: #include<fstream.h> #include <conio.h> void leer(int &n, int &m); void cargaResistencia(float r[80],float a[80][80], int n, int m); void trianguliza(float a[80][80], int n, int m); bool sustitucionInversa(float a[80][80], float x[80], int n, int m); void cargaTension(float t[80],float a[80][80], int n, int m);

Upload: davidgarcia

Post on 30-Jan-2016

27 views

Category:

Documents


1 download

DESCRIPTION

Programación Digital FIEE-UNI Parte 3problemas resueltos C++

TRANSCRIPT

Page 1: Programación Digital FIEE-UNI Parte 3

PROGRAMACIÓN DIGITAL FIEE-UNI PARTE III

1)Escribir las ecuaciones de mallas del circuito eléctrico mostrado, donde R1,R2,R3,R4,R5 Y R6 son resistencias en ohmios y E1,E2,E3,E4 son las tensiones continuas en voltios, ambos conjuntos de valores de tipo real y las corrientes I1,I2,I3 son las incognitas del sistema de ecuaciones.Utilizar los siguientes metodos:

.leer(): número de ecuaciones y número de variables.

.cargaResistencia(): carga los valores de la resistencia.

.cargaTension(): carga los valores de las tensiones

.triangularSuperior(): convierte la matriz a triangular superior

.sustitucion(): halla los valores de las corrientes

.impresión(): imprime la matriz resistencias, el vector tensión, el vector solución.

Observación: La matriz del sistema de ecuaciones quedará así:

(R1+R5+R6 −R6 −R5−R6 R2+R 4+R6 −R4−R5 −R4 R3+R4+R5)(

I 1I 2I 3)=( E1

E2−E 4E4−E3)

Sol:

#include<fstream.h>

#include <conio.h>

void leer(int &n, int &m);

void cargaResistencia(float r[80],float a[80][80], int n, int m);

void trianguliza(float a[80][80], int n, int m);

bool sustitucionInversa(float a[80][80], float x[80], int n, int m);

void cargaTension(float t[80],float a[80][80], int n, int m);

void impresion(float a[80][80], float x[80], int n, int m);

void muestraMatriz(float a[80][80], int n, int m);

void main(){

float a[80][80], x[80],t[80],r[80]; int n, m,k,q;

leer(n, m);

Page 2: Programación Digital FIEE-UNI Parte 3

cargaResistencia(r,a,n,m);

cargaTension(t,a,n,m);

muestraMatriz(a, n, m);

trianguliza(a, n, m);

if (!sustitucionInversa(a, x, n, m)){

cout << "El sistema de ecuaciones es inconsistente";

}

else{

impresion(a, x, n, m);

}

getch();

}

void leer(int &n, int &m){ //ojo para nuestro caso m=n=3, no es un método general sino particular

cout << "ingrese numero de ecuaciones y de variables del sistema:\n"; cin >> n >> m;

while (n<2 || m<2 || m != n){

cout << "la matriz debe ser cuadrada, reingrese:\n"; cin >> n >> m;

}

cout << "\n";

}

void cargaResistencia(float r[80],float a[80][80], int n, int m){

for (int j = 0; j<6 ; j++){

cout << "Ingrese resistencia [" << j+1 << "]: "; cin >>r[j];

}

a[0][0]=r[0]+r[4]+r[5];a[1][1]=r[1]+r[3]+r[5];a[2][2]=r[2]+r[3]+r[4];

a[1][0]=a[0][1]=-r[5];a[2][0]=a[0][2]=-r[4];a[2][1]=a[1][2]=-r[3];

cout << "\n";

}

void cargaTension(float t[80],float a[80][80], int n, int m){

for (int i = 0; i<4; i++){

cout << "Ingrese la tension [" << i+1 << "] : "; cin >> t[i];

}

a[0][m]=t[0];a[1][m]=t[1]-t[3];a[2][m]=t[3]-t[2];

cout << "\n";

}

void trianguliza(float a[80][80], int n, int m){

Page 3: Programación Digital FIEE-UNI Parte 3

int t, r; float aux, cs;

for (int i = 0; i<n - 1; i++){

t = 1;

if (a[i][i] == 0){

do{

if (a[i + t][i] != 0){

for (int j = 0; j<m + 1; j++){

aux = a[i][j]; a[i][j] = a[i + t][j]; a[i + t][j] = aux;

}

}

t++;

} while (a[i][i] == 0 && t != n - i);

}

r = i - 1;

do{

r++;

} while (a[i][r] == 0 && r != m - 1);

if (a[i][r] != 0){

for (int k = i + 1; k<n; k++){

if (a[k][r] != 0){

cs = a[k][r];

for (int j = r; j<m + 1; j++){

a[k][j] = a[k][j] - a[i][j] * (1.0*cs / a[i][r]);

}}}}}}

void impresion(float a[80][80], float x[80], int n, int m){

cout << "El sistema de ecuaciones de resistencia y tension triangulizada queda asi:\n";

for (int i = 0; i<n; i++){

for (int j = 0; j<m + 1; j++){

cout << a[i][j] << "\t";

if (j == m - 1)cout << "| ";

}

cout << "\n\n";

}

cout << "La solucion de las corrientes queda asi:\n";

for (int i = 0; i<m; i++){

Page 4: Programación Digital FIEE-UNI Parte 3

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

}

}

bool sustitucionInversa(float a[80][80], float x[80], int n, int m){

int sw = 0;

for (int i = n - 1; i >= 0; i--){

if (a[i][i] == 0){

sw = 1; i = -1;

}

else{

float suma = 0;

for (int j = i + 1; j<n; j++){

suma = suma + x[j] * a[i][j];

}

x[i] = 1.0*(a[i][m] - suma) / a[i][i];

}}

if (sw == 0){

return true;

}

else{

return false;

}}

void muestraMatriz(float a[80][80], int n, int m){

cout << "El sistema de ecuaciones de resistencia y tensiones es:\n";

for (int i = 0; i<n; i++){

for (int j = 0; j<m + 1; j++){

cout << a[i][j] << "\t";

if (j == m - 1)cout << "| ";

}

cout << "\n\n";

}}

Page 5: Programación Digital FIEE-UNI Parte 3

2) Encontrándose en combate, un grupo de soldados se encuentran rodeados por el enemigo, contando solo con un caballo y un dado para poder pedir ayuda. Construya un programa que en una función cargue el nombre de cada soldado. En una segunda función construya el procedimiento para poder determinar que soldado pedirá ayuda. El procedimiento consiste en sentar a los soldados formando un circulo, cada soldado lanzara un dado y si este coincide con su posición, este será retirado. Se debe continuar el proceso hasta que solo quede uno el cual será el que pedirá ayuda.

Sol:

#include<fstream.h>

#include <stdlib.h>

#include<conio.h>

void ingresa(char nom[80][80],int num[80],int &n);

void determinaAyuda(char nom[80][80],int num[80],int n);

void main(){

int num[80],n;char nom[80][80];

ingresa(nom,num,n);

determinaAyuda(nom,num,n);

cout<<"\n\nEl soldado que pedira ayuda es: "<<nom[0]<<"\n";

getch();

}

void ingresa(char nom[80][80],int num[80],int &n){

cout<<"Ingresa cantidad soldados:\n";cin>>n;

while(n<2 || n>80){

Page 6: Programación Digital FIEE-UNI Parte 3

cout<<"cantidad no valida, reingrese:\n";cin>>n;

}

for(int i=0;i<n;i++){

cout<<"Ingrese nombre y apellido del soldado "<<i+1<<": ";cin>>nom[i];

num[i]=i+1;

cout<<"\n";

}

}

void determinaAyuda(char nom[80][80],int num[80],int n){

int dado,saca=0,me,tiro,k;

me=n;k=0;tiro=1;

do{

dado=1+rand()%(6);

cout<<"lanzamiento "<<tiro<<" : "<<nom[k]<<" de posicion :"<<num[k]<<" obtuvo: "<<dado<<"\n";

if(dado==num[k]){

cout<<nom[k]<<" es retirado\n";

saca++;

for(int i=k;i<n-1;i++){

for(int t=0;t<80;t++){ //tenemos que trasladar letra por letra.

nom[i][t]=nom[i+1][t];

}

}

for(int i=k;i<n-1;i++){

num[i]=num[i+1]-1;

}

n--;k--;

}

tiro++;k++;

if(tiro-1==me){

me=me-saca;k=0;tiro=1;saca=0;

if(me>1){

cout<<"\n\nLanzamos otra ronda:\n\n";

}

}

}while(n>1);

Page 7: Programación Digital FIEE-UNI Parte 3

}

3) Encontrándose en combate, un grupo de soldados se encuentran rodeados por el enemigo, contando solo con un caballo y un dado para poder pedir ayuda. Construya un programa que en una función cargue el nombre de cada soldado. En una segunda función construya el procedimiento para poder determinar que soldado pedirá ayuda. El procedimiento consiste en sentar a los soldados formando un círculo, tirar el dado SOLO UNA VEZ y con dicho número ir retirando del círculo al soldado que ocupa dicha posición hasta que solo quede uno el cual será el que pedirá ayuda.

Sol:

#include<fstream.h>

#include <stdlib.h>

#include<conio.h>

void ingresa(char nom[80][80],int num[80],int &n);

void determinaAyuda(char nom[80][80],int num[80],int n);

void main(){

Page 8: Programación Digital FIEE-UNI Parte 3

int num[80],n;char nom[80][80];

ingresa(nom,num,n);

determinaAyuda(nom,num,n);

cout<<"\n\nEl soldado que pedira ayuda es: "<<nom[0]<<"\n";

getch();

}

void ingresa(char nom[80][80],int num[80],int &n){

cout<<"Ingresa cantidad soldados:\n";cin>>n;

while(n<2 || n>80){

cout<<"cantidad no valida, reingrese:\n";cin>>n;

}

for(int i=0;i<n;i++){

cout<<"Ingrese nombre y apellido del soldado de posicion "<<i+1<<": ";cin>>nom[i];

num[i]=i+1;

cout<<"\n";

}

}

void determinaAyuda(char nom[80][80],int num[80],int n){

int dado,tiro;

tiro=1;

do{

dado=1+rand()%(6);

cout<<"lanzamiento "<<tiro<<" : "<<" obtuvo: "<<dado<<"\n";

for(int i=0;i<n;i++){

if(num[i]==dado){

cout<<nom[i]<<" y su posicion "<<num[i]<<" es retirado\n";

for(int j=i;j<n-1;j++){

for(int t=0;t<80;t++){

nom[j][t]=nom[j+1][t];

}

}

for(int j=i;j<n-1;j++){

num[j]=num[j+1]-1;

}

n--;i=n;

Page 9: Programación Digital FIEE-UNI Parte 3

}

}

tiro++;

}while(n>1);

}

3) Se tiene la siguiente cadena de caracteres (párrafo):

"Un mensaje de programación es un lenguaje formal. Esta diseñado para expresar procesos que pueden ser llevados a cabo por computadoras. Pueden usarse para crear programas que controlen el comportamiento fisico y logico de una maquina, para expresar algoritmos con precisión, o como modo de comunicación humana. Está formado por un conjunto de símbolos y reglas sintacticas y semanticas que definen su estructura y el significado de sus elemntos y expreciones."Se debe elaborar un programa que tenga las siguientes funciones:.cuentaPalabrasCadena : cuenta la cantidad de palabras..imprimeCadenaCambioLinea: cambia a la siguiente línea cuando encuentra un punto..buscaPalabraCadena: busca cuantas veces se repite una palabra en la cadena. El programa debe solicitar el ingreso de la palabra.

Page 10: Programación Digital FIEE-UNI Parte 3

Sol:#include <iostream.h>#include <stdlib.h>#include <string.h>void cuentaPalabrasCadena(char cad1[500]);void imprimeCadenaCambioLinea(char cad1[500]);void buscaPalabraCadena(char cad1[500], char cad2[80]);void main(){ char cad1[500] = "Un mensaje de programacion es un lenguaje formal. Esta diseñado para expresar procesos que pueden ser llevados a cabo por computadoras. Pueden usarse para crear programas que controlen el comportamiento fisico y logico de una maquina, para expresar algoritmos con precision, o como modo de comunicacion humana. Esta formado por un conjunto de simbolos y reglas sintacticas y semanticas que definen su estructura y el significado de sus elemntos y expreciones.";

char cad2[80], cop[80];cout << "Ingrese palabra a buscar:\n";cin.getline(cad2, 80);cuentaPalabrasCadena(cad1);imprimeCadenaCambioLinea(cad1);buscaPalabraCadena(cad1,cad2);

system("PAUSE");}void cuentaPalabrasCadena(char cad1[500]){

int num_p = 0;for (int u = 0; u<strlen(cad1); u++){

if (cad1[u] == ' ')num_p++;

}cout << "\nEl numero de palabras del texto es: " << num_p + 1 << "\n\n";

}void imprimeCadenaCambioLinea(char cad1[500]){

cout << "La cadena es:\n\n";for (int u = 0; u<strlen(cad1); u++){

cout << cad1[u];if (cad1[u] == '.'){

cout << "\n";}

}cad1[strlen(cad1)] = '\0';cout << "\n";

}void buscaPalabraCadena(char cad1[500], char cad2[80]){

char copia[80][80]; int u = 0,con=0,c=0;for (int i = 0; i<strlen(cad1); i++){

if (cad1[i] != ' '){copia[con][u] = cad1[i]; u++;

}else{

copia[con][u] = '\0'; con++; u = 0;}

}copia[con][u] = '\0';for (int i = 0; i <= con; i++){

if (strcmp(copia[i], cad2) == 0){c++;

}}cout << "La palabra se repite "<<c<<" veces\n\n";

}

Page 11: Programación Digital FIEE-UNI Parte 3

4) Hacer un programa que compruebe si una matriz de datos enteros es mágica o no, y en caso de serlo, imprimir la suma.

#include<fstream.h>

#include <conio.h>

void main(){

int a[10][10],suma[22],fila,columna,n,k=0,con;

do{

cout<<"ingrese dimension de la matriz:\n";

cin>>n;

}while(n<3||n>10);

fila=columna=n;

for (int i=0;i<fila;i++){

for (int j=0;j<columna;j++){

cout << "Ingrese la posicion ["<<i+1<<"] ["<<j+1<<"]: ";

cin >> a[i][j];

}

}

cout<<"\n";

cout<<"la matriz orignal es: \n\n";

for (int i=0;i<fila;i++){

for (int j=0;j<columna;j++){

cout <<a[i][j]<<"\t";

}

cout << "\n";

Page 12: Programación Digital FIEE-UNI Parte 3

}

for (int j=0;j<2*n+2;j++){

suma[j]=0;

}

for (int i=0;i<fila;i++){

for (int j=0;j<columna;j++){

suma[i]=suma[i]+a[i][j];

}

}

for (int j=0;j<columna;j++){

for (int i=0;i<fila;i++){

suma[j+n]=suma[j+n]+a[i][j];

}

}

for (int i=0;i<fila;i++){

suma[2*n]=suma[2*n]+a[i][i];

}

for (int i=0;i<fila;i++){

suma[2*n+1]=suma[2*n+1]+a[i][fila -1-i];

}

con=suma[0];

for (int i=1;i<=2*n+1;i++){

if(con==suma[i]){

k++;

}

}

if(k==2*n+1)

cout<<"la matriz es magica y la suma es "<<con<<"\n";

else

cout<<"la matriz no es magica \n";

getch();

}

Page 13: Programación Digital FIEE-UNI Parte 3

5) Una empresa ha convocado a un concurso para cubrir un puesto de trabajo. A dicho concurso se presentan N postulantes. Para determinar al ganador del concurso, se realizan 4 pruebas cuyos puntajes son guardados en una matriz. Calcular el puntaje de cada postulante y finalmente mostrar el nombre del candidato ganador, y en caso existiera empate, mostrar los nombres de los candidatos que empataron. Deberá utilizar funciones para cargar los datos, realizar los cálculos y para la impresión de lo pedido.

Sol:

#include<fstream.h>

#include<conio.h>

#include<stdlib.h>

void ingresa(char nom[80][80],float a[80][80],int &n);

void imprime(char nom[80][80],float a[80][80],int n);

void ganador(char nom[80][80],float a[80][80],int n);

void main(){

int n;float a[80][80];char nom[80][80];

ingresa(nom,a,n);

cout<<"Las calificaciones de los alumnos son:\n";

imprime(nom,a,n);

ganador(nom,a,n);

getch();

}

void ingresa(char nom[80][80],float a[80][80],int &n){

cout<<"Ingresa cantidad de alumnos:\n\n";cin>>n;

while(n<2 || n>80){

cout<<"cantidad no valida, reingrese:\n";cin>>n;

}

for(int i=0;i<n;i++){

Page 14: Programación Digital FIEE-UNI Parte 3

cout<<"Ingrese nombre del alumno "<<i+1<<": ";cin>>nom[i];

for (int j=0;j<4;j++){

a[i][j]=rand()%(21);

}

}

cout<<"\n";

}

void imprime(char nom[80][80],float a[80][80],int n){

for(int i=0;i<n;i++){

cout<<nom[i]<<"\t\t";

for(int j=0;j<4;j++){

cout <<a[i][j]<<"\t";

}

cout << "\n";

}

}

void ganador(char nom[80][80],float a[80][80],int n){

float p[80],suma,may;

for (int i=0;i<n;i++){

suma=0;

for (int j=0;j<4;j++){

suma=suma+a[i][j];

}

p[i]=suma/n;

}

may=p[0];

for(int i=0;i<n;i++){

if(p[i]>may){

p[i]=may;

}

}

cout<<"El mayor promedio es: "<<may<<"\n";

cout<<"Aquellos que obtuvieron el mayor promedio son:\n";

for(int i=0;i<n;i++){

if(p[i]==may){

Page 15: Programación Digital FIEE-UNI Parte 3

cout<<nom[i]<<"\n";

}

}

}