Vous êtes sur la page 1sur 31

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

Facultad de ingeniera de sistema e informtica Escuela acadmica profesional de ingeniera de sistemas

Asignatura:
Estructura de Datos

Tema:
Resolucin Prctica N 01

Docente:

Luzmila Pr Concepcin

Ciclo:
2011-II

Alumna:
Tania Y. Lpez Ramos 10200113

Grupo:
3

1) Calcular el nmero mximo de tres nmeros ingresados:

PRE: a, b, c / {a, b, c} POS: Max (num1, num2, num3) = m Diagrama Nassi-Schneiderman : Imprimir Ingrese tres numeros Leer a, b, c

V V
m=a

ab ac F
m=c

F V bc
m=b

F
m=c

Imprimir El mayor es, m Pseudocdigo:


ACCION max_tres_num ( ) ENTERO a, b, c, m ESCRIBIR Ingrese 3 nmeros: LEER (a) LEER (b) LEER (c) SI (a b) SI (a c) ma SINO mc FIN_SI SINO SI (b c) mb SINO mc FIN_SI FIN_SI ESCRIBIR (El mayor es:,m) FIN_ACCION

Codificacin en C++ :
#include <iostream> #include <conio.h> using namespace std; int main() { int a,b,c,m; cout<<"Ingrese 3 numeros"<<endl; cin>>a; cin>>b; cin>>c; if(a>=b){ if(a>=c) m=a; else m=c; } else{ if(b>=c) m=b; else m=c; } cout<<"El mayor de los tres numeros es:"<<m<<endl; getche(); }

2) Convierta Temperaturas de Grados Celsius a Grados Fahrenheit o viceversa.

PRE: G (Tipo de Dato REAL) POS: res= {en F, si G esta en C o viceversa} (Tipo de Dato REAL) Diagrama Nassi-Schneiderman Leer G Leer (opc)

opc
A res= G*1.8 +32 Imprimir res Seudocdigo
ACCION Temperatura ( ) CARACTER opc REAL G, res LEER (G) ESCRIBIR (A. De C a F.) ESCRIBIR (B. De F a C.) LEER (opc) SIM (opc) CASO A: resG*1.8 + 32 CASO B: res(G-32)*5/9 DEFAULT: ESCRIBIR(Opcin Incorrecta) FIN SI ESCRIBIR (res) FIN ACCION

B res= (G32)*5/9 Imprimir res

Otro Caso Imprimir Opcin Incorrecta

Codificacin en C++
#include<iostream> #include<conio.h> using namespace std; int main() { char opc; float G,res; cout<<"Ingresar valor de la temperatura: "; cin>>G; cout<<endl; cout<<"A. De C a F."<<endl; cout<<"B. De F a C."<<endl; cout<<"Ingresar Opcion: "; cin>>opc; switch(opc){ case 'A': res=(G*1.8)+32; cout<<endl; cout<<"la T. en F es: "<<res; break; case 'B': res=(G-32)*5/9; cout<<endl; cout<<"la T. en c es: "<<res; break; default: cout<<"OPCION INCORRECTA"; } getch(); }

3) Realizar un algoritmo que permita imprimir los nmeros divisores de un nmero N

positivo que este en el rango de 10 a 100. PRE: N / 10 N 100 POS: a, b, c, d,., n ( divisores de N) / N a = 0 Diagrama Nassi-Schneiderman Imprimir Ingrese un numero de 10 a 100 Leer N

N 10 AND N 100

Imprimir Estos son los divisores i = 1; i < N+1; i = i+1

N MOD i = 0

Imprimir El numero debe estar en el rango de 10 a 100

Imprimir i S e ACCION divisores ( ) u d ENTERO N, i; ESCRIBIR (Ingrese un numero del 10 a 100) o LEER (N) c SI (N 10 y N 100) ESCRIBIR (Estos son los divisores) d PARA i DESDE 1 HASTA N+1 i SI(N MOD i = 0) g ESCRIBIR (i) FIN_SI o

ii+1 FIN_PARA SINO ESCRIBIR El numero debe estar en el rango de 10 a 100 FIN_SI

FIN_ACCION

Codificacin en C++:
#include <iostream> #include <conio.h> using namespace std; int main() { int N,i; cout<<"Ingrese un numero del 10 al 100: "; cin>>N; if(N>=10 && N<=100){ cout<<"Estos son los divisores"<<endl; for(i=1;i<N+1;){ if(N%i==0){ cout<<i<<endl; } i=i+1; } } else{ cout<<"El numero debe estar en el rango de 10 a 100"; } getche(); }

4) Realizar un programa que pregunte al usuario si desea ingresar datos (SI/NO) de

ser la respuesta SI debe pedir los siguientes datos cdigo, nombre, horas trabajadas, pago por horas trabajadas y descuento. Luego deber calcular el sueldo neto a paga e imprimir. Despus, se deber preguntar si desea hacer otro ingreso de datos (SI/NO). De ser la respuesta NO, terminara el algoritmo. PRE: opc (Tipo de Dato CARCTER) {s/n} POS: si opc = s => sueldo (Tipo de dato REAL); si opc s => terminar algoritmo. Diagrama Nassi-Schneiderman Escribir (Desea ingresar datos(s/n)?) Leer (opc) Mientras (opc=s o opc=S) Leer (cod) Leer (nom) Leer (horTrab) Leer (pagxHora) Leer (desc) sueldo = horTrab*pagxHora desc Imprimir sueldo

Escribir (Desea ingresar datos (s/n)?) Leer (opc)

Seudocdigo

ACCION Sueldo ( ) CARACTER opc, nom[30] ENTERO cod, horTrab REAL pagxHora, desc, sueldo ESCRIBIR (Desea ingresar datos (s/n)?) LEER (opc) MIENTRAS (opc=s o opc =S) LEER (cod) LEER (nomb) LEER (horTrab) LEER (pagxHora) LEER (desc) sueldo = horTrab*pagxHora desc ESCRIBIR (sueldo) ESCRIBIR (Desea ingresar datos (s/n)?) LEER (opc) FIN MIENTRAS FIN ACCION

Codificacin en C++
#include<iostream> #include<conio.h> using namespace std; int main() { char opc, nom[30]; int cod, horTrab; float pagxHora, desc, sueldo; cout<<"Desea ingresar datos (s/n)?: "; cin>>opc; while(opc=='s' || opc=='S'){ system("cls"); cout<<endl<<"Codigo: "; cin>>cod; cout<<"Nombre: "; fflush(stdin); gets(nom); cout<<"Horas Trabajadas: "; cin>>horTrab; cout<<"Pago x Hora: "; cin>>pagxHora; cout<<"Descuento: "; cin>>desc; sueldo=(horTrab*pagxHora)-desc; cout<<endl<<"Sueldo: "<<sueldo; cout<<endl<<endl<<"Desea ingresar datos (s/n)?: "; cin>>opc; } getch(); }

5)

Una compaa renta autos de tres clases: chicos, medianos y grandes. El alquiler por da de autos es el siguiente: A = auto chico 15$ por da. B = auto mediano 20$ por da. C = auto grande 30$ por da. Adems la compaa cobra 20 centavos de $ por Km de recorrido en el auto chico, 30 centavos de $ por Km de recorrido por el auto mediano y 40 centavos de $ por Km recorrido en el auto grande. Realizar el algoritmo que pida el tipo de auto alquilado y valide para que si no se ingresa cualquiera de los tres tipos de autos (Chico, Mediano o Grande), el algoritmo debe permitir un mensaje indicando que se ingrese bien el tipo de auto y luego se realice la salida del programa. De haberse ingresado bien el tipo de auto el programa deber pedir que se ingrese el nmero de das alquilado y luego los Km. recorridos Luego se debe imprimir automticamente el monto a pagar por alquiler. La frmula para calcular el monto es:
MONTO = (TAZA_TIPO_DE_AUTO*DIA) + (TAZA_KM_RECORRIDO*KM)

PRE: tipos de autos (A, B, C), nmero de das alquilados, kilmetros recorridos POS: monto a pagar por el alquiler del auto Diagrama Nassi-Schneiderman Leer (opc)

opc
A B C Otro caso

tazadia = 15 tazadia = 20 tazadia = 30 tazakm = 0.2 tazakm = 0.3 tazakm = 0.4 "Ingrese el nmero de das alquilados:" Leer (dias) "Ingrese el nmero de kilmetros recorridos:" Leer (km) monto=(tazadia*dia)+(tazakm*Km); Imprimir "El monto a pagar es:" monto

Imprimir La opcin ingresada no es vlida, el programa se cerrar

Seudocdigo

ACCION alquiler_auto ( ) CARACTER opc ENTERO dia, Km, tazadia REAL tazakm ,monto ESCRIBIR ("A = auto chico - 15$ por dia") ESCRIBIR ("B = auto mediano - 20$ por dia ) ESCRIBIR ("c = auto grande - 30$ por dia ) LEER (opc) SIM (opc) CASO A: tazadia 15 tazakm 0.2 CASO B: tazadia 20 tazakm 0.3 CASO C: tazadia 30 tazakm 0.4 SI_NO ESCRIBIR ("La opcin ingresada no es vlida, el programa se cerrar") FIN_SIM ESCRIBIR ("Ingrese el nmero de das alquilados:"); LEER (dia) ESCRIBIR ("Ingrese el nmero de kilmetros recorridos:"); LEER (Km); monto (tazadia*dia) + (tazakm*Km) ESCRIBIR ("El monto a pagar es ",monto) FIN_ACCION

Codificacin en C++:

#include <iostream> #include <conio.h> using namespace std; int main() { char opc; int dia,Km,tazadia; float tazakm,monto; cout<<"A = auto chico (15$ por dia)"<<endl; cout<<"B = auto mediano (20$ por dia)"<<endl; cout<<"B = auto grande (30$ por dia)"<<endl; cout<<"\nIngrese su opcion: "; cin>>opc; switch (opc){ case 'A': tazadia=15; tazakm=0.2; break; case 'B': tazadia=20; tazakm=0.3; break; case 'C': tazadia=30; tazakm=0.4; break; default: cout<<"La opcion ingresada no es valida, el programa se cerrara"<<endl; getche(); exit (0); } cout<<"Ingrese el numero de dias alquilados: "; cin>>dia; cout<<"Ingrese el numero de kilometros recorridos: "; cin>>Km; monto=(tazadia*dia)+(tazakm*Km); cout<<"\nEl monto a pagar por el alquiler de su auto es: "<<monto<<endl; getche(); }

6) Realizar un algoritmo que permita ayudar a todos aquellos alumnos desaprobados

en el Promedio Final aumentando dos puntos a su promedio siempre y cuando hayan entregado su trabajo. De no cumplirse con esta condicin el promedio final debe permanecer igual. PRE: N (Tipo de Dato ENTERO, nmero de alumnos) POS: si x[i].trab=s y x[i].prom<10.5 => x[i].prom=x[i].prom+2, i= 0,1,,N-1 Diagrama Nassi-Schneiderman
Leer (N) i=0; i<N; i++; Leer (x[i].nom) Leer (x[i].trab) Leer (x[i].prom) i=0; i<N; i++;

x[i].trab=s y x[i].prom<10.5
x[i].prom=x[i].prom+2 i=0; i<N; i++; Imprimir x[i].nom x[i].prom

Seudocdigo
CONSTANTE ENTERO max100 REGISTRO alumno CARCTER nom[30] CARCTER trab REAL prom FIN REGISTRO ACCION nuevoProm ( ) ENTERO N,i alumno x[max] LEER (N) PARA i0 HASTA N-1 LEER(x[i].nom) LEER(x[i].trab) LEER(x[i].prom) ii+1 FIN PARA PARA i0 HASTA N-1 SI (x[i].trab=s y x[i].prom<10.5) x[i].prom=x[i].prom+2 FIN SI ii+1 FIN PARA PARA i0 HASTA N-1 ESCRIBIR (x[i].nom) ESCRIBIR (x[i].prom) ii+1 FIN PARA FIN ACCION

Codificacin en C++

#include<iostream> #include<conio.h> #define max 100 using namespace std; struct alumno { char nom[30]; char trab; float prom; }; int main() { int N,i; alumno x[max]; cout<<"Ingresar numero de alumnos: "; cin>>N; for(i=0;i<N;i++){ cout<<endl<<"Nombre: "; fflush(stdin); gets(x[i].nom); cout<<"Presento trabajo (s/n)?: "; cin>>x[i].trab; cout<<"Promedio: "; cin>>x[i].prom; } for(i=0;i<N;i++){ if((x[i].trab=='s' || x[i].trab=='S') && x[i].prom<10.5){ x[i].prom=x[i].prom+2; } } system("cls"); cout<<"Nuevos Promedios"<<endl<<endl; for(i=0;i<N;i++){ cout<<x[i].nom<<"\t"<<x[i].prom<<endl; } getch(); }

7) Realice un algoritmo para realizar que se repita una secuencia de nmeros en el rango de 0 a 40.

PRE: n (cantidad de veces que se repetir la secuencia), k (tiempo de retraso) POS: secuencia de nmeros de 0 a 40 n veces con un retraso de k segundos Diagrama Nassi-Schneiderman
Imprimir ("Ingrese la cantidad de veces k desea repetir la secuencia) Leer n Imprimir ("Ingrese los segundos de retardo que debe tomar entre cada numero: ") Leer k i=0; i<40; j=0; i=i+1 j<n; j=j+1

RETARDAR(k)//sleep(k) en C++ 8) 9) ESCRIBIR (i+1) Imprimir m

Seudocdigo
ACCION secuencia_num ( ) ENTERO i, j ,n REAL k ESCRIBIR ("Ingrese la cantidad de veces k desea repetir la secuencia) LEER (n) ESCRIBIR ("Ingrese los segundos de retardo que debe tomar entre cada numero: ") LEER (k) k k*1000 //ya k la funcin sleep usa milisegundos PARA i DESDE 0 HASTA 40 ESCRIBIR ("\n")//salto de linea PARA j DESDE 0 HASTA n RETARDAR(k)//Sleep(k) en C++ ESCRIBIR ("\t")//tabulacion ESCRIBIR (i+1) jj+1 FIN_PARA ii+1 FIN_PARA FIN_ACCION

Codificacin en C++:

#include <iostream> #include <conio.h> #include <windows.h> // esta librera es la que nos permite usar Sleep() using namespace std; int main() { int i,n,j; float k; cout<<"Ingrese la cantidad de veces k desea repetir la secuencia: "; cin>>n; printf("Ingrese los segundos de retardo que debe tomar entre cada numero: "); cin>>k; k=k*1000; for(i=0;i<40;i++){ cout<<"\n"; for(j=0;j<n;j++){ Sleep(int(k)); cout<<"\t"<<i+1; } } getche(); }

8) Realiza un algoritmo que permita pedir el ingreso de 4 notas y valide para que las notas sean mayores de 0 y menores que 20.

PRE: val (Tipo de Dato ENTERO) POS: si val 0 y val 20 => x[i]=val, Diagrama Nassi-Schneiderman

i= 0,...,3

Escribir (Ingresar 4 notas: ) i=0; i<4; i++ Leer(val) val>=0 y val<=20 V x[i]=val Seudocdigo i=i-1 F

ACCION Notas ( ) ENTERO i, val, x[4] PARA i0 HASTA 3 LEER (val) SI (val>=0 y val<=20 ) x[i]val SINO ii-1 FIN SI ii+1 FIN PARA FIN ACCION

Codificacin en C++
#include<iostream> #include<conio.h> using namespace std; int main() { int i,val,x[4]; cout<<"Ingresar Notas [0,20]"<<endl<<endl; for(i=0;i<4;i++){ cout<<"Ingresar valor "<<i+1<<": "; cin>>val; if(val>=0 && val<=20){ x[i]=val; } else{ cout<<" Valor incorrecto"<<endl; i=i-1; } } cout<<endl<<"Se termiaron de ingresar las 4 notas"; getch(); }

9) Realizar un algoritmo que pida el ingreso del nmero de alumnos a promediar en

una clase; luego pida el nombre de ese alumno y su promedio. Al final el algoritmo debe imprimir el promedio general de la clase y el nombre y la nota del mejor alumno; PRE: n (nmero de alumnos); POS: 1. prom = 2. maynom (alumno con la mejor nota) 3. maynot (nota del mejor alumno) Diagrama Nassi-Schneiderman Imprimir "Ingrese el nmero de alumnos: " Leer n i = 1; i < N+1; i = i+1

Imprimir "Nombre del alumno: " Leer nombre Imprimir "Nota del alumno: " Leer nota

nota > maynot

strcpy(maynom,nom bre) maynot = nota prom = sumnot n ESCRIBIR ("El promedio del salon es:",prom) ESCRIBIR ("El alumno con la mejor nota es:",maynom) ESCRIBIR ("Tiene una nota de:",maynot);

Seudocdigo
ACCION promedio_alum ( ) ENTERO n , i CARACTER nombre[20], maynom[20] REAL nota, prom, maynot = -1 , sumnot = 0 ESCRIBIR ("Ingrese el nmero de alumnos:") LEER (n) PARA i DESDE 0 HASTA n ESCRIBIR ("ALUMNO N",I+1) ESCRIBIR ("Nombre del alumno:") LEER (nombre) ESCRIBIR ("Nota del alumno:") LEER (nota) sumnot sumnot + nota SI (nota>maynot) maynom nombre maynot nota FIN_SI i i+1 FIN_PARA prom sumnot n ESCRIBIR ("El promedio del salon es:",prom) ESCRIBIR ("El alumno con la mejor nota es:",maynom) ESCRIBIR ("Tiene una nota de:",maynot); FIN_ACCION

#include <iostream> #include <conio.h> using namespace std; int main() { int n,i; char nombre[20],maynom[20]; float nota,prom,maynot=-1,sumnot=0; cout<<"Ingrese el nmero de alumnos: "; cin>>n; for(i=0;i<n;){ cout<<"\nALUMNO N"<<i+1<<endl; cout<<"Nombre del alumno: "; cin>>nombre; cout<<"Nota del alumno: "; cin>>nota; sumnot = sumnot + nota; if(nota>maynot){ strcpy(maynom,nombre); maynot=nota; } i=i+1; } prom=sumnot/n; cout<<"\nEl promedio del salon es:"<<prom<<endl; cout<<"\nEl alumno con la mejor nota es:"<<maynom<<endl; cout<<"Tiene una nota de:"<<maynot<<endl; getch(); }

Codificacin en C++:

10) Realizar un algoritmo que pida ingresar N nmeros y que finalice cuando se ingrese

uno negativo e imprima el promedio de los ingresados PRE: x[i], i=0,1,,N POS: prom= )/i Diagrama Nassi-Schneiderman
Escribir (Ingresar Numeros (terminar con un negativo)) i=0 y s=0.0 Leer (x[i]) Mientras (x[i]>=0) i=i+1 s=s+x[i] dimX=i Leer (x[i]) prom=s/dimX Imprimir prom

Seudocdigo
max100 ACCION Numeros ( ) ENTERO i, dimX REAL s, x[max],prom i0 s0.0 LEER (x[i]) MIENTRAS (x[i]>=0) ii+1 ss+x[i] dimxi LEER (x[i]) FIN MIENTRAS prom s/dimX ESCRIBIR (El promedio es: , prom) FIN ACCION

Codificacin en C++

#include<iostream> #include<conio.h> #define max 100 using namespace std; int main() { int i; float s, x[max],prom; i=0; s=0.0; cout<<"Ingresar valores (terminar con un negativo)"<<endl; cout<<endl; cout<<"Ingresar valor "<<i+1<<": "; cin>>x[i]; while(x[i]>=0){ s=s+x[i]; i=i+1; cout<<"Ingresar valor "<<i+1<<": "; cin>>x[i]; } prom=(float)s/i; cout<<endl; cout<<"El promedio de los numeros es: "<<prom; getch(); }

11) Escribir un algoritmo que genere una tabla de multiplicar del uno al doce de un

numero pedido. La salida debe tener el siguiente formato: 1xn= 2xn= 3xn=

12 x n = PRE: num (numero del cual se desea la tabla de multiplicar) POS: i ,x,num, =, res i. 1 x num = (1*num) ii. 2 x num = (2*num) iii. 3 x num = (3*num) Diagrama Nassi-Schneiderman Imprimir Ingresa un numero del cual desee la tabla de multiplicar Leer num num 1 AND num 12 V i = 1; i < N+1; res = num * i Imprimir num, x, i ,=, res i = i+1 F

iv. 12 x num = (4*num)

ACCION Tabla_de_multiplicar () ENTERO num, res, i ESCRIBIR (Ingresa un numero del cual desee la tabla de multiplicar) LEER (num) PARA i DESDE 1 HASTA 12 res i *num ESCRIBIR (i, x, num,=, res) i=i+1 FIN_PARA FIN_ACCION Seudocdigo Codificacin en C++:

#include <iostream> #include <conio.h> using namespace std; int main() { int num,res,i; cout<<"Ingresa un numero del cual desee la tabla de multiplicar: "; cin>>num; for(i=1;i<=12;){ res=i*num; cout<<i<<"x"<<num<<"="<<res<<endl; i=i+1; } getche(); }

12) Escribir un algoritmo que permita alamacenar el texto de un documento en un

archivo, lo grabe y salga cuando se digite la palabra fin. Pseudocdigo:


Max10000 ACCION Texto( ) INICIO ENTERO i CARCTER nom[Max] FILE *Archivo PRIMER (Archivo) i0 ESCRIBIR (Ingrese un texto <terminar con la palabra fin>) MIENTRAS (i<Max) LEER (nom[i]) SI (nom[i-2]=f y nom[i-1]=i y nom[i]=n) INTERRUMPIR //break; FIN SI ii+1 FIN MIENTRAS ESCRIBIR (Texo Guardado) PONER (Archivo, nom) MARCAR (Archivo, ) FIN

Codificacin en C++ :

#include<iostream> #include<conio.h> #include<windows.h> #define max 10000 using namespace std; int main() { int i; char nom[max]; FILE *ARCHIVO; ARCHIVO=fopen("DOCUMENT.txt","w"); i=0; printf("INGRESE UN TEXTO <terminar con la palabra \"fin\">\n"); while(i<max){ scanf("%c",&nom[i]); if(nom[i-2]=='f' && nom[i-1]=='i' && nom[i]=='n'){ break; } i++; } cout<<"\n\nTexto Guardado...Saliendo.."; fprintf(ARCHIVO,nom); fclose(ARCHIVO); Sleep(3000); }

13) Realizar un algoritmo para leer un archivo Documento, ya creado. Leer el texto del archivo, carcter por carcter desde el primero hasta el ltimo.

Pseudocdigo: ACCION LeerTexto( ) INICIO FILA *fichero PRIMER (fichero) MIENTRAS(NO ULTIMO(fichero)) RETARDAR(500) //Sleep(500); fputc(fgetc(fichero),stdout); FIN MIENTRAS FIN

Codificacin en C++ :
#include<iostream> #include<conio.h> #include<windows.h> using namespace std; int main() { FILE *fichero; char nom [500]; fichero =fopen("DOCUMENT.txt","r"); while (!feof(fichero)){ Sleep(500); fputc(fgetc(fichero),stdout); } fclose(fichero); getch(); }

15) Escribir un algoritmo que permita guardar datos de 10 alumnos de una clase en un

archivo llamado Alumnos. Pseudocdigo:


REGISTRO Alum ENTERO codigo CARCTER nombre[30] ENTERO nota FIN REGISTRO ACCION Principal( ) INICIO FILA Alumnos Alum A ENTERO N10 //10 alumnos ENTERO i PRIMER (Alumnos) PARA i0 HASTA N-1 ESCRIBIR (Codigo: ) LEER (A.codigo) ESCRIBIR (Nombre: ) LEER (A.nombre) ESCRIBIR (Nota: ) LEER (A.nota) PONER (Alumnos, A) ii+1 FIN PARA MARCAR (Alumnos, ) FIN

Codificacin en C++ :
#include<iostream> #include<conio.h> using namespace std; struct Alum { int codigo; char nombre[30]; int codigo; }; int main() { int i,N=10; FILE *Alumnos; Alum A; Alumnos =fopen("Database.txt","w"); for(i=0;i<N;i++){ cout<<"Codigo: "; cin>>A.codigo; cout<<"Nombre"; gets(A.nombre); cout<<"Nota: "; cin>>A.nota; fwrite(&A,sizeof(A),1,Alumnos); } fclose(Alumnos); getch(); }

Vous aimerez peut-être aussi