Escolar Documentos
Profissional Documentos
Cultura Documentos
TECNICAS DE PROGRAMACION
ESTRUCTURADA:
APLICACIONES CON C++
INTRODUCCIÓN ................................................................................................................1
CAPITULO UNO
PROGRAMACIÓN DE COMPUTADORAS
1.2.1. Claridad..................................................................................................5
1.3.2. Variables................................................................................................7
CAPITULO DOS
ALGORITMOS
2.1.1. Algoritmo................................................................................................8
CAPITULO TRES
CARACTERISTICAS DEL C++
3.2. Identificadores...................................................................................................14
3.9. Constantes.........................................................................................................17
CAPITULO CUATRO
OPERADORES BÁSICOS
CAPITULO CINCO
SALIDA / ENTRADA ESTÁNDAR
CAPITULO SEIS
SENTENCIAS DE CONTROL
CAPITULO SIETE
SUBPROGRAMAS
CAPITULO OCHO
ESTRUCTURA DE DATOS: ARREGLOS
CAPITULO NUEVE
REGISTROS
9.2. Estructuras.........................................................................................................96
CAPITULO DIEZ
PUNTEROS
BIBLIOGRAFIA............................................................................................................... 137
INTRODUCCIÓN
LOS AUTORES.
PROGRAMACIÓN DE COMPUTADORAS
Datos de entrada
En el cual se especifica los datos
proporcionados por el problema en
cuestión. Algunas veces se tendrán que
seleccionar entre muchos datos, aquellos
datos importantes para obtener lo que se
requiere.
Datos de salida
El programa que se elabora para solucionar
el problema generará un resultado (lo que
requerimos), ¿qué resultado?.
Evidentemente, esto también lo
encontramos al analizar el problema, de
esta forma establecemos los datos que se
deben obtener al aplicar el programa.
1.2.1. CLARIDAD
Ha de ser fácil de leer y entender, en lo
posible se debe emplear el algoritmo más
simple, de entre las múltiples opciones
existentes.
1.2.2. EFICIENCIA
Se busca hasta donde se pueda, emplear la
menor cantidad de acciones o instrucciones en
el programa, aprovechando los recursos que
pueda ofrecer el sistema y la computadora,
debe ser fácilmente adaptado a otro lenguaje
de programación.
TECNICAS DE PROGRAMACIÓN ESTRUCTURADA: Aplicaciones en C++ GamarraMorenoADJ 5
1.2.3. MODULARIDAD Y ESTRUCTURACIÓN
Puede estar subdividido en bloques o módulos,
cada módulo realiza una parte del trabajo
total. Los módulos deben usar las técnicas de
la Programación Estructurada para facilitar
la verificación, depuración y mantenimiento
del programa.
1.3.1. CONSTANTES
Estos objetos tienen valores fijos y que no
pueden ser variados a lo largo de la
ejecución de un programa.
ALGORITMOS
2.1. DEFINICIONES
2.1.1. ALGORITMO
El algoritmo tal como lo vimos inicialmente,
es el conjunto de acciones que se deberán
realizar para resolver un problema. Si este
problema ha de ser resuelto por una
computadora, entonces el algoritmo es el
conjunto de instrucciones que deberán ser
realizados por la computadora.
Estructuras de control
Son tres tipos de estructuras que al
utilizarse individualmente o en forma
combinada pueden resolver cualquier
problema de programación con un solo punto
de entrada y de salida.
Las estructuras son las siguientes:
• Estructura secuencial, el cual ejecuta
el conjunto de instrucciones
sucesivamente una a continuación de
otra, sin omitir ninguna.
• Estructuras selectivas, son aquellas
que seleccionan una alternativa –puede
ser una o varias instrucciones- a
realizar, la selección depende del
valor de una condición. Estas a su vez
se dividen en estructuras selectiva
simple, doble y múltiple.
• Estructuras repetitivas, son aquéllas
en le que una instrucción o conjunto de
instrucciones se repiten una cantidad
de veces determinada por una condición.
Tenemos las siguientes, estructura
repetitiva mientras, hacer - mientras,
desde – hasta (para).
Recursos abstractos
El conjunto de instrucciones a seguir es
un recurso abstracto, pues es
independiente del tipo de computadora a
emplear, así como también del lenguaje de
programación. Estas instrucciones deben
ser implementadas con pocos o casi ningún
cambio, en un lenguaje de programación
específico para cualquier tipo de
computadora.
2.3.3. PSEUDOCÓDIGO
Representa al algoritmo, en forma de palabras
y frases del lenguaje natural, en nuestro
caso el español. El Pseudocódigo a de estar
sujeto a ciertas reglas que mencionaremos
oportunamente, de tal manera que permitan
expresar nuestro algoritmo de manera fácil y
flexible.
3.1. CARACTERÍSTICAS
El lenguaje de programación C++ se emplea para
escribir sistemas de operativos, compiladores,
programas ensambladores, programas de bases de datos,
sistemas expertos, etc. Y sus características son:
• Es de propósito general;
3.2. IDENTIFICADORES
Un identificador es el nombre que se da a un programa,
variable, constantes, etiqueta, función, clase,
estructura, etc. Su longitud significativa por defecto
es de 32 caracteres y debe estar formado por:
// Directivas y declaraciones
main(){
//Directivas declaraciones
//Sentencias
}
función_1(){
//Directivas declaraciones
//Sentencias
}
//Más funciones
3.5. COMENTARIOS
Los comentarios son ignorados por el compilador y se
utilizan para autodocumentar los programas y C++
soporta dos tipos:
3.6. BLOQUES
Cualquier grupo de instrucciones puede formar un
bloque y ser tratado como una instrucción simple, para
lo cual basta encerrarlo entre llaves.
{
//Sentencias
}
Se pueden anidar como se muestra a continuación
{//Comienzo de bloque
{//Comienzo de sub-bloque
..
} //Fin de sub-bloque
}//Fin de bloque
3.7. TIPOS DE DATOS FUNDAMENTALES
Ejemplos:
3.9. CONSTANTES
Son valores numéricos, caracteres o cadenas que no
ocupa memoria fuera del código del programa.
Constante hexadecimal
Las constantes Hexadecimales y están
precedidas por 0x, utiliza los dígitos del
0..9 y las letras de A..F (para
representar valores del 10..15); por
ejemplo: 0xFF, 0x12.
Constante octal
Son constantes en el sistema de numeración
octal y están precedidos por 0 (cero),
utiliza los dígitos del 0..7; por ejemplo:
011, 004.
Ejemplo:
#define NOTA_MAX 20
#define ENTER 0x13
#define titulo "TURBO C"
3.10.2. CONST
const <identificador>=<Valor>;
Ejemplo:
const NOTA_MAX=20;
3.11. DECLARACIÓN DE VARIABLES
Toda variable para ser usada por un programa debe ser
antes declarada y el formato a utilizar es:
Ejemplos:
int contador=0;
float sueldo, descuento, igv=0.18;
3.12. EXPRESIONES
Son valores, constantes, variables, llamada a una
función o una combinaciones de los anteriores. Cuando
char ch;
int i;
float f;
double d;
r=(ch / i) + (f * d) - (f + i);
double
double
(tipo) <expresión>
float res;
int num=13;
OPERADORES BÁSICOS
4+5*2à14
5*4/2/2à5
a=3;
x=++a+3;
a = a + 1;
x = + + a + 3;
x = a + 3;
a=3;
y=a+++2; //
y = a + 2;
y = a + + + 2;
a = a + 1;
Variable = <Valor>;
El valor puede ser una constante, una
variable o una expresión.
Ejemplos:
saldo = 567.89;
car = ‘A’;
edad = 20;
variable_1=variable_2=…=variable_N=expresión;
Ejemplo:
x=y=3*2;
Ejemplo:
x += 5; //Equivalente a x=x+5;
y -= 3; //Equivalente a y=y+3;
z = 2; //Equivalente a z=z*2;
p q !p !q p&&q p||q
1 1 0 0 1 1
1 0 0 1 0 1
0 1 1 0 0 1
0 0 1 1 0 0
main()
{
main()
{ int x=1,y=3,suma;
suma=x+y;
cout<< "\n la suma de "<< x << " mas "
<<y << " es " << suma;
}
cin >>variable_1>>variable_2>>…>>variable_n;
Ejemplo 1:
#include <iostream.h>
main()
{ int x,y,suma;
main()
{ int f,c;
SENTENCIAS DE CONTROL
6.1. SENTENCIA if
Expr
SI
N0
Sentencia
if (expresión) sentencia;
Explicación
Explicación
Explicación
t=num1;
num1=num2;
num2=t;
SI Expr NO
Sentencia_1 Sentencia_2
Explicación
cout<<"Año : ";
TECNICAS DE PROGRAMACIÓN ESTRUCTURADA: Aplicaciones en C++ GamarraMorenoADJ32
cin>>anno;
if(anno % 4==0){
sw=1;
if(anno%100==0&&anno%400!=0)
sw=0;
}
if(sw) cout <<"Año bisiesto";
else cout<<"Año no bisiesto";
cout<<endl;
}
Explicación:
Explicación:
NO Sentencia_1
expr==const_2 SI
NO Sentencia_2
expr==const_3 SI
Sentencia_3
...
...
...
expr==const_N SI
Sentencia_N
NO
Sentencia_x
if (expresión_1) sentencia_1;
else if (expresión_2) sentencia_2;
else if (expresión_3) sentencia_3;
...
...
else if (expresión_n) sentencia_n;
[else sentencia_x;]
TIPO DE COSTO
TARIFA (U.M./Kw-h)
1 2.30
2 8.25
3 6.42
4 5.80
5 9.65
#include <iostream.h>
void main(){
float consumo,tarifa,monto;
int tipo;
cout<<"Consumo (kw-h):";
cin>>consumo;
cout<<"Tipo de tarifa(1 al 5): ";
cin<<tipo;
if (tipo==1) tarifa=2.30;
else if (tipo==2) tarifa=8.25;
else if (tipo==3) tarifa=6.42;
else if (tipo==4) tarifa=5.80;
else if (tipo==5) tarifa=9.65;
else tarifa=0;
if(tarifa){
monto=cons*tarifa;
cout<<"\nMonto a pagar: "<<monto;
}
else cout<<"\nLa tarifa no existe";
}
Explicación:
Expr
switch(expresión){
case constante_1 : sentencia_1; break;
case constante_2 : sentencia_2; break;
case constante_3 : sentencia_3; break;
.
.
case constante_n : sentencia_n; break;
[default : sentencia_x;]
}
TIPO DE COSTO
TARIFA (U.M./Kw-h)
1 2.30
2 8.25
3 6.42
4 5.80
5 9.65
#include <iostream.h>
void main(){
float consumo,tarifa,monto;
int tipo;
cout<<"Consumo:";
cin>>consumo;
cout<< "Tipo de tarifa(1 al 5):";
cin>>tipo;
switch(tipo){
case 1:tarifa=2.30;break;
case 2:tarifa=8.25;break;
case 3:tarifa=6.42;break;
case 4:tarifa=5.80;break;
case 5:tarifa=9.65;break;
default:tarifa=0;
}
if(tarifa){
monto=consumo*tarifa;
cout<<"\nMonto a pagar:"<<monto;
}
else cout<<"\nTarifa incorrecta"<<endl;
}
#include <iostream.h>
void main(){
int anno;
float sueldo;
char cat;
cout<<"Ingrese Sueldo:”;
cin>>sueldo;
cout<<"Ingrese Año:”;
cin>>anno;
cout<<"Ingrese Categoría:”;
cin>>cat;
switch(cat){
case 'A':
case 'a':
if(anno>1980)
sueldo=1.15*sueldo;
else
sueldo=1.12*sueldo;
break;
case 'B':
case 'b':
if(anno>1980)
sueldo=1.20*sueldo;
else
sueldo=1.17*sueldo;
break;
case 'C':
case 'c':
if(anno>1980)
sueldo=1.25*sueldo;
else
sueldo=1.22*sueldo;
break;
}
cout<<"Nuevo sueldo: "<<sueldo<<endl;
}
Expr
SI
N0
Sentencia
Explicación:
void main(){
int n,i;
Explicación:
Sentencia
SI
Expr
NO
do sentencia while(expr);
#include <iostream.h>
void main(){
int n1,n2,acum=0;
#include <iostream.h>
void main(){
int n1,n2,mcd,res;
Expr_1
Expr_2
SI
Sentencia
N0
Expr_3
for(expr_1;expr_2;expr_3) sentencia;
1 2 3
s= + + + ...
2 3 4
#include <iostream.h>
void main(){
int i,n;
float s;
1 1 1 1
s = 1+ + + + ...
2 3 4 n
#include <iostream.h>
void main(){
int n,i;
float s;
1 1 1
s = 1− + − + ...
2 3 4
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void main(){
int n,i;
float s,t;
clrscr();
cout<<"Cantidad de términos: ";
cin>>n;
s=0;
t=-1.0;
for(i=1;i<=n;i++){
t=-t;
s=s+t/i;
}
cout<< "Suma ="<<s;
getch();
}
1 1 1 1
s= + + + ...
1 + A 1 + 2 A 1 + 3A 1+ n* A
#include <iostream.h>
void main(){
int n,i;
float s,t,a;
cout<<"Limite : ";
cin>>n;
fib=1;
for(p=0,s=1;n>=fib;){
cout<<fib<<”\t”;
p=s;
s=fib;
fib=p+s;
}
}
for(expr1;expr2;expr3){
sentencia_1;
sentencia_2;
...
break;
sentencia_n;
}
sentencia_siguiente;
#include <iostream.h>
void main(){
int i;
goto etiqueta;
inicio:
cout<<"Ingrese un número : ";
cin>>n;
s+=n;
if(n) goto inicio;
cout<<"La suma es: "<<s<<endl;
}
Explicación:
ax 2 + bx + c = 0
La discriminante es:
d = b 2 − 4ac
Si la discriminante es mayor o igual que cero
(d>=0) tiene raíces reales, caso contrario
cout<<"Ingrese a, b y c: ";
cin>>a>>b>>c;
d=b*b-4*a*c;
r=sqrt(abs(d));
if (d>=0){
r1=(-b+r)/(2*a);
r2=(-b-r)/(2*a);
cout<<"r1=”<<r1<<”\n”;
cout<<"r2=”<<r2<<”\n”;
}
else {
cout<<”r1=”<<-b/(2*a)<<”+”
<<r/(2*a)<<”i\n”;
cout<<”r1=”<<-b/(2*a)<<”-”
<<r/(2*a)<<”i\n”;
}
cout<<endl;
}
• Notas de 14 a 20 BUENO
• Notas de 07 a 13 REGULAR
• Notas 00 a 06 DESAPROBADO
#include <iostream.h>
void main(){
int nota,cociente;
cout<<"Ingrese nota de 0 a 20 :";
cin>>nota;
/*Si la nota es positiva realiza
calificacion */
if (nota>=0){
/* divide la nota entre 7 */
cociente=nota / 7;
switch(cociente){
case 0:
cout<<"DESAPROBRADO";
break;
case 1:
cout<<"REGULAR";
break;
case 2:
cout<<"BUENO";
break;
default:
cout<<"NOTA INCORRECTA";
}
}
cout<<endl;
}
#include <iostream.h>
void main(){
int i;
for(i=1;i<=99;i++){
cout<<i<<”\t”;
if(!(i%3)) cout<<"\n";
}
}
//Poblacion A
pa=52e+6;
//Poblacion B
pb=85e+6;
//Tasa de crecimiento A
ta=0.06;
//Tasa de crecimiento B
tb=0.04;
i=0;
while (pa<=pb) {
void main(){
long int i=1,d,suma;
int c=0,n;
#include <iostream.h>
void main(){
int s,i;
s=0;
i=0;
do
s+=++i;
while(s!=820);
cout<<"Asistieron:"<<i+1<<endl;
}
do{
cout<<"Numero: ";
cin>>n;
}while(n>2147483647||n<0);
while (n>=10){
digito=n%10;
if (digito>=0 && digito<=5){
n_ok+=(digito*factor);
factor*=10;
}
n/=10;
}
if (n>=0 && n<=5)
TECNICAS DE PROGRAMACIÓN ESTRUCTURADA: Aplicaciones en C++ GamarraMorenoADJ57
n_ok+=(n*factor);
cout<<"El numero depurado es:”;
cout<<n_ok<<"\n";
}
cout<<"Capital :";
cin>>capital;
cout<<"Tasa :";
cin>>tasa;
cout<<"Tiempo (annos):";
cin>>n;
cout<<"Deposito:";
cin>>deposito;
do{
cout<<"Periodo del deposito :";
cin>>per_dep;
}while(per_dep>n || per_dep<1);
cout<<"Retiro:";
cin>>retiro;
do{
cout<<"Periodo del retiro :";
cin>>per_ret;
}while(per_ret>n || per_ret<1);
cout<<"\n\nAnno\tCapital\n";
for(i=1;i<=n;i++){
capital+=capital*tasa;
if (i%per_dep==0)
capital+=deposito;
if (i%per_ret==0)
capital-=retiro;
cout<<i<<"\t"<<capital<<"\n";
}
}
void main(){
int num,num_i,n;
for(num=1;num<=1000;num++){
num_i=0;
n=num;
while(n>=10){
num_i=num_i*10+n%10;
n/=10;
}
num_i=num_i*10+n;
if(num_i==num) cout<<num<<"\t";
}
}
#include <iostream.h>
void main(){
int f1,f2,producto=0;
#include <iostream.h>
void main(){
int i,n,x,y;
do{
cout<<"Dimensión impar y <=17:";
cin>>n;
} while(n % 2==0 || n>17 || n<0);
clrscr();
i=0;
x=n / 2+1;
y=1;
while(i<n*n){
i++;
gotoxy(5*x,y);
cout<<i;
if(i % n){
if(y==1) y=n;
else y--;
if(x==n) x=1;
else x++;
} else y++;
if(x>n) x=1;
if(y<1) y=n;
}
}
SUBPROGRAMAS
Problema
Subproblema Subproblema
2.1 2.2
7.3.1. EJEMPLO
Elaborar el diseño descendente para calcular
el sueldo a pagar a un trabajador de la
Empresa "Horizonte", si el trabajador percibe
las siguientes bonificaciones:
1
En este caso la solución del problema será mediante la elaboración del problema.
TECNICAS DE PROGRAMACIÓN ESTRUCTURADA: Aplicaciones en C++ GamarraMorenoADJ63
a) Por cada hora extra se le paga 25% más
que una hora normal.
ALGORITMO GENERAL
I. Ingreso de datos
II. Cálculo el sueldo a pagar
III. Imprime boleta de pago.
PRIMER REFINAMIENTO
I. Ingreso de datos
II.3. s_neto=sueldo+bonif+descuentos
SEGUNDO REFINAMIENTO
1.25*h_extras*sueldo/30/8
II.1.2. movil=10000
II.1.3. b_sup=0.03*sueldo
II.1.4. bonif=movil+b_sup+p_h_extras
sueldo+movil+b_sup
II.2.1. r_minima=sueldo+bonif
II.2.3. tardanzas=r_computable/
30/8/60*minutos. Para
obtener el descuento por la
tardanza: la remuneración
computable se divide
secuencialmente entre la
cantidad de días que tiene
el mes, entre la cantidad de
horas trabajadas por día y
entre la cantidad de minutos
que tiene una hora.
II.2.4. descuentos=faltas+tardanzas
7.4.1. MODULO
Es una parte de un programa (subprograma) que
cumple con una función especifica, para un
usuario un modulo debe ser como una caja
negra donde ingrese datos y obtiene
resultados, sin importarle cuales fueron las
tareas que hizo el módulo para lograr su
propósito.
c) Diseñar el módulo.
Donde:
Nombre_f Es el nombre de la
función.
OBSERVACIONES:
Donde:
//declaracion de prototipos
primo(int n);
void main(){
//función principal
int n;
for(n=1;n<=100;n++)
if (primo(n)) cout<<n<<" es primo \n";
}
primo(int n){
int r,d=2,flag=1/*se supone que es primo*/;
if (n==1) return 1;
if (n==2) return 1;
while (1){
r=n%d;//halla el resto de n entre d
if(r==0){
flag=0;
break;
}
if ((n-1)==d) break;
d++;
}
if (flag) return 1;
else return 0;
}
void main(){
float x,y,h;
void main(){
int x,y;
ingrese 2 números: 5 3↵
x= 5 y= 3
void main(){
int x,y;
ingrese 2 números: 5 3↵
x= 3 y= 5
void main(){
int n;
cout<<”Nro de elementos : “;
cin>>n;
if (n>0){
int i,num,s=0;
for(i=1;i<=n;i++){
cout<<”Elemento “<<i<<”: “;
cin>>num;
s+=num;
}
cout<<"La suma es :"<<s<<endl;
}
else cout<<"Error: Sin ingresos";
}
for(i=1;i<=n;i++){
cout<<”Elemento<<i<<”: “;
cin>>num;
s+=num;
}
cout<<"La suma es :"<<s;
}
else cout<<"Error: Sin ingresos";
#include <iostream.h>
int maximo(int a,int b,int c);
void main(){
int n1,n2,n3;
if(a>b) max=a;
else max=b;
if(c>max) max=c;
return max;
}
Función radian()
radianes=sexagesimales*(3.1416/180)
Función sexag()
Grados=48
Minutos=47
Segundos=20.4
void main(){
// Variables locales a main()
char resp;
do{
cout<<"Angulo (en sexagesimales): ";
cin>>angulo;
radian();
sexag();
cout<<"¿Continuar? (S/N)\n";
cin>>resp;
}while(resp!='N' && resp!='n');
}
void radian(void)
{
// Variable local a radian()
float rad;
rad=3.1416/180*angulo;
cout<<"En radianes es:”<<rad<<”\n”;
}
void sexag(void)
{
// Variables locales a sexag()
double frac,grad,min,seg;
frac=modf(angulo,&grad);
frac=modf(frac*60,&min);
seg=frac*60;
cout<<”Tambien en Sexageximal es:\n”;
cout<<”Grados :”<<grad<<”\n”;
cout<<”Minutos :”<<min<<”\n”;
main(){
float x,y,h;
( x1 − x 2 )2 + ( x1 − x 2 )2
#include <iostream.h>
#include <math.h>
double distancia(double,double,double,double);
main(){
double a1,a2,b1,b2;
x=sqrt(pow(x1-x2,2)+pow(y1-y2,2));
return(x);
}
TECNICAS DE PROGRAMACIÓN ESTRUCTURADA: Aplicaciones en C++ GamarraMorenoADJ77
Ejemplo 3 : Programa que llama a la función
raiz_cub e imprime la raíz cúbica de
los números del 1 al 10. La función
raiz_cub() calcula la raíz cúbica de un
número entero y a esta a su vez llama a
la función abs que se encarga de
devolver el valor absoluto de un número
de tipo double.
Hacer x=n/10
Mientras valor_absoluto(x*x*x-n)>0.0001 hacer
n − x3
x = x+
3x 2
x es el valor de la raíz cúbica de "n"
double raiz_cub(double);
double abs(double);
#include<iostream.h>
#include<math.h>
double abs(double);
/* Función Principal */
void main(){
double i;
cout<<”NUMERO\t\tR.CUBICA\n”;
for(i=1;i<=10;i++)
cout<<i<<”\t\t”<<raiz_cub(i)<<”\n”;
}
x=n/10.0;
while(abs(x*x*x-n)>0.0001)
x=x+(n-x*x*x)/(3.0*x*x);
return x;
}
int bisiesto(int);
int fechaok(int,int,int);
void main(){
TECNICAS DE PROGRAMACIÓN ESTRUCTURADA: Aplicaciones en C++ GamarraMorenoADJ78
int aa,mm,dd;
do{
printf("Fecha (dd/mm/aaaa)");
scanf("%d/%d/%d",&dd,&mm,&aa);
}while(fechaok(dd,mm,aa)!=0);
printf("Error Fecha: %d/%d/%d\n",dd,mm,aa);
}
void main(){
long n;
int b1,b2;
while(numero>=base){
res=numero % base;
numero/=base;
n+=(res*factor);
factor*=10;
}
n+=(numero*factor);
return n;
}
Tipo_de_dato identificador[N];
Donde:
Ejemplo:
int A[100]
Ejemplo:
A[3]=5;
cout<<A[3];
void main()
{ int A[N]; // definimos el arreglo A
//de enteros para 5 elementos
int i; //índice del arreglo
//imprime el vector
cout<<"El contenido del arreglo es :\n";
for(i=0;i<N;i++)
cout<<A[i]<<"\n";
}
Explicación:
void main()
{ int A[N]; // definimos el arreglo A de
// enteros para 5 elementos
int i; //índice del arreglo
float prom;int s=0;
// lee el vector y a la vez calcula
// la suma de los elementos
for(i=0;i<N;i++)
{ cout<<"Ingrese elemento : "; cin>>A[i];
s=s+A[i]; // s acumula la suma de
// los elementos
Explicación:
void main()
{ int A[N];// definimos el arreglo A de enteros
// para 10 elementos
int ma,me; // ma es el mayor elemento
// me es el menor elemento
leer_vector(A);
hallar_mayor_y_menor(A,ma,me);
cout<<"El mayor elemento es "<<ma;
cout<<" y existe "<<existe(A,ma)<<" veces\n";
cout<<"El menor elemento es "<<me;
cout<<" y existe "<<existe(A,me)<<" veces\n";
}
Explicación:
void main(){
int x=0,vector[MAX];
x=ingreso(vector);
reporte(vector,x);
}
do{
cout<<"Cuantos elementos : ";
cin>>cant;
} while(cant<1 || cant>MAX);
for(i=0;cant>i;i++){
do{
cout<<"elemento "<<i<<":";
cin>>a[i];
}while(repetido(a,i,a[i]));
}
return cant;
}
for(i=0;n>i;i++)
if(a[i]==x){
sw=1;
break;
}
return sw;
}
Columna 1 ?
Columna 2 ?
Columna 3 ?
Columna 4 ?
Fila 0 ? M[0][0] M[0][1] M[0][2] M[0][3] M[0][4]
Identificador [fila][columna]
Ejemplo:
M[2][3]=5;
Cout<< M[2][3];
void main()
{ int a[NF][NC];//arreglo bidimensional
leer(a);
escribir(a);
}
#include <iostream.h>
#define max 15 //cant. max de filas y columnas
void cuadrado_latino(int a[max][max],int n);
void escribir(int a[max][max], int n);
void main()
{ int a[max][max];//arreglo bidimensional para
//el cuadrado latino
int n;
cout<<"Ingrese orden : ";cin>>n;
cuadrado_latino(a,n);//almacena los valores
//del cuadrado latino
escribir(a,n);
}
REGISTROS
9.2. ESTRUCTURAS
La estructura es una unidad que agrupa a una o más
variables del mismo tipo o de tipos diferentes.
struct identificador{
tipo1 miembro1;
tipo2 miembro2;
.
.
tipoN miembroN;
};
struct estalumno{
char nombre[38];
int edad;
float talla;
};
void main()
{
struct estalumno alumno;
La salida será:
El alumno Fidel Fernández tiene 20 años de edad y mide 1.78
metros.
9.3. UNIONES
La unión en una misma posición de memoria de memoria
puede almacenar diferentes tipos de datos, pero en un
momento dado puede ser de un solo tipo, el tamaño de
la unión es el mismo que se tiene para el tipo de dato
mayor entre los diferentes tipos de la unión.
union identificador{
tipo1 ide1;
tipo2 ide2;
.
.
tipoN ideN;
};
union unicomp{
char color[20];
int numero;
};
main()
{
union unicomp componente;
nom_funcion(var_estru);
#include<stdio.h>
void main()
{
struct estalumno alumno;
nom_funcion(var_estru);
struct estalumno{
char nombre[38];
int edad;
float talla;
};
void main()
{
struct estalumno alumno;
ingr_alu(alumno);
printf("\n\n");
impr_alu(alumno);
}
#include<iostream.h>
struct estruFecha {
int dia;
int mes;
int anno;
};
struct estruTiempo {
int hora;
int minuto;
int segundo;
};
struct fechaTiempo{
struct estruFecha LaFecha;
struct estruTiempo ElTiempo;
};
main()
{
struct fechaTiempo Nacimiento;
struct persona
{ char[10] nom;
float sueldo;
};
main()
{ struct persona empleado[10];
//arreglo de estructuras
//empleado de 10
elementos
.............
}
empleado[indice].sueldo=500;
#include <stdio.h>
#define max 10
struct datos
{ char nomb[20]; //nombre
int edad;
};
void main()
{
struct datos p[max];
leer(p);
escribir(p);
}
Multiplicación de racionales
(p, q) (p’, q’) = (p p’, q q’)
struct racional
{ int num;
int den;
};
void main(){
struct racional a,b,s,m;
if (d==2) break;//divisor = 2
}
}
#define max 2
struct estruFecha {
int dia;
int mes;
int anno;
};
struct estruTiempo {
int hora;
int minuto;
int segundo;
};
struct datos
{ char nomb[20]; //nombre
void main()
{
struct datos p[max];
leer(p);
escribir(p);
}
}
}
PUNTEROS
px = &x ;
px Variable x
direc de x valor
o en forma simplificada
px Variable x
valor
int x;
int *px;
int *px;
Explicación:
Las instrucciones:
x=5;
px=&x;
se representan de la siguiente manera:
Variable x
px dir x 5
La siguiente proposición
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
void main(){
char texto[80];
int cpal,i,lpal;
#include <stdio.h>
#include <ctype.h>
void main(){
char texto[80],palabra[80];
int i,lpal;
while(texto[i]!='\0'){
lpal=0;
palabra[lpal]='\0';
while (isalpha(texto[i]) &&
texto[i]!='\0'){
lpal++;
Caracteres Nulo
void main(){
char cadena[80],subcad[80];
void main()
{ char x[]="hola amigo",*p;int i;
i=0;
p=x;
while(*(p+i)!= 0)
{cout<<*(p+i);
i++;
}cout<<"\n";
}
TECNICAS DE PROGRAMACIÓN ESTRUCTURADA: Aplicaciones en C++ GamarraMorenoADJ115
Ejemplo 5 : Se tiene una cadena de caracteres se
pide hacer un programa para contar
cuantas palabras en total existen,
además el programa debe calcular
cuantos caracteres tiene la palabra más
grande y la más corta. Para hacer el
recorrido deberá usar sólo punteros a
arreglos. Por ejemplo
Si se tiene la cadena :
"AQUÍ UNA CADENA CORTA ESTA PRESENTE"
El programa imprimirá que existen 6 palabras en
total, la palabra más corta consta de 3
caracteres y la más grande consta de 8
caracteres.
#include <iostream.h>
void main()
{ int veces=0;//cuantas palabras hay
int ma=0,me=10000;//caract de mayor y menor
//respectivamente
char cad1[45]="AQUI UNA CADENA CORTA ESTA
PRESENTE";
contar(cad1,veces,ma,me);
cout<<"La cadena "<<cad1<<" tiene
\n"<<veces;
cout<<" palabras, la palabra mayor tiene
"<<ma<<" caracteres\n";
cout<<"y la palabra menor tiene "<<me<<"
caracteres"<<endl;
}
Dada la declaración
struct ns { T1 C1;
.....
TK CK;
} *p, q;
Variable q
dir q C1 ... CK
p
Nodos
struct nodo
{ int info;//guarda la información del nodo
// nodo
};
#include <alloc.h>
#define nulo 0
struct nodo
{ int info;
struct nodo *sig;
};
case 4 : contenido(L);break;
case 5 : cout<<"Digite valor a localizar
==> ";cin>>x;
p=localiza(x,L);
if (p==-1)
cout<<"no existe valor ";
else
cout<<"la posición es "<<p;
getch();break;
case 7 : break;
default : cout<<" ingrese valor del 1 al
7";getch();
}
} while (op!=7);
}
a b c d e
Frente Final
Cola
5 6
NULL
Frente Final
ARCHIVOS
0 1 2 3 4 5 6 7 8
Archivo
unlink(“DATOS”);
FILE *arch;
fclose (arch);
NOTA:
int main(void)
{
FILE *stream;
char ch;
/* open a file for update */
stream = fopen("TEXTO.TXT", "r");
int main(void)
{
FILE *p,*q;
char
ch,nombarch1[12]="texto.txt",nombarch2[12]="tex
to1.txt";
// Copia un archivo en otro
p = fopen(nombarch1, "r");
q = fopen(nombarch2, "w");
clrscr();
do
{/* read a char from the file */
ch = fgetc(p);
/*escribe ch en q*/
fputc(ch,q);
} while (ch != EOF);
fclose(p);fclose(q);
clrscr();
//escribe el contenido de los archivos
p = fopen(nombarch1, "r");
cout<<"contenido archivo "<<nombarch1<<"\n";
do
{
/* read a char from the file */
ch = fgetc(p);
/*escribe ch en pantalla*/
putchar(ch);
} while (ch != EOF);
fclose(p);
void main(){
char resp;
do{
clrscr();
cout<<"0. Salir\n";
cout<<"1. Crear\n";
cout<<"2. Anadir\n";
cout<<"3. Reporte\n";
cout<<"4. Consulta\n";
cout<<"5. Modificacion\n";
cout<<"6. Eliminacion\n";
cout<<"7. Ordenar\n";
cout<<"Ingrese Opcion :\n";
resp=getch();
switch(resp){
case '1':crear();break;
case '2':anadir();break;
case '3':reporte();break;
case '4':consulta();break;
case '5':modificacion();break;
case '6':eliminacion();break;
case '7':ordenar();break;
}
}while(resp!='0');
}
void anadir(){
FILE *f;
struct alumno r;
if((f=fopen("alumnos.dat","ab"))==
NULL){
cout<<"No se puede abrir \n";
exit(0);
}
cout<<"Nombre : ";
gets(r.nombre);
while(r.nombre[0]!='\0'){
cout<<"Edad : ";
cin>>r.edad;
fwrite(&r,sizeof(r),1,f);
cout<<"Nombre : ";
gets(r.nombre);
}
fclose(f);
}
void reporte(){
FILE *f;
struct alumno r;
if((f=fopen("alumnos.dat","rb"))==
NULL){
cout<<"No se puede abrir \n";
exit(0);
}
cout<<setw(20)<<"Nombre"
<<setw(10)<<"Edad\n";
while(fread(&r,sizeof(r),1,f)!=0){
cout<<setw(20)<<r.nombre
<<setw(10)<<r.edad<<"\n";
}
fclose(f);
getch();
}
if((f=fopen("alumnos.dat","rb+"))==
NULL){
cout<<"No se puede abrir \n";
exit(0);
}
fseek(f,0L,2);
fgetpos(f,&pos);
nreg=pos/sizeof(r);
for(i=nreg-1;i>=1;i--)
for(j=1;j<=i;j++){
pos1=(j-1)*sizeof(r);
pos2=(j)*sizeof(r);
fseek(f,(long)(pos1),0);
fread(&r1,sizeof(r),1,f);
fseek(f,(long)(pos2),0);
fread(&r2,sizeof(r),1,f);
if(strcmp(r1.nombre,r2.nombre)>0){
fseek(f,(long)(pos2),0);
fwrite(&r1,sizeof(r),1,f);
fseek(f,(long)(pos1),0);
fwrite(&r2,sizeof(r),1,f);
}
}
fclose(f);
cout<<"Ordenado Ascendentemente."
"Pulse una tecla para continuar\n";
getch();
}
void consulta(){
FILE *f;
struct alumno r;
char nombrec[20];
if((f=fopen("alumnos.dat","rb"))==
NULL){
cout<<"No se puede abrir \n";
exit(0);
}
cout<<"Ingrese nombre a consultar : ";
gets(nombrec);
while(fread(&r,sizeof(r),1,f)!=0){
if(!strcmp(r.nombre,nombrec)){
cout<<setw(20)<<"Nombre"
<<setw(10)<<"Edad\n";
cout<<setw(20)<<r.nombre
<<setw(10)<<r.edad<<"\n";
break;
}
}
if(strcmp(r.nombre,nombrec)){
cout<<"No existe ese nombre \n";
getch();
}
TECNICAS DE PROGRAMACIÓN ESTRUCTURADA: Aplicaciones en C++ GamarraMorenoADJ134
fclose(f);
getch();
}
void modificacion(){
FILE *f;
struct alumno r,r1;
char nombrec[20],resp;
long creg=0;
if((f=fopen("alumnos.dat","rb+"))==
NULL){
cout<<"No se puede abrir \n";
exit(0);
}
cout<<"Nombre a modificar:";
gets(nombrec);
while(fread(&r,sizeof(r),1,f)!=0){
creg++;
if(!strcmp(r.nombre,nombrec)){
cout<<setw(20)<<"Nombre"
<<setw(10)<<"Edad\n";
cout<<setw(20)<<r.nombre
<<setw(10)<<r.edad<<"\n";
break;
}
}
if(!strcmp(r.nombre,nombrec)){
cout<<"NUEVO REGISTRO\n";
cout<<"Nombre : ";
gets(r1.nombre);
cout<<"Edad : ";
cin>>r1.edad;
cout<<"Grabar modificaci¢n? (S/N)";
resp=getche();
if(resp=='S' || resp=='s'){
fseek(f,(creg-1)*sizeof(r),0);
fwrite(&r1,sizeof(r),1,f);
}
}
else{
cout<<"No existe ese nombre \n";
getch();
}
fclose(f);
}
void eliminacion(){
FILE *f,*f1;
struct alumno r;
char nombrec[20],resp;
int sw=0;
if((f=fopen("alumnos.dat","rb"))==
NULL){
cout<<"No se puede abrir \n";
exit(0);
}
TECNICAS DE PROGRAMACIÓN ESTRUCTURADA: Aplicaciones en C++ GamarraMorenoADJ135
f1=fopen("tmpfich.dat","wb");
cout<<"Nombre a eliminar: ";
gets(nombrec);
while(fread(&r,sizeof(r),1,f)!=0){
if(!strcmp(r.nombre,nombrec)){
cout<<setw(20)<<"Nombre"
<<setw(10)<<"Edad\n";
cout<<setw(20)<<r.nombre
<<setw(10)<<r.edad<<"\n";
cout<<"Eliminar ? (S/N)\n";
resp=getch();
sw=1;
if(resp=='S' || resp=='s')
cout<<"Eliminado\n";
else fwrite(&r,sizeof(r),1,f1);
}
else fwrite(&r,sizeof(r),1,f1);
}
if (sw==0){
cout<<"No existe ese nombre \n";
getch();
}
fclose(f);
fclose(f1);
remove("alumnos.dat");
rename("tmpfich.dat","alumnos.dat");
}