Professional Documents
Culture Documents
Manual de Programación I - 2007
Manual de Programación I - 2007
PROGRAMACIÓN I
Mg. RUBÉN GALEAS ARANA
Ing. AQUILES AQUINO RIVERA
HUANCAYO – PERÚ
2007
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
UNIDAD I
CONCEPTOS BÁSICOS
A continuación desarrollaremos algunos conceptos básicos e importantes para
una buena comprensión de las técnicas de programación que se pretende
desarrollar.
Por otro lado es importante saber algo sobre datos e información. Aunque
en un diccionario común y corriente los términos “datos” e “información” son
sinónimos; en el campo de la informática es necesario diferenciarlos, pues,
“datos” se refiere a la representación de algún concepto (números enteros,
números reales, cadenas, etc.), mientras que “información” significa “datos”
procesados y organizados (por ejemplo números ordenados).
2
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
3
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
4
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Son más fáciles de utilizar que los lenguajes máquina, pero al igual
que ellos, dependen de la máquina en particular. El lenguaje de bajo
nivel por excelencia es el ensamblador. Las instrucciones en
lenguaje ensamblador son instrucciones conocidas como
nemotécnicos. Por ejemplo, nemotécnicos típicos de operaciones
aritméticas son: en inglés ADD, SUB, DIV, etc.; en español SUM,
RES, DIV, etc.
5
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Estos lenguajes son los más utilizados por los programadores. Están
diseñados para que las personas escriban y entiendan los programas
de un modo mucho más fácil que los lenguajes máquina y
ensambladores. Un programa escrito en lenguaje de alto nivel es
independiente de la máquina (las instrucciones no dependen del
diseño del hardware o de una computadora en particular), por lo que
estos programas son portables o transportables. Los programas
escritos en lenguaje de alto nivel pueden ser ejecutados con poca o
ninguna modificación en diferentes tipos de computadoras. A este
nivel se encuentran los lenguajes de programación como Pascal, Ada,
Turbo C++, Visual Basic, Visual C++, etc..
6
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
UNIDAD II
METODOLOGÍA PARA LA SOLUCIÓN DE
PROBLEMAS POR MEDIO DE COMPUTADORAS
Para resolver un problema utilizando sistemas de cómputo, debe seguirse una
serie de pasos que permiten avanzar por etapas bien definidas hacia la
solución del problema. Estas etapas son las siguientes:
- Identificación y definición del problema.
- Análisis de los datos.
- Diseño de la solución (diseño del algoritmo).
- Codificación.
- Prueba y depuración.
- Documentación.
- Mantenimiento.
Ejemplo:
7
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
8
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Símbolo de conector, el
Sirve para simbolizar cual sirve para enlazar
una decisión múltiple dos partes cualesquiera
de un diagrama de flujo a
través de un conector en
la salida y entrada.
Líneas conectoras y
líneas indicadoras de Llamadas a
dirección o línea de flujo subprogramas (funciones
de acuerdo al sentido y procedimientos)
de la flecha
2.4 CODIFICACIÓN.
Programa Fuente
9
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Programa Ejecutable
2.6 DOCUMENTACIÓN.
2.7 MANTENIMIENTO.
10
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
UNIDAD III
INTRODUCCIÓN A LA PROGRAMACIÓN
ESTRUCTURADA APLICADA A C++
3.1 ELEMENTOS BÁSICOS DE UN PROGRAMA.
En esta sección se incluye todas las unidades del C++ que depende
del tipo de programa que se está haciendo; entre las unidades más
11
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
float a,b,mayor;
int d,e;
12
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Los datos son los elementos de información con los que trabaja un
programa. Es necesario tener en cuenta los tipos de datos de las
variables que se declaran para las operaciones que se realicen
dentro del programa. La clasificación de los tipos de datos en C++
se desarrollan a continuación:
RANGO TAMAÑO
TIPO
desde … hasta (byte)
int -2 147 483 648 a 2 147 483 647 4
unsigned int 0 a 4 294 967 295 4
short int -32 768 a 32 767 2
unsigned short int 0 a 65 535 2
13
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
RANGO TAMAÑO
TIPO
desde … hasta (byte)
38 38
Float -3,40282 x 10 a 3,40282 x 10 4
308 308
Double -1,797 x 10 a 1,797 x 10 8
14
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
15
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
main()
{
x=20;y=6;
z1=x+y;
cout<<"la suma es: "<<z1<<endl; //imprime 26
z1=x-y;
cout<<"la resta es: "<<z1<<endl; //imprime 14
z1=x*y;
cout<<"la multiplicación es: "<<z1<<endl; //imprime 120
z1=x/y;
z2=x/y;
z3=x/6.0;
cout<<"la división es: "<<z1<<endl; //imprime 3
cout<<"la división es: "<<z2<<endl; //imprime 3
cout<<"la división es: "<<z3<<endl; //imprime 3.33333
z1=x%y;
cout<<"el residuo es: "<<z1<<endl; //imprime 2
}
16
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
main()
{
z=15; //ingreso de datos a través del mismo programa
cout<<"ingrese el valor de x: ";
cin>>x; //lectura de datos a través del teclado
cout<<"ingrese el valor de y: ";
cin>>y;
s=x+y+z+w;
m=-5*x+3*x/(y+(2-z)/(2*w-z))+12;
17
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
− b ± b 2 − 4ac
x=
2a
Se debe entender que una estructura secuencial puede tener una sola
instrucción o puede tener un grupo de instrucciones delimitados por un inicio
y un fin. A continuación se pueden observar el pseudocódigo, el diagrama
de flujo y el diagrama N-S (Nassi-Schneiderman) de una estructura
secuencial.
18
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Inicio Incio
Inicio
Intrucción 1. Instrucción 1
Intrucción 2.
Intrucción 3. Instrucción 1 Instrucción 2
.
. Instrucción 3
. Instrucción 2
Intrucción N :
Fin .
Instrucción 3
Instrucción N
Fin
Instrucción N
Fin
a) Operadores de relación.
19
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
b) Operadores lógicos.
Operador
Significado
Lógico en C++
&& Y (conjunción)
|| O (disyunción)
! No (Negación)
20
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Si (condición) Entonces
Inicio
Instrucción 1. F Condición
Instrucción 2. Condición
Instrucción 3. AcciónV V F
:
. V Instrucción 1.
Instrucción N. Instrucción 2.
Fin AcciónV :
.
Instrucción N.
if (condición) sentencia1;
if (condición)
{
instrucción1;
instrucción2;
instrucción3; AcciónV
M
instrucciónN;
}
21
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Si (condición) Entonces
Inicio
Instrucción 1. V F Condición
Instrucción 2. Condición
Instrucción 3. AcciónV V F
:
. AcciónV AciónF Instrucción 1. Instrucción 1.
Instrucción N. Instrucción 2. Instrucción 2.
Fin : :
sino . .
Inicio Instrucción N. Instrucción N
Instrucción 1.
Instrucción 2.
Instrucción 3. AcciónF
:
.
Instrucción N.
Fin
if (condición)
{
instrucción1;
instrucción2;
instrucción3; AcciónV
M
instrucciónN;
}
else
{
instrucción1;
instrucción2;
instrucción3; AcciónF
M
instrucciónN;
};
22
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
- Diagrama de Flujo.
Valor 1 Valor N V
Expresión Expresión=V1 Acción1
Valor 2 Valor 3 F
V
Acción 1 Acción 2 Acción 3 ... Acción N Expresión=V2 Acción2
V
Expresión=V3 Acción3
Acción Otro
- Diagrama N-S.
Expresión
Expresión
V1 V2 V3 V4 ... VN Otro
V1 V2 V3 V4 ... VN Otro
A1 A2 A3 A4 ... AN AO
A1 A2 A3 A4 ... AN AO
- Pseudocódigo.
23
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
switch (variable)
{ case valor1:
instrucción1;
instrucción2;
instrucción3; Grupo1
M
instrucciónN;
break;
case valor2:
instrucción1;
instrucción2;
instrucción3; Grupo2
M
instrucciónN;
break;
M
default:
instrucción1;
instrucción2;
instrucción3; GrupoD
M
instrucciónN;
};
a) Contador.
Operador en
Operación Ejemplo Resultado
C++
++ Incremento x++ x=21
-- Decremento x-- x=19
24
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
b) Acumulador.
Mientras (condición)
Inicio
Instrucción 1. F Mientras (Condición)
Instrucción 2. Condición
Instrucción 3. AcciónV
: Instrucción 1
. V
Instrucción N. Instrucción 2.
Fin AcciónV .
:
Instrucción N.
25
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Repetir
Instrucción 1.
Instrucción 2. Repetir Instrucción 1
Instrucción 3. AcciónV AcciónV
: Instrucción 2
.
Instrucción N. :
Hasta (condición) V
Condición Instrucción N
F Hasta (condición)
do
{ instrucción1;
instrucción2;
instrucción3;
M
instrucciónN;
} while (condición);
Esta estructura se inicia con un “contador” que tiene un valor inicial (Vi) y
un valor final (Vf) y que en cada iteración se incremente generalmente de
uno en uno; aunque dependiendo del lenguaje de programación se puede
incrementar de dos en dos o de tres en tres, etc.; entonces la cantidad de
veces que es ejecuta el bucle será mientras que el valor actual del
“contador” sea menor o igual al valor final (Vf). En esta estructura el
26
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Instrucción N
for (variable=Vi;variable<=Vf;variable=variable+N);
{ instrucción1;
instrucción2;
instrucción3;
M
instrucciónN;
};
unsigned short int n,i; unsigned short int n,i; unsigned short int n,i;
int suma,dato; int suma,dato; int suma,dato;
27
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
UNIDAD IV
SUBPROGRAMAS
FUNCIONES Y PROCEDIMIENTOS
Una estrategia realmente útil para la solución de problemas complicados es
dividirlos en subproblemas más simples y estos a su vez en subproblemas más
simples aún; hasta conseguir que la solución total del problema sea la unión de
todas las soluciones de los problemas pequeños; estos subproblemas se
conocen como módulos. Esta forma de programación se le conoce como
diseño descendente y la estrategia de programación que se utiliza se llama
“divide y vencerás”. En los lenguajes de programación (cualquiera que fuera)
los módulos se conocen como subprogramas (funciones y procedimientos).
int a,b;
float c,d;
main()
{
28
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
float a,b;
main()
{
cout<<"Ingrese un numero real entre -1 y +1: ";
cin>>a;
b=asin(a);
cout<<"El arco seno de "<<a<<" es "<<b<<" radianes"<<endl;
b=acos(a);
cout<<"El arco coseno de "<<a<<" es "<<b<<" radianes"<<endl;
}
float a,b;
main()
{
cout<<"Ingrese un numero real: ";
cin>>a;
b=atan(a);
cout<<"El arco tangente de "<<a<<" es "<<b<<" radianes"<<endl;
}
float a,b;
main()
{
cout<<"Ingrese un numero real: ";
cin>>a;
b=ceil(a);
cout<<"El mayor entero de "<<a<<" es "<<b<<endl;
}
29
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
#include <math.h>
#include <iostream.h>
float a,b;
main()
{
cout<<"Ingrese un numero en radianes: ";
cin>>a;
b=sin(a);
cout<<"El seno de "<<a<<" es "<<b<<endl;
b=cos(a);
cout<<"El coseno de "<<a<<" es "<<b<<endl;
}
#include <math.h>
#include <iostream.h>
float a,b;
main()
{
cout<<"Ingrese un numero real: ";
cin>>a;
b=exp(a);
cout<<"El resultado es "<<b<<endl;
}
#include <math.h>
#include <iostream.h>
float a,b;
main()
{
cout<<"Ingrese un numero real: ";
cin>>a;
b=log(a);
cout<<"El logaritmo natural de "<<a<<" es "<<b<<endl;
30
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
b=log10(a);
cout<<"El logaritmo en base 10 de "<<a<<" es "<<b<<endl;
}
#include <math.h>
#include <iostream.h>
float a,b,c;
main()
{
cout<<"Ingrese dos numeros reales: ";
cin>>a>>b;
c=pow(a,b);
cout<<a<<" elevado a la "<<b<<" es "<<c<<endl;
}
#include <math.h>
#include <iostream.h>
float a,b;
main()
{
cout<<"Ingrese un numero real positivo: ";
cin>>a;
b=sqrt(a);
cout<<"La raiz cuadrada de "<<a<<" es "<<b<<endl;
}
#include <math.h>
#include <iostream.h>
float a,b;
main()
{
cout<<"Ingrese un numero en radianes: ";
cin>>a;
b=tan(a);
cout<<"La tangente de "<<a<<" es "<<b<<endl;
}
31
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
4.2.1 Funciones.
Datos de Salida:
- mayor: Representa al mayor de los dos números ingresados (tipo
real).
PROGRAMA PRINCIPAL
ALGORITMO DIAGRAMA DE FLUJO DIAGRAMA N-S
Inicio
Incio
Inicio
Leer a,b.
Leer: a,b
mayor=maximo(a,b) *Uso de la
función Leer: a,b
mayor=maximo(a,b)
maximo.
Escribir: mayor
Escribir: mayor
Fin
mayor=maximo(a,b)
Fin
Escribir:
mayor
Fin
32
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Dato de Retorno.
- max: Retorna con el mayor valor de los dos números ingresados.
Tipo real.
FUNCIÓN maximo
ALGORITMO DIAGRAMA DE FLUJO DIAGRAMA N-S
Retornar: max
main()
{
float a,b,mayor;
cout<<"Ingrese dos numeros: ";
cin>>a>>b;
mayor=maximo(a,b); // forma de usar la función “maximo”.
cout<<"El mayor es: "<<mayor<<endl;
}
33
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
4.2.2 Procedimientos.
Datos de Salida:
- mayor: Representa al mayor de los dos números ingresados (tipo
real).
PROGRAMA PRINCIPAL
ALGORITMO DIAGRAMA DE FLUJO DIAGRAMA N-S
Inicio
Incio
Inicio
Leer a,b.
Leer: a,b
maximop(a,b,mayor) *Uso del proced.
maximop. Leer: a,b
maximop(a,b,mayor)
Escribir: mayor
Fin
Escribir: mayor
maximop(a,b,mayor)
Fin
Escribir:
mayor
Fin
34
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
PROCEDIMIENTO maximop
ALGORITMO DIAGRAMA DE FLUJO DIAGRAMA N-S
Retornar
main()
{
float a,b,mayor;
cout<<"Ingrese dos numeros: ";
cin>>a>>b;
maximop(a,b,mayor); // forma de llamar al procedimiento "máximop".
cout<<"El mayor es: "<<mayor<<endl;
}
35
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Por otro lado una variable local es aquella que se declara dentro del
programa principal o dentro del subprograma y sólo se puede usar en
la parte donde ha sido declarada y que se borra de memoria en el
momento que termina el programa o subprograma.
a) Por valor.
36
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
b) Por referencia.
37
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
UNIDAD V
ARREGLOS EN C++
Hasta el momento sólo se han tratado programas con tipos de datos simples
predefinidos en C++ (enteros y reales), sin embargo C++ proporciona al
programador la posibilidad de crear unos tipos de datos estructurados. Un tipo
de dato estructurado es aquel que se compone de más de un dato simple como
es el caso de los arreglos, los registros y archivos; estos dos últimos lo
trataremos más adelante; por ahora nos concentraremos en el estudio de los
arreglos.
38
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
void main()
{
int a[100]; //se declara un arreglo unidimensional de 100 elementos
int n,sum,i;
cout<<"ingrese el número de datos: ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"dato "<<i<<" : ";
cin>>a[i];
};
sum=0;
for(i=1;i<=n;i++)
sum=sum+a[i];
cout<<"suma="<<sum<<endl;
}
main()
{
int a[50],n,s;
cout<<"ingrese el número de datos: ";
cin>>n;
leer(a,n);
s=suma(a,n);
cout<<"suma="<<s<<endl;
}
39
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
3 − 3 5 0 − 1
A = 5 2 1 5 0
− 1 2 3 4 1
void main()
{
int A[100][100],B[100][100],C[100][100];
int m,n,i,j;
cout<<"Ingrese número de filas: ";
cin>>m;
cout<<"Ingrese número de columnas: ";
cin>>n;
cout<<endl<<"Ingrese datos de la matriz A:"<<endl;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
{
cout<<"Ingrese elemento ("<<i<<";"<<j<<"): ";
cin>>A[i][j];
};
cout<<endl<<"Ingrese datos de la matriz B:"<<endl;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
{
cout<<"Ingrese elemento ("<<i<<";"<<j<<"): ";
cin>>B[i][j];
};
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
C[i][j]=A[i][j]+B[i][j]; //Realiza de la suma elemento por elemento
40
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
3 − 2 − 4
A=
1 0 2
2 1 − 2
B=
2 − 2 0
La suma resultante debe salir:
5 − 1 − 6
C=
3 − 2 2
Pero el programa anterior sería mejor si elaboramos un procedimiento
“leer_matriz” y un procedimiento “suma_matriz” y otro procedimiento
“imprimir_matriz”; entonces la codificación en C++ sería de la siguiente
manera:
// Suma de dos matrices
#include <iostream.h>
void main()
{
int A[100][100],B[100][100],C[100][100];
int m,n,i,j;
cout<<"Ingrese número de filas: ";
cin>>m;
cout<<"Ingrese número de columnas: ";
cin>>n;
cout<<endl<<"Ingrese datos de la matriz A:"<<endl;
leer_matriz(A,m,n);
suma_matriz(A,B,C,m,n);
41
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
42
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
UNIDAD VI
MANEJO DE CADENAS EN C++
Una cadena de caracteres (string) en C++ es una secuencia de caracteres que
termina con el caracter nulo (‘\0’), este carácter nulo indica el fin de una cadena
y ocurre cuando se presiona la tecla ENTER, además se debe tener en cuenta
que dicho caracter nulo también ocupa un espacio por lo que siempre se debe
añadir una unidad en la longitud de la cadena normal
void main()
{
char NOMB[31],DIREC[41];
int EDAD;
float PESO;
43
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
cout<<endl<<endl;
cout<<NOMB<<" "<<DIREC<<" "<<EDAD<<" "<<PESO<<endl;
}
Si nos ponemos a analizar un poco podríamos decir que una cadena es una
estructura del tipo array de caracteres
Caracteres L e o C u r i \0
Posición 0 1 2 3 4 5 6 7 8
Cada posición se indica con un subíndice, empezando del cero; por ejemplo
el caracter “u” se representaría por A[5]; en el siguiente ejemplo se muestra
una aplicación de este caso, en el cual se ingresa un cadena cualquiera de
10 caracteres (incluyendo el caracter nulo sería 11) y se imprime en orden
inverso.
// uso de array de caracteres
#include <iostream.h>
void main()
{
char CAD[11];
int i;
cout<<"Ingrese una cadena: ";
cin.getline(CAD,11);
for (i=0;i<10;i++)
cout<<CAD[i]<<" ";
cout<<endl;
for (i=9;i>=0;i--)
cout<<CAD[i]<<" ";
cout<<endl;
}
Para realizar operaciones con cadenas hay que usar funciones del tipo
cadena, estas se encuentran dentro del archivo de cabecera string.h (como
strcpy, strcat y strlen) y algunos dentro de stdlib.h como es el caso de la
función atof por lo que para usar dichas funciones y/o procedimientos es
necesario declararlo en la cabecera del programa con include. A
continuación se desarrollará las principales funciones y procedimientos del
tratamiento de cadenas en C++.
44
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
void main()
{
char nombre[30],direccion[40];
strcpy(nombre,"Rubén Galeas Arana"); // equivale a nombre = ”Rubén Galeas Arana"
strcpy(direccion,"Calle Real 356 Huancayo");
cout<<nombre<<endl;
cout<<direccion<<endl<<endl;
}
void main()
{
char nombre[30];
strcpy(nombre,"Rubén "); // equivale a nombre = “Rubén”
strcat(nombre," Galeas "); // equivale a nombre=nombre+” Galeas”
strcat(nombre," Arana"); // equivale a nombre=nombre+” Arana”
cout<<nombre<<endl<<endl; // imprime Rubén Galeas Arana
}
void main()
{
char cad[31];
strcpy(cad,"Tecnofuturo la mejor");
int L;
L=strlen(cad);
cout<<cad<<" tiene "<<L<<" caracteres"<<endl;
}
void main()
{
char cad[31],C[15];
int A;
float B;
double D;
strcpy(cad,"12.45e152");
strcpy(C,"-244.545adfe45");
A=atof(cad);
cout<<A<<endl; //imprime A=0
A=atof(C);
cout<<A<<endl; //imprime A=-244
B=atof(cad);
cout<<B<<endl; //imprime B=1.#INF porque B es float
45
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
B=atof(C);
cout<<B<<endl; //imprime B=-244.545
D=atof(cad);
cout<<D<<endl; //imprime D=1.245e+153 porque B es double
D=atof(C);
cout<<D<<endl; //imprime D=-244.545
}
void main()
{
char NOMB[31];
char A;
int i,L,N;
N=0;
L=strlen(NOMB);
for (i=0;i<L;i++)
if (NOMB[i]==A)
N=N+1;
cout<<"La letra "<<A<<" se repite "<<N<<" veces"<<endl;
}
void main()
{
char NOMB[31];
char A;
int N;
N=cadena_veces(NOMB,A);
cout<<"La letra "<<A<<" se repite "<<N<<" veces"<<endl;
}
46
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
void main()
{
char NOMB[31];
izquierda(NOMB,5);
cout<<"La cadena cortada es "<<NOMB<<endl;
}
void main()
{
char NOMB[10][31]; //10 cadenas de 31 caracteres cada uno
int i;
for (i=1;i<=3;i++)
{
cout<<"Nombre"<<i<<": ";
cin.getline(NOMB[i],31);
};
for (i=1;i<=3;i++)
cout<<NOMB[i]<<endl;
}
47
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
UNIDAD VII
REGISTROS EN C++
En los datos del tipo arreglo (array) todos sus elementos pertenecen al mismo
tipo de dato, en cambio una variable del tipo registro es una colección de datos
que se denominan campos y que cada campo puede almacenar el mismo tipo
de dato o diferentes tipos de datos.
Una variable tipo registro está compuesto por un nombre común y varios
campos. Cada campo tiene un nombre diferente llamado identificador de
campo. Cada lenguaje de programación tiene una forma de declarar una
variable tipo registro. Específicamente en el Turbo C se declara de la
siguiente manera:
struct ALUMNO{
char nombre[30];
int edad;
float talla;
};
struct ALUMNO
{
char nombre[30];
int edad;
float talla;
};
48
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
void main()
{
struct ALUMNO alum;
cout<<"Ingrese nombre: ";
cin.getline(alum.nombre,30);
cout<<"Ingrese edad: ";
cin>>alum.edad;
cout<<"Ingrese talla: ";
cin>>alum.talla;
cout<<endl<<endl;
cout<<"Nombre= "<<alum.nombre<<endl;
cout<<"Edad = "<<alum.edad<<endl;
cout<<"Talla = "<<alum.talla<<endl;
}
//uso de registros
#include <iostream.h>
struct ALUMNO
{
char nombre[30];
int edad;
float talla;
};
void main()
{
struct ALUMNO alum;
leer(alum);
cout<<endl<<endl;
imprimir(alum);
}
49
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
//uso de registros
#include <iostream.h>
struct ALUMNO
{
char nombre[30];
int edad;
float talla;
};
void leer();
void imprimir();
void main()
{
leer();
cout<<endl<<endl;
imprimir();
}
void leer()
{
cout<<"Ingrese nombre: ";
cin.getline(alum.nombre,30);
cout<<"Ingrese edad: ";
cin>>alum.edad;
cout<<"Ingrese talla: ";
cin>>alum.talla;
}
void imprimir()
{
cout<<"Nombre= "<<alum.nombre<<endl;
cout<<"Edad = "<<alum.edad<<endl;
cout<<"Talla = "<<alum.talla<<endl;
}
#include <iostream.h>
#include <iomanip.h>
#include <string.h>
struct ALUMNO
{
char nombre[30];
int N1;
int N2;
};
50
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
void leer();
void escribir();
void ordenar();
float promedioN1();
float promedioN2();
int compararcad(char cad1[],char cad2[]);
void main()
{
float promN1,promN2;
void leer()
{
int i;
for(i=1;i<=N;i++)
{
cout<<endl<<"Ingrese datos del alumno "<<i<<": "<<endl;
cout<<"Nombre: ";
cin>>X[i].nombre;
cout<<"Nota de N1: ";
cin>>X[i].N1;
cout<<"Nota de N2: ";
cin>>X[i].N2;
};
}
void escribir()
{
int i;
cout<<endl<<setw(30)<<"Nombre"<<setw(10)<<"N1"<<setw(10)<<"N2"<<endl;
cout<<"------------------------------------------------------"<<endl;
for(i=1;i<=N;i++)
{
cout<<setw(30)<<X[i].nombre;
cout<<setw(10)<<X[i].N1;
cout<<setw(10)<<X[i].N2<<endl;
};
cout<<"------------------------------------------------------"<<endl;
}
void ordenar()
{
int v,i,j,auxE;
char auxN[30];
for(i=1;i<=N-1;i++)
for(j=1;j<=N-1;j++)
{
v=compararcad(X[j+1].nombre,X[j].nombre);
if(v==1)
{
strcpy(auxN,X[j].nombre); //Intercambia los nombres
strcpy(X[j].nombre,X[j+1].nombre);
strcpy(X[j+1].nombre,auxN);
auxE=X[j].N1; //Intercamcia notas de N1.
X[j].N1=X[j+1].N1;
X[j+1].N1=auxE;
auxE=X[j].N2; //Intercamcia notas de N2.
X[j].N2=X[j+1].N2;
X[j+1].N2=auxE;
};
};
}
51
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
L1=strlen(cad1);
L2=strlen(cad2);
if(L1<L2)
L=L1;
else
L=L2;
i=0;
while(cad1[i]==cad2[i])
{
i=i+1;
if(i>L)
break;
};
if(cad1[i]<cad2[i])
valor=1;
else
valor=0;
return valor;
}
float promedioN1()
{
int i;
float prom;
prom=0;
for(i=1;i<=N;i++)
prom=prom+1.0*X[i].N1/N;
return prom;
}
float promedioN2()
{
int i;
float prom;
prom=0;
for(i=1;i<=N;i++)
prom=prom+1.0*X[i].N2/N;
return prom;
}
Nombres TA CL
Calderon 15 10
Miranda 12 12
Espinoza 10 12
Limache 08 09
Munive 15 10
Nombres TA CL
Calderon 15 10
Espinoza 10 12
Limache 08 09
Miranda 12 12
Munive 15 10
Promedio 12 10.6
52
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
UNIDAD VIII
ARCHIVOS EN C++
Hasta el momento en todos los programas que se han realizado, cuando se
ingresan los datos, estos sólo se almacenan en variables de memoria y cuando
se apaga la computadora dichos datos se pierden; muchas veces los datos que
se ingresan y que se calculan son importantes y necesitan ser almacenados en
archivos de datos. En C++ es posible guardar datos en dispositivos de
almacenamiento (discos flexibles, discos duros, CDs, etc.) en forma
permanente para poder utilizarlos en cualquier momento cuando sea necesario.
1º) Declarar variable del tipo archivo. Esta declaración se realiza con FILE
que se encuentra en el archivo de cabecera <stdio.h>.
#include <stdio.h>
53
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
Nota.
- Para especificar que un archivo esta siendo abierto o creado en el
modo texto añadir “t” a la cadena (rt, w+t, etc.), aunque por defecto si
no se especifica nada lo tomo como archivo de texto.
#include <iostream.h>
#include <iomanip.h>
#include <stdio.h>
struct ALUMNO
{
char nombre[30];
int N1;
int N2;
float prom;
};
void leer_datos();
void leer_archivo();
void annadir_datos();
54
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
void leer_datos()
{
char OP;
N=0;
do
{
N=N+1;
cout<<endl<<"Ingrese datos del alumno"<<endl;
puts("Nombre: ");
gets(X[N].nombre); //para leer con espacios
cout<<"Nota de N1: ";
cin>>X[N].N1;
cout<<"Nota de N2: ";
cin>>X[N].N2;
X[N].prom=1.0*(X[N].N1+X[N].N2)/2;
cout<<endl<<"Desea ingresar mas datos (S/N): ";
cin>>OP;
}while(OP=='S' || OP=='s');
}
void annadir_datos()
{
FILE *F;
int i;
void leer_archivo()
{
FILE *F;
char ch;
F=fopen("C:\\datos.dat","r");
cout<<endl<<"Datos leidos del archivo C:\datos.dat"<<endl;
do
{
ch=fgetc(F); // recupera caracter por caracter
putchar(ch); // imprime caracter por caracter
}while (ch != EOF);
fclose(F);
}
55
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
#include <iomanip.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <process.h>
struct alumno
{
char nombre[20];
int edad;
};
void annadir();
void reporte();
void consulta();
void eliminacion();
void annadir()
{
FILE *F;
alumno r;
char rpta;
F=fopen("c:\\alumnos.dat","ab");
if(F==NULL)
{
cout<<"No se puede abrir "<<endl;
exit(0);
};
do
{
puts("Nombre : ");
gets(r.nombre);
cout<<"Edad : ";
cin>>r.edad;
fwrite(&r,sizeof(r),1,F); //almacena registro en archivo
cout<<endl<<"Desea ingresar más datos (S/N): ";
cin>>rpta;
}while(rpta=='S' || rpta=='s');
fclose(F);
}
void reporte()
{
FILE *F;
alumno r;
F=fopen("c:\\alumnos.dat","rb");
56
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
if(F==NULL)
{
cout<<"No se puede abrir "<<endl;
exit(0);
};
cout<<setw(20)<<"Nombre"<<setw(12)<<"Edad"<<endl;
while(fread(&r,sizeof(r),1,F)!=0)
{
cout<<setw(20)<<r.nombre<<setw(10)<<r.edad<<endl;
};
fclose(F);
}
void consulta()
{
FILE *F;
alumno r;
F=fopen("c:\\alumnos.dat","rb");
char nombrec[20];
if(F==NULL)
{
cout<<"No se puede abrir "<<endl;
exit(0);
};
puts("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"<<endl;
cout<<setw(20)<<r.nombre<<setw(10)<<r.edad<<endl;
break;
};
};
if(strcmp(r.nombre,nombrec))
cout<<"No existe ese nombre "<<endl;
fclose(F);
}
void eliminacion()
{
FILE *F,*f1;
alumno r;
char nombrec[20],resp;
int sw=0;
F=fopen("c:\\alumnos.dat","rb");
if(F==NULL)
{
cout<<"No se puede abrir "<<endl;
exit(0);
};
f1=fopen("c:\\tmpfich.dat","wb");
puts("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"<<endl;
cout<<setw(20)<<r.nombre<<setw(10)<<r.edad<<endl;
cout<<"Eliminar ? (S/N): ";
cin>>resp;
sw=1;
if(resp=='S' || resp=='s')
cout<<"Eliminado"<<endl;
else
fwrite(&r,sizeof(r),1,f1);
}
else
fwrite(&r,sizeof(r),1,f1);
};
if (sw==0)
cout<<"No existe ese nombre "<<endl;
fclose(F);
57
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
fclose(f1);
remove("c:\\alumnos.dat");
rename("c:\\tmpfich.dat","c:\\alumnos.dat");
}
#include <iomanip.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <process.h>
struct agenda
{
char codigo[6];
char nombre[30];
int edad;
char fono[7];
};
void annadir();
void reporte();
void consulta();
void eliminacion();
void annadir()
{
FILE *F;
agenda r;
char rpta;
F=fopen("c:\\agenda.dat","ab");
if(F==NULL)
{
cout<<"No se puede abrir "<<endl;
exit(0);
};
do
{
puts("Codigo : ");
gets(r.codigo);
puts("Nombre : ");
gets(r.nombre);
cout<<"Edad : ";
cin>>r.edad;
puts("Telefono : ");
58
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
gets(r.fono);
fwrite(&r,sizeof(r),1,F); //almacena registro en archivo
cout<<endl<<"Desea ingresar mas datos (S/N): ";
cin>>rpta;
}while(rpta=='S' || rpta=='s');
fclose(F);
}
void reporte()
{
FILE *F;
agenda r;
F=fopen("c:\\agenda.dat","rb");
if(F==NULL)
{
cout<<"No se puede abrir "<<endl;
exit(0);
};
cout<<setw(8)<<"Codigo"<<setw(30)<<"Nombre"<<setw(10)<<"Edad"<<setw(10)<<"Telefono"<<en
dl;
while(fread(&r,sizeof(r),1,F)!=0)
cout<<setw(8)<<r.codigo<<setw(30)<<r.nombre<<setw(10)<<r.edad<<setw(10)<<r.fono<<endl;
fclose(F);
}
void consulta()
{
FILE *F;
agenda r;
F=fopen("c:\\agenda.dat","rb");
char codigoc[6];
if(F==NULL)
{
cout<<"No se puede abrir "<<endl;
exit(0);
};
puts("Ingrese codigo a consultar : ");
gets(codigoc);
while(fread(&r,sizeof(r),1,F)!=0)
{
if(!strcmp(r.codigo,codigoc))
{
cout<<setw(30)<<"Nombre"<<setw(10)<<"Telefono"<<endl;
cout<<setw(30)<<r.nombre<<setw(10)<<r.fono<<endl;
break;
};
};
if(strcmp(r.codigo,codigoc))
cout<<"No existe ese codigo "<<endl;
fclose(F);
}
void eliminacion()
{
FILE *F,*f1;
agenda r;
char codigoc[6],resp;
int sw=0;
F=fopen("c:\\agenda.dat","rb");
if(F==NULL)
{
cout<<"No se puede abrir "<<endl;
exit(0);
};
f1=fopen("c:\\tmpfich.dat","wb");
puts("Codigo a eliminar: ");
gets(codigoc);
while(fread(&r,sizeof(r),1,F)!=0)
{
if(!strcmp(r.codigo,codigoc))
{
cout<<setw(20)<<"Nombre"<<setw(10)<<"Telefono"<<endl;
cout<<setw(20)<<r.nombre<<setw(10)<<r.fono<<endl;
cout<<"Eliminar ? (S/N): ";
59
UNCP – FIEE -Programación I Rubén Galeas Arana/Aquiles Aquino Rivera
cin>>resp;
sw=1;
if(resp=='S' || resp=='s')
cout<<"Eliminado"<<endl;
else
fwrite(&r,sizeof(r),1,f1);
}
else
fwrite(&r,sizeof(r),1,f1);
};
if (sw==0)
cout<<"No existe ese nombre "<<endl;
fclose(F);
fclose(f1);
remove("c:\\agenda.dat");
rename("c:\\tmpfich.dat","c:\\agenda.dat");
}
60