Sunteți pe pagina 1din 15

PROGRAMACIN DIGITAL FIEE-UNI PARTE III

1)Escribir las ecuaciones de mallas del circuito elctrico 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(): nmero de ecuaciones y nmero 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
.impresin(): imprime la matriz resistencias, el vector tensin, el vector solucin.

Observacin: La matriz del sistema de ecuaciones quedar as:

)( ) (

R 1+ R5+ R 6
R 6
R 5
I1
E1
R 6
R 2+ R 4 + R 6
R 4
I 2 = E 2E 4
R 5
R 4
R 3+ R 4+ R 5 I 3
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);
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);
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){
general sino particular

//ojo para nuestro caso m=n=3, no es un mtodo

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){


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++){

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";
}}

2) Encontrndose 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 funcin cargue el nombre de cada soldado. En
una segunda funcin 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
posicin, 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){
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);

3) Encontrndose 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 funcin cargue el nombre de cada soldado. En
una segunda funcin construya el procedimiento para poder determinar que
soldado pedir ayuda. El procedimiento consiste en sentar a los soldados
formando un crculo, tirar el dado SOLO UNA VEZ y con dicho nmero ir retirando
del crculo al soldado que ocupa dicha posicin 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){
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;

}
}
tiro++;
}while(n>1);
}

3) Se tiene la siguiente cadena de caracteres (prrafo):


"Un mensaje de programacin es un lenguaje formal. Esta diseado 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 precisin, o como modo de comunicacin humana.
Est formado por un conjunto de smbolos 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 lnea cuando encuentra un
punto.

.buscaPalabraCadena: busca cuantas veces se repite una palabra en la cadena. El


programa debe solicitar el ingreso de la palabra.
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
diseado 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";
}

4) Hacer un programa que compruebe si una matriz de datos enteros es mgica 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";
}

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();
}

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 clculos y para la impresin 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++){
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){

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

S-ar putea să vă placă și