CICLO 2014-2
PROGRAMACION DIGITAL
LABORATORIO N 1
CICLO 2014-2
WILFREDO CUPE ROMN
CICLO 2014-2
CICLO 2014-2
Laboratorio N1
Objetivos
1. Utilizar el PSeInt para la creacin y ejecucin de
Diagramas de Flujo.
2. Conocer las facilidades del PSeInt para la
Ejecucin Paso a Paso y Prueba de Escritorio.
CICLO 2014-2
HERRAMIENTAS
AREA DE
TRABAJO
LINEA DE
ESTADO
COMANDOS
AREA DE
TRABAJO
COMANDOS
CICLO 2014-2
CICLO 2014-2
Operadores y Funciones
CICLO 2014-2
CICLO 2014-2
Ventana de Ejecucin
CICLO 2014-2
CICLO 2014-2
10
CICLO 2014-2
11
CICLO 2014-2
12
CICLO 2014-2
13
Prueba de Escritorio
Permite configurar una tabla con un conjunto de
variables o expresiones para que sean evaluadas en
cada paso de la ejecucin paso a paso y registradas
en dicha tabla automticamente para analizar luego la
evolucin de los datos y el diagrama de flujo.
Prueba de Escritorio
CICLO 2014-2
14
CICLO 2014-2
15
Ejercicios
1. Se leen las coordenadas de un tringulo y un
CICLO 2014-2
16
Ejercicios
3. Telefnica del Per ha diseado los siguientes
Min. Libres
% Dscto.
300
0.10
0%
200
0.08
5%
100
0.05
10%
CICLO 2014-2
17
PROGRAMACION DIGITAL
LABORATORIO N 2
CICLO 2014-2
WILFREDO CUPE ROMN
CICLO 2014-2
18
Laboratorio N2
Objetivos
1. Utilizar el DEV C++ para Codificar, Compilar y
Ejecutar un programa.
2. Familiarizarse con los elementos del lenguaje
AREA DE
TRABAJO
LINEA DE
ESTADO
CICLO 2014-2
19
CICLO 2014-2
20
CICLO 2014-2
21
Compilar
Compilar
Compila
Compila el
el archivo
archivo actual
actual
Ejecutar
Ejecutar
Parmetros
Parmetros
Compilar
Compilar yy Ejecutar
Ejecutar
Reconstruir
Reconstruir Todo
Todo
Revisar
Revisar Sintxis
Sintxis
Limpiar
Limpiar Resultados
Resultados
Anlisis
Anlisis de
de Perfil
Perfil
Reiniciar
Reiniciar ejecucin
ejecucin del
del programa
programa
CICLO 2014-2
22
Lenguaje de Programacin C
Conjunto de instrucciones que se ejecutan de
modo secuencial.
El ANSI C es un lenguaje de alto nivel, es decir
est mucho ms cerca del lenguaje natural.
CICLO 2014-2
23
Ejercicio1
Dados n nmeros ingresados por teclado, escribir
un programa que permita determinar el mayor de
los n nmeros.
Entrada
n
num
Salida
mayor
CICLO 2014-2
Inicio
Leer
n,num
mayor num
i2
i n
V
Leer
num
num > mayor
V
mayor num
ii+1
Escribir
mayor
Fin
24
CICLO 2014-2
25
Terminal
Inicio
int main(){
Fin
Comentarios
//Comentario en una lnea
/*Comentario en
varias lneas*/
Declaracin de Variables
tipo variable;
char caracter
int
entero
long entero largo
float punto flotante
double doble precisin
CICLO 2014-2
26
Lectura / Escritura
Leer
CICLO 2014-2
27
Especificadores de
formato
%c carcter
%d entero
scanf(formato,&Var) %ld entero largo
;
%f punto flotante
%lf
doble
Escribir
precisin
Var
Var
\n salto de lnea
printf(formato,Var) \t tabulador
;
\ doble comilla
CICLO 2014-2
28
Especificadores de Formato
Especificadores
Adicionales
Efecto
Ancho
.Precisin
+
Justifica a la derecha
Redondea al n de decimales
Justifica a la izquierda
Muestra el signo del valor
Llena con ceros segn el ancho
CICLO 2014-2
29
Operadores
Permiten realizar operaciones en el programa.
+
*
/
%
Aritmticos
Suma
Resta
Multiplicacin
Divisin
Resto divisin entera
Incrementales
++ Incremento en 1
-- Decremento en 1
Lgicos
&& Y
|| O
! Negacin
()
[]
.
Primarios
Llamada funcin
Indice de arreglo
Miembro estructura
CICLO 2014-2
30
Operadores
Permiten realizar operaciones en el programa.
De Asignacin
= Asignacin simple
+= Asignacin suma
-= Asignacin resta
*= Asignacin
multiplicacin
/= Asignacin divisin
%= Asignacin resto
==
<
>
<=
>=
!=
Relacionales
Igual que
Menor que
Mayor que
Menor o igual que
Mayor o igual que
No igual que
CICLO 2014-2
31
Procesos
var expresin
var=expresion;
var=var+delta;
var+=delta;
var var + 1
var=var+1;
var++;
a b Resto 2
a=b%2;
CICLO 2014-2
32
Decisin
V
Condicin
V
Sentencias
if(Condicin){
Sentencias V;
}
else {
Sentencias F;
}
F
Sentencias
CICLO 2014-2
33
~
Condicin
V
Sentencias
while(Condicin)
{
Sentencias;
}
CICLO 2014-2
34
Sentencias
do
Condicin
}
while(Condicin);
{
Sentencias;
CICLO 2014-2
35
Ejemplo de Codificacin
//Mayor de n numeros
#include<stdio.h>
int main() {
int n,num,mayor,i;
printf("Ingrese n: "); scanf("%d",&n);
printf("Ingrese num1: "); scanf("%d",&num);
mayor=num; i=2;
while (i<=n){
printf("Ingrese num%d: ",i);
scanf("%d",&num);
if (num>mayor){
mayor=num;
}
i++;
}
printf("El mayor valor: %d\n",mayor);
Compilacin
Ejecucin
CICLO 2014-2
36
(Execute Compile)
(Execute Run)
CICLO 2014-2
37
Errores de Sintxis
prrintf("\n Hola mundo ");
Errores de Ejecucin
c=15/0;
/*No
sintaxis*/
tiene
Errores Lgicos
Si en vez de la instruccin:
a=b+c;
hubiera escrito:
a=b*c;
errores
de
CICLO 2014-2
38
Ejercicio2
Dados los datos de dos circunferencias:
C1x C1y r1 //coordenadas del centro y radio de
C2x C2y r2 //la circunferencia
Determinar
si
estas
circunferencias
son
TANGENTES, SECANTES o simplemente no hay
contacto entre ellas.
Entradas
C1x, C1y, r1
C2x, C2y, r2
Salida
Tangentes
Secantes
No hay contacto
CICLO 2014-2
39
Exportacin a C
CICLO 2014-2
40
CICLO 2014-2
41
CICLO 2014-2
42
PROGRAMACION DIGITAL
LABORATORIO N 3
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-2
Laboratorio N3
Objetivos
1. Crear un DF con PseInt y exportarlo a C
2. Depurar el programa con el DEV C++
3. Utilizar Funciones Matemticas
4. Utilizar Sentencias de Ejecucin:
Entrada y Salida
Decisiones
Bucles
43
CICLO 2014-2
44
(x1, y1)
(x3, y3)
CICLO 2014-2
45
L.C.
Curva a la derecha
= ngulo de deflexin
R = radio de la curva
T = longitud de la subtangente = R tan(/2)
L.C. = longitud de cuerda
= 2 R Seno(/2)
E = distancia a externa
= R (Sec(/2) - 1)
M = distancia de la ordenada media = R (1 Cos(/2))
Fuente: Manual de Diseo Geomtrico de Carreteras (DG - 2001)
CICLO 2014-2
46
X1
Y1
X2
Y2
XN
YN
CICLO 2014-2
Solucin
Entradas
Salida
N
teta(en grados)
x1,y1
x2,y2
x3,y3
a = (x2-x1, y2-y1)
b = (x3-x2, y3-y2)
teta = arco coseno(a.b/(|a|*|b|)) (en radianes)
47
Ejemplo de ejecucin
CICLO 2014-2
48
CICLO 2014-2
49
Funciones Matemticas
El ANSI C tiene una biblioteca estndar de
funciones matemticas.
Se debe incluir al comienzo del programa el
archivo math.h con la sentencia:
#include<math.h>
CICLO 2014-2
50
Funciones Trigonomtricas
Funcin
Descripcin
double sin(double x)
Seno(x), x en radianes
double cos(double x)
Coseno(x)
double tan(double x)
Tangente(x)
double asin(double x)
arco tangente(x)
Argumento o parmetro
CICLO 2014-2
51
Potencias y Logaritmos
Funcin
Descripcin
double pow(double x,
double y)
double exp(double x)
Devuelve el valor de xy
double log(double x)
logaritmo neperiano de x
Devuelve el valor de ex
Argumento o parmetro
CICLO 2014-2
52
Descripcin
Argumento o parmetro
CICLO 2014-2
53
Funciones hiperblicas
Funcin
Descripcin
double sinh(double x)
seno hiperblico(x), x en
radianes
double cosh(double x) coseno hiperblico(x)
double tanh(double x)
Tipo del valor devuelto
tangente hiperblica(x)
Argumento o parmetro
CICLO 2014-2
54
Bucles
Modifican el flujo secuencial en la ejecucin del
programa.
Se denominan Bucles y permiten repetir la
ejecucin de unos procesos un determinado
nmero de veces o hasta que se cumpla una
condicin de tipo lgico o aritmtico.
CICLO 2014-2
55
Sentencia while
Permite ejecutar repetidamente una sentencia o
bloque de sentencias, mientras se cumpla una
determinada condicin.
condicin
while (condicin) {
sentencia;
}
V
sentencia
CICLO 2014-2
56
Sentencia do while
Anloga a while, con la diferencia de que la
evaluacin de la condicin se realiza al final del
bucle, despus de haber ejecutado al menos una
vez las sentencias.
~
do {
sentencia;
}
while (condicin);
sentencia
V
condicin
F
CICLO 2014-2
57
Ejemplos
1. Calcular el MCD de dos nmeros utilizando el
algoritmo de Euclides.
Por ejemplo para 2366 y 273:
El MCD es 91
CICLO 2014-2
58
Ejemplos
2. Realizar un programa que encuentre el valor de
CICLO 2014-2
59
PROGRAMACION DIGITAL
LABORATORIO N 4
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-2
60
Laboratorio N4
Objetivo
Resolver ejercicios propuestos
Diagrama de Flujo y Codificacin C.
Utilizar PSeInt y DEV C++.
presentando
Ejercicio1
Dado un nmero entero:
Determinar su cantidad de cifras
Invertir el nmero
Indicar si es un nmero capica
Ejemplo:
Nmero = 869968
Nro de cifras = 6
Nmero Invertido= 869968
Si es capica
CICLO 2014-2
61
CICLO 2014-2
62
Ejercicio2
Calcular el determinante de un grupo de matrices
simtricas de orden 3x3. Considerar que la
cantidad de matrices no se conoce de antemano.
El ingreso de datos terminar cuando se ingrese
una matriz que no sea simtrica.
Dar como respuestas:
Cantidad de matrices
El mayor determinante
El menor determinante
Ejercicio3
CICLO 2014-2
63
CICLO 2014-2
64
Ejercicio4
Se leen los vrtices de una poligonal abierta con
abscisas crecientes, considerando como primer
vrtice al (0,0), adems las ordenadas de cada
dos vrtices consecutivos deben ser de signo
opuestos. La lectura de los vrtices termina
cuando un vrtice cumple con |y|<tol, donde tol es
la tolerancia leda por teclado.
Se pide determinar el rea total de los tringulos
que se forman con el eje X.
CICLO 2014-2
65
Ejemplo
Tolerancia = 0.5
Area = S1+S2+S3+S4+S5+S6
x2,y2
Entrada
Salida
tol
Area
x2,y2
x3,y3
0,0
x3,y3
xi
xi
x3,y3
x2,y2
xj
CICLO 2014-2
66
PROGRAMACION DIGITAL
LABORATORIO N 5
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-2
67
Laboratorio N5
Objetivos
Conocer la definicin de archivos tipo texto
Utilizar archivos tipo texto para la entrada y salida
Utilizar el DEV C++ para la codificacin
CICLO 2014-2
68
Archivo de
Datos
ENTRADA
Programa
Archivo de
Resultados
SALIDA
Tabla ASCII
Fuente: http://www.elcodigoascii.com.ar/
CICLO 2014-2
69
CICLO 2014-2
70
2. Abrir el Archivo
var_archi=fopen(archivo, modo);
Modo
Apertura
Descripcin
r
w
a
CICLO 2014-2
71
4. Cerrar el Archivo
fclose(var_archi);
_fcloseall();
CICLO 2014-2
72
CICLO 2014-2
73
!feof(var_archi)
V
sentencias
~
while(!feof(var_archi)){
//Sentencias de Lectura
CICLO 2014-2
74
~
sentencias
!feof(var_archi)
V
F
do {
//Sentencias de Lectura
} while(!feof(var_archi));
CICLO 2014-2
75
Ejercicio1
Un archivo contiene las coordenadas (x, y) de los
puntos de una poligonal cerrada. Determinar si es
una poligonal cncava o convexa. No se conoce
la cantidad de puntos.
Poligonal.txt
10,13
11,6
20,12
17,21
9,23
5,16
CICLO 2014-2
76
Ejercicio2
Se tiene registrado las marcaciones de un
empleado (fecha, hora de entrada y de salida) en
el archivo Marca.txt, se desea guardar en otro
archivo las horas trabajadas en el mes.
Marca.txt
2014-04-03
2014-04-03
2014-04-04
2014-04-04
2014-04-05
2014-04-05
Horastrab.txt
09:58:49
21:04:45
10:19:53
18:31:02
10:26:15
18:30:53
2014-04-03
2014-04-04
2014-04-05
11:05:56
8:11:09
8:04:38
CICLO 2014-2
77
Ejercicio3
Un archivo contiene los promedios de los
alumnos FIC. Se pide determinar la cantidad de
aprobados, desaprobados y dado un cdigo
ingresado por teclado mostrar en pantalla su
promedio.
Promedios20132.txt
codigo letra promedio
20090205 K 11.553
20112053 C 11.559
20054511 H 08.506
CICLO 2014-2
78
Ejercicio4
Escribir un programa que escriba en un archivo un
tringulo como el de la figura. El dato del programa
ser la altura del tringulo.
h= 5
Triangulo.txt
*
* *
*
*
*
*********
CICLO 2014-2
79
PROGRAMACION DIGITAL
LABORATORIO N 6
CICLO 2014-1
WILFREDO CUPE ROMN
Laboratorio N6
Objetivo
1. Bucle for
2. Arreglo Lineal
3. Arreglo Bidimensional
4. Ejercicios
CICLO 2014-2
80
CICLO 2014-2
81
Sentencia for
Permite repetir una sentencia o bloque de
sentencias, mientras se cumple una determinada
condicin.
for(inicial; condicin; incremento){
sentencia;
~
}
inicial; condicin; incremento
sentencia
CICLO 2014-2
82
Variable Subindicada
Es una variable que almacena un conjunto de valores del
mismo tipo de dato.
Cada valor del conjunto se identifica con un subndice
entero (0, 1, 2,).
Tambin se le denomina arreglo.
Tipos:
Arreglo Lineal: un solo subndice (vector)*
Arreglo Bidimensional: dos subndices (matriz)
Arreglo Multidimensional: tres o mas subndices
* Una cadena de caracteres equivale a un arreglo lineal de caracteres.
CICLO 2014-2
83
Arreglo Lineal
Tiene un solo subndice.
Declaracin: tipo nombre_arreglo[N elementos];
Ejemplo:
int x[50];
x[0]
x[1]
x[2]
subndice
50 elementos
x[49]
CICLO 2014-2
84
Arreglo Lineal
Lectura y Escritura:
scanf(formato,&elemento[i-simo]);
printf(formato,elemento[i-simo]);
Ejemplo:
scanf(%d, &x[i]);
~
Leer
xi
~
~
printf(%d, x[i]);
Escribir
xi
CICLO 2014-2
85
Ejercicio1
Dado un arreglo de n elementos, determinar la media
y la desviacin estndar.
Entradas
Salidas
N
xi (i 1..N)
media
desv
Diagrama PSeInt
CICLO 2014-2
86
CICLO 2014-2
87
Codificacin C
/*Obtiene la media y desviacion de n nmeros x*/
#include<stdio.h>
#include<math.h>
int main()
{ int n,i; double s=0,x[100],media,d=0,desv;
printf("Ingrese n:" ); scanf("%d",&n);
for (i=1;i<=n;i++) {
printf("x%d: ",i); scanf("%lf",&x[i]);
s=s+x[i];
}
media=s/n;
for (i=1;i<=n;i++) {
d=d+(x[i]-media)*(x[i]-media);
}
desv=sqrt(d/(n-1));
printf("Media = %8.2lf\nDesviacion = %8.2lf\n",media,desv);
system("pause");
}
CICLO 2014-2
Ejecucin
Ingrese n:6
x1: 4
x2: 1
x3: 11
x4: 13
x5: 2
x6: 7
Media =
6.33
Desviacion =
4.89
Presione una tecla para continuar . . .
88
CICLO 2014-2
89
Ejercicio2
Dado un arreglo de N elementos, determinar cual es
el valor que ms veces se repite y cuntas veces se
presenta.
ones
ci
compara
x1
x2
x3
x4
comparacion
es
Entradas
Salidas
N
xi (i 1..N)
moda
vecesmoda
xN
Diagrama PSeInt
CICLO 2014-2
90
CICLO 2014-2
91
Codificacin C
/*Obtiene la(s) moda(s) de n nmeros enteros x*/
#include<stdio.h>
int main()
{ int i,j,k=0,n,x[100],moda[100],vecesmoda=1,veces;
printf("Ingrese n:" ); scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("x%d: ",i); scanf("%d",&x[i]);
}
for(i=1;i<=n;i++)
{
veces=1;
for(j=i+1;j<=n;j++)
if(x[i]==x[j]) veces++;
if(veces>vecesmoda) {
k=1;
vecesmoda=veces;
CICLO 2014-2
moda[k]=x[i];
}
else
if(veces==vecesmoda) {
k++;
moda[k]=x[i];
}
}
if(k*vecesmoda<n)
for(i=1;i<=k;i++)
printf("La moda %d se repite %d
veces\n",moda[i], vecesmoda);
else printf("No hay moda\n");
system("pause");
}
92
Ejecucin
Ingrese n:13
x1: 9
x2: 8
x3: 7
x4: 1
x5: 4
x6: 9
x7: 5
x8: 4
x9: 1
x10: 5
x11: 9
x12: 1
x13: 5
La moda 9 se repite 3 veces
La moda 1 se repite 3 veces
La moda 5 se repite 3 veces
Presione una tecla para continuar . . .
CICLO 2014-2
93
CICLO 2014-2
94
Ejercicio3
A2
An 2
...
...
Ak
A( m 1) n 1
A( m 1) n 2
k#col+(#fila-1)*n
... An
... A2 n
... ...
... Amn
m* n
B1
Bn 1
B2
Bn 2
...
...
B( m 1) n 1
... Bn
... B2 n
...
...
Bk
B( m 1) n 2 ... Bmn
Entradas
Salidas
m, n
Ai (i 1..m*n)
Bi (i 1..m*n)
Ci (i 1..m*n)
m*n
k#col+(#fila-1)*n
Diagrama PSeInt
CICLO 2014-2
95
CICLO 2014-2
96
Codificacin C
/*suma de matrices A(m*n) y B(m*n) usando
arreglos lineales*/
#include<stdio.h>
int main()
{
int i,j,k,m,n;
float A[100],B[100],C[100];
printf("Nro filas: "); scanf("%d",&m);
printf("Nro columnas: "); scanf("%d",&n);
printf("A:\n");
for(i=1;i<=m*n;i++) scanf("%f",&A[i]);
printf("B:\n");
for(i=1;i<=m*n;i++) scanf("%f",&B[i]);
printf("C:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
k=j+(i-1)*n;
C[k]=A[k]+B[k];
printf("%8.1f",C[k]);
}
printf("\n");
}
system("pause");
}
CICLO 2014-2
97
Ejecucin
Nro
Nro
A:
9 3
8 6
5 2
B:
5 7
9 6
4 9
C:
filas: 3
columnas: 4
8 1
4 0
3 4
2 3
1 1
3 7
14.0
10.0
10.0
4.0
17.0
12.0
5.0
1.0
9.0
11.0
6.0
11.0
Presione una tecla para continuar . . .
CICLO 2014-2
98
CICLO 2014-2
99
PROGRAMACION DIGITAL
LABORATORIO N 6
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-2
100
Laboratorio N6
Objetivo
1. Utilizar arreglos bidimensionales
2. Utilizar funciones y paso de parmetros por
valor
CICLO 2014-2
101
Arreglo Bidimensional
Tiene dos subndices
Declaracin:
tipo
matriz[Nfilas]
[Ncolumnas];
int x[20][30];
Ejemplo:
fila 0
col 0
X0 0
fila 1
X1
fila 19
X19
col 1
X0 1
col 2
X0 2
X1
X1
X19
X19
col 29
X0 29
X1
29
X19
30 columnas
29
20
filas
CICLO 2014-2
102
scanf("%d", &x[i][j]);
fscanf(file,"%d", &x[i][j]);
Leer
xi j
CICLO 2014-2
103
printf("%d", x[i][j]);
fprintf(file,"%d", x[i][j]);
Escribi
r
xi j
CICLO 2014-2
104
Ejercicio
Dadas las matriz A de n*n, se pide convertirla a
triangular superior mediante operaciones elementales
por filas y luego calcular su determinante.
A1 2
... A1 n
A2 2
...
... A2 n
... ...
An 1
An 2
... An n
A11
A2 1
...
Entradas
n
Ai j i, j 1..n
n*n
A11
0
...
A1 2
... A1 n
A2 2
...
... A2 n
... ...
... An n
Salidas
Ai j (triangular superior)
det
n*n
CICLO 2014-2
Solucin
Fila Pivote
A11
A2 1
i=1
j=2
Fila Modificada
...
An 1
A1 2
... A1 n
A2 2
...
... A2 n
... ...
An 2
... An n
n*n
Triangular superior:
Fila Pivote
i 1..n-1
105
CICLO 2014-2
106
CICLO 2014-2
107
CICLO 2014-2
108
CICLO 2014-2
109
Funciones (Subprogramas)
Un programa grande o complejo se puede dividir en
una serie de mdulos ms pequeos y manejables. A
cada mdulo se le llama funcin.
FUNCION
FUNCION 11
PROGRAMA
PROGRAMA
DIVIDIR
DIVIDIR
FUNCION
FUNCION 22
FUNCION
FUNCION 33
CICLO 2014-2
110
z=Valor(x,);
Definicin
Valor(x)
VUELTA
Retorna un valor
(opcional)
Valor
: nombre de la funcin
x,
: parmetros
z
: recibe el valor retornado por la funcin
CICLO 2014-2
111
Valor Retornado
Valor que retorna la funcin con la sentencia return.
Si la funcin no retorna ningn valor, el tipo de la
funcin ser void (vaco)
CICLO 2014-2
112
1. Declaracin
variable = funcion(parmetros
actuales);
}
tipo funcion(parmetros formales){
2. Llamado
3. Definicin
return valor;
}
Retorna valor
CICLO 2014-2
113
3. Definicin
}
Donde:
tipo
funcin
Parmetros
formales
Parmetros actuales
Variable
CICLO 2014-2
114
Ejemplo1
Definir una funcin que dado un ngulo en grados y
minutos, retorne el ngulo en radianes.
Planteamiento
Que parmetros necesita la funcin?
grad por valor (int)
min por valor (int)
La funcin retorna un valor?
Si, retorna el ngulo en radianes.
tipo float
D.F. PSeInt
CICLO 2014-2
115
Codificacin1
CICLO 2014-2
116
CICLO 2014-2
Ejemplo2
Definir una funcin que evale el polinomio:
P(x) = anxn + an-1xn-1 + + a2x2+a1x+a0
Planteamiento
Que parmetros necesita la funcin?
a0..n por referencia (arreglo float)
n
por valor (int)
x
por valor (float)
La funcin retorna un valor?
Si, retorna el polinomio evaluado en x.
tipo float
117
CICLO 2014-2
118
D.F. PSeInt
PSeInt:
an+1xn + anxn-1 + + a2x + a1
C:
anxn + an-1xn-1 + + a1x + a0
CICLO 2014-2
119
Codificacin2
Arreglo como parmetro
N de elementos opcional
CICLO 2014-2
120
Ejemplo3
Definir una funcin que escriba en pantalla la longitud
de una poligonal cerrada de n puntos (x, y)
Planteamiento
Que parmetros necesita la funcin?
n
por valor (int)
x1..n por referencia (arreglo float)
y1..n por referencia (arreglo float)
La funcin retorna un valor?
Si, retorna la longitud de la poligonal.
tipo float
CICLO 2014-2
121
Codificacin3
void longitud_poli(float x[50],float y[50],int
n){
float lon=0; int i;
x[n+1]=x[n]; y[n+1]=y[n];
for(i=1; i<=n; i++)
lon=lon+sqrt(pow(x[i]-x[i+1],2) +
pow(y[i]-y[i+1],2));
printf("Longitud = %.3lf\n",lon);
}
CICLO 2014-2
122
Ejemplo4
Definir una funcin que retorne la cantidad de filas
que hay en un archivo tipo texto.
Planteamiento
Que parmetros necesita la funcin?
ninguno
La funcin retorna un valor?
Si, retorna la cantidad de filas.
tipo int
CICLO 2014-2
Codificacin4
int num_filas(){
FILE *g; int conta=0; char car;
g=fopen("DATOS.TXT","r");
while(!feof(g)){
fscanf(g,"%c",&car);
if(car=='\n') conta++;
}
fclose(g);
return conta+1;
}
123
CICLO 2014-2
124
PROGRAMACION DIGITAL
LABORATORIO N 7
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-2
125
Laboratorio N7
Objetivo
1. Utilizar funciones y paso de parmetros por
referencia.
2. Utilizar vectores y matrices como parmetros
CICLO 2014-2
126
z=Referencia(&x,);
VUELTA
Retorna u
n valor (op
cion
Definicin
Referencia(*x)
al)
Valor
: nombre de la funcin
x,
: parmetros
z
: recibe el valor retornado por la funcin
CICLO 2014-2
127
1. Declaracin
variable = funcion(&parmetros
actuales);
}
tipo funcion(*parmetros formales){
2. Llamado
3. Definicin
return valor;
}
Retorna valor
CICLO 2014-2
128
variable=funcion(&parmetros actuales);
3. Definicin
}
Donde:
tipo
funcin
Parmetros
formales
Parmetros actuales
Variable
CICLO 2014-2
129
Ejercicio1
Disear una funcin que lea un vector de n
elementos.
Planteamiento
Que parmetros necesita la funcin?
x
por referencia (arreglo float)
*n
por referencia (int)
La funcin retorna un valor?
No, n y x se retornan como parmetros por
referencia.
tipo void
LLAMADO
CICLO 2014-2
130
CICLO 2014-2
131
lee_vector(x, *n)
LLAMADO
Inicio
Leer
*n
lee_vector(x, &n)
i 1..*n
i 1..n
Leer
xi
Escribir
xi
Fin
Fin
CICLO 2014-2
132
Codificacin C
CICLO 2014-2
133
Ejercicio2
Disear una funcin que intercambie el contenido
completo de dos vectores de n decimales.
Planteamiento
Que parmetros necesita la funcin?
a
por referencia (arreglo float)
a
por referencia (arreglo float)
n
por valor (int)
La funcin retorna un valor?
No, a y b se retornan como parmetros por
referencia.
tipo void
LLAMADO
LLAMADO
LLAMADO
CICLO 2014-2
134
CICLO 2014-2
135
intercambio(a, b, n)
i 1..n
t ai
ai bi
bi t
LLAMADO
lee_vector(a, &n)
LLAMADO
lee_vector(b, &n)
LLAMADO
intercambio(a, b, n)
i 1..n
Escribir
ai , bi
Fin
Fin
Codificacin C
CICLO 2014-2
136
Codificacin C
CICLO 2014-2
137
CICLO 2014-2
138
Ejercicio3
Disear una funcin que lea una matriz de orden m*n.
Planteamiento
Que parmetros necesita la funcin?
A
por referencia (arreglo bidimensional float)
*m
por referencia (int)
*n
por referencia (int)
La funcin retorna un valor?
No, A, m y n se retornan como parmetros por
referencia
tipo void
LLAMADO
CICLO 2014-2
139
CICLO 2014-2
140
Diagrama de Flujo3
DEFINICION
Inicio
lee_matriz(*f, *c, a)
LLAMADO
Leer
*f , *c
lee_matriz(&m, &n, a)
i 1..*f
i 1..m
j 1..*c
j 1..n
Leer
ai j
Escribir
ai j
Fin
Fin
CICLO 2014-2
141
Codificacin C
CICLO 2014-2
142
Ejercicio4
Disear una funcin que multiplique dos matrices
A(m*n) y B(n*p).
Planteamiento
Que parmetros necesita la funcin?
A
por referencia (arreglo bidimensional float)
B
por referencia (arreglo bidimensional float)
C
por referencia (arreglo bidimensional float)
m, n, p por valor (int)
La funcin retorna un valor?
No, C se retorna como parmetro por referencia
tipo void
Diagrama de Flujo4
DEFINICION
multiplica(A,B,C,m,n,p)
i 1..m
j 1..p
Ci j 0
k 1..n
Ci j Ci j + Ai k* Bk j
Fin
LLAMADO
CICLO 2014-2
143
Inicio
lee_matriz(A,&m,&n)
LLAMADO
lee_matriz(B,&n,&p)
LLAMADO
multiplica(A,B,C,m,n,p)
i 1..m
j 1..n
Escribir
Ci j
Fin
CICLO 2014-2
144
PROGRAMACION DIGITAL
LABORATORIO N 8
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-2
Laboratorio N8
Objetivos
1. Resolver ejercicios utilizando funciones.
2. Introduccin a la Recursividad
145
Ejercicio1
CICLO 2014-2
146
Ejercicio2
CICLO 2014-2
147
CICLO 2014-2
148
Recursividad
Una Funcin es recursiva cuando se llama a si
misma.
Por ejemplo, el factorial de n se puede calcular con
una funcin recursiva:
n! = n*(n-1)*(n-2)**2*1
n * fact(n 1) n 0
fact(n)
1
n0
CICLO 2014-2
149
Ejercicio1
Calcular en forma recursiva el mximo comn divisor de
dos nmeros
Planteamiento
Que parmetros necesita la funcin?
a por valor (int)
b por valor (int)
La funcin retorna un valor?
Si, retorna el MCD de a y b.
tipo int
CICLO 2014-2
150
Diagrama MCD
DEFINICION
FUNCION PRINCIPAL
mcd(a,b)
V
LLAMADO
RECURSIVO
a%b>0
m mcd(b,a%b)
Inicio
F
mb
return m
Fin
Leer
a, b
LLAMADO
m mcd(a,b)
Escribir
m
Fin
CICLO 2014-2
151
Ejercicio2
Calcular xn en forma recursiva, x decimal y n entero
positivo
x * pot ( x, n 1) n 0
pot ( x, n)
1
n0
Planteamiento
Que parmetros necesita la funcin?
x por valor (float)
n por valor (int)
La funcin retorna un valor?
Si, retorna xn.
tipo double
CICLO 2014-2
152
Diagrama Potencia
DEFINICION
FUNCION PRINCIPAL
pot(x,n)
V
n>0
LLAMADO
RECURSIVO
p x*pot(x,n-1)
Inicio
F
p1
return p
Fin
LLAMADO
Leer
x, n
p pot(x,n)
Escribir
p
Fin
CICLO 2014-2
153
PROGRAMACION DIGITAL
LABORATORIO N 9
CICLO 2014-1
WILFREDO CUPE ROMN
Laboratorio N9
Objetivo
1. Utilizar cadena de caracteres.
2. Utilizar funciones para cadenas.
CICLO 2014-2
154
CICLO 2014-2
155
Cadena de Caracteres
Una cadena es un arreglo de caracteres.
Declaracin:
H o l a
0
M u n d o \n
4
10
\0
11
12 caracteres
CICLO 2014-2
Lectura de Cadenas
Lee hasta encontrar espacio o salto de lnea.
156
Leer
cad
char cad[30];
scanf("%s", cad); //por teclado, sin &
fscanf(g,"%s", cad); //de archivo, sin
&
Lee hasta encontrar salto de lnea
char cad[30];
gets(cad); //por teclado
fgets(cad,#caracteres,g); //de archivo
Escritura de Cadenas
char car[30];
CICLO 2014-2
157
~
Escribir
cad
CICLO 2014-2
158
Funciones de Cadenas
Se debe incluir en el programa: #include<string.h>
Funcin
strlen(cad)
strcpy(cad1,
cad2)
strcat(cad1,
cad2)
strcmp(cad1,
cad2)
Descripcin
Retorna la longitud de cad. No se
cuenta el nulo.
Copia cad2 en cad1.
Une cad1 con cad2.
CICLO 2014-2
159
CICLO 2014-2
160
Ejecucin
Apellidos: PEREZ LOPEZ
Nombres: JUAN CARLOS
PEREZ LOPEZ JUAN CARLOS 23 caracteres
PEREZ LOPEZ>JUAN CARLOS
Presione una tecla para continuar . . .
CICLO 2014-2
161
Ejercicio1
Dada una cadena ingresada por teclado, determinar
si es palndroma (un palndromo es una palabra que
se lee igual en dos sentidos, Ejemplo: arepera, Ana,
etc.).
cad: a r e p
0
n=?
i=0,1,,?
n-i-1
\0
n-3
n-2
n-1
CICLO 2014-2
162
Solucin1
cad: a r e p
0
n-i-1
\0
n-3
n-2
n-1
n caracteres
CICLO 2014-2
163
Ejercicio2
Leer una frase y visualizar cada palabra seguida del
nmero de letras que la componen. Por ejemplo:
Estas fiestas patrias tome con
moderacin
Se mostrara:
Estas
5
fiestas
7
pascuas
7
tome
4
con
3
moderacin
10
20 car.
CICLO 2014-2
164
Solucin2
Frase: Estas
moderacin
fiestas
patrias
tome
con
while(!feof(g)){
fscanf(g,"%s", cad);
printf("%-20s %d\n",cad, strlen(cad));
}
CICLO 2014-2
165
Ejercicios Propuestos
Dada una cadena leda por teclado, convertir las letras
minsculas a maysculas.
Dada una cadena leda por teclado, invertir el orden de
las letras de cada palabra.
Dado un archivo, leer por teclado una cadena y
determinar cuantas veces se repite la cadena en el
archivo.
Dado un archivo, leer por teclado dos cadenas, buscar la
primera cadena en el archivo y reemplazarla por la
segunda cadena.
CICLO 2014-2
166
PROGRAMACION DIGITAL
LABORATORIO N 10
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-2
Laboratorio N9
Objetivo
1. Utilizar arreglos de cadenas
2. Desarrollar aplicaciones con cadenas
167
CICLO 2014-2
168
Arreglo de Cadenas
Es un arreglo donde cada elemento es una cadena.
Declaracin:
char arreglo[#fil][#col]={valor inicial};
Donde:
#fil
#col
CICLO 2014-2
169
20 cadenas
0
1
2
3
19
Hola
Mundo
CB412I
\n
30 car
x2
19
CICLO 2014-2
170
19
19
30 car
x[20]
29
\0
x2,5
CICLO 2014-2
Leer
xi
171
~
Lee hasta encontrar espacio o salto de lnea
scanf("%s", x[i]); //por teclado
fscanf(g, "%s", x[i]);//de archivo
Lee hasta encontrar salto de lnea
gets(x[i]); //por teclado
fgets(x[i],#caracteres,g); //de archivo
CICLO 2014-2
172
~
Escribir
xi
~
printf("%s", x[i]); //en pantalla
fprintf(g,"%s", x[i]); //en archivo
CICLO 2014-2
173
Ejercicio1
Leer n cadenas por teclado y ordenarlas alfabticamente.
Por Ejemplo:
1
2
3
4
MORA
ESCALANTE
CORTEZ
JEANCARLO
BOLO
1
2
3
ORDENAR
BOLO
CORTEZ
ESCALANTE
JEANCARLO
MORA
CICLO 2014-2
Solucin1
/*Ordena n cadenas*/
#include<stdio.h>
#include<string.h>
int main()
{char x[50][30],t[30]; int i,j,n;
printf("Nro de cadenas: "); scanf("%d",&n);
getchar(); //para el salto de linea
for(i=1;i<=n;i++){
printf("Cadena%d :",i); gets(x[i]);
}
/*Ordena x burbuja alfabeticamente*/
for(i=1;i<n;i++)
for(j=1;j<=n-i;j++)//de menor a mayor
if(strcmp(x[j],x[j+1])>0){
strcpy(t,x[j]); strcpy(x[j],x[j+1]);
strcpy(x[j+1],t);
}
for(i=1;i<=n;i++) printf("%d %s\n",i,x[i]);
174
CICLO 2014-2
175
Ejercicio2
Dada una frase leda por teclado, se pide hacer un
programa que genere el archivo Palabras.txt, con las
palabras en maysculas y en orden alfabtico.
Por ejemplo:
CICLO 2014-2
Solucin2
/*Ejercicio 2 de cadenas*/
#include<stdio.h>
#include<string.h>
int main()
{char x[50][30],c,t[30]; int i=0,n,j; FILE *g;
printf("Frase: ");
do {i++;
scanf("%s%c",x[i],&c);
}
while(c==' ');
n=i;
//Paso a mayusculas
for(i=1;i<=n;i++)
for(j=0;j<strlen(x[i]);j++){
c=x[i][j];
if(c>='a' && c<='z') c=c-32;
x[i][j]=c;
}
176
CICLO 2014-2
Solucin2
/*Ordena x burbuja alfabeticamente*/
for(i=1;i<n;i++)
for(j=1;j<=n-i;j++)//de menor a mayor
if(strcmp(x[j],x[j+1])>0){
strcpy(t,x[j]);
strcpy(x[j],x[j+1]);
strcpy(x[j+1],t);
}
g=fopen("palabras.txt","w");
for(i=1;i<=n;i++)
fprintf(g,"%d %s\n",i,x[i]);
fclose(g);
printf("Se creo palabras.txt\n");
system("pause");
}
177
CICLO 2014-2
178
Ejercicios Propuestos
Dado un archivo, leer por teclado una cadena y
determinar cuantas veces se repite la cadena
en el archivo.
Dado un archivo, leer por teclado dos cadenas,
buscar la primera cadena en el archivo y
remplazarla por la segunda cadena.
CICLO 2014-2
179
PROGRAMACION DIGITAL
LABORATORIO N 11
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-2
Laboratorio N11
Objetivo
1. Definir un tipo de datos Registros (struct)
2. Utilizar variables tipo Registros
180
CICLO 2014-2
181
Problema Propuesto
Hacer un programa que reescriba el contenido de un archivo
Agenda.txt ordenndolo segn fecha y hora. No se conoce el
nmero de lneas del archivo. Se recomienda utilizar un cdigo
que facilite el ordenamiento, obtenido a partir de la fecha y
hora:
Fecha y hora :
Cdigo
:
DD-MM-AAAA hh:mm
AAAAMMDDhhmm
CICLO 2014-2
182
Estructuras o Registros
Una estructura es un tipo de datos compuesto por
elementos denominados campos.
Los campos permiten almacenar informacin y
pueden ser de diferentes tipos de datos.
Pasos para utilizar Estructuras
1. Definir una estructura (alias y campos)
2. Declarar una variable tipo estructura
CICLO 2014-2
183
1. Definicin de la Estructura
Se puede utilizar el alias para declarar la variable
en otra sentencia.
struct
tipo1
tipo2
};
alias{
campo1;
campo2;
alias
campo1 campo2
2. Declaracin de Variable
CICLO 2014-2
184
Ejemplo
struct datos{
datos
char coda[11];
char apenom[40];
int credap;
apeno
coda
credap prom
m
float prom;
};
struct datos alu1, alu2;
CICLO 2014-2
185
CICLO 2014-2
186
CICLO 2014-2
187
Asignacin directa
Dos variables estructura del mismo tipo pueden
asignarse directamente.
struct datos alu1, alu2;
alu2=alu1;
Lectura y Escritura
Es campo por campo, utilizando el operador punto.
scanf(%s,alu1.coda);
gets(alu1.apenom);
scanf(%d %f,&alu1.credap, &alu1.prom);
CICLO 2014-2
188
Ejercicio Propuesto
Un archivo contiene la siguiente informacin de los
alumnos de la FIC: cdigo, apellidos y nombres,
crditos aprobados y promedio ponderado.
Utilizando variables tipo struct, leer el archivo y mostrar
en pantalla los datos del alumno con mayor y menor
promedio.
CICLO 2014-2
189
PROGRAMACION DIGITAL
LABORATORIO N 12
CICLO 2014-1
WILFREDO CUPE ROMN
CICLO 2014-2
Laboratorio N12
Objetivo
1. Definir un tipo de datos Registros (struct)
2. Utilizar arreglos de Registros
190
CICLO 2014-2
191
Arreglo de Estructuras
struct alias arreglo[#elementos];
xi
apeno
coda
credap prom
m
scanf(%s,x[i].coda);
gets(x[i].apenom);
scanf(%d %f,&x[i].credap, &x[i].prom);
CICLO 2014-2
192
Definicin de la Estructura
La estructura se define con un alias y se declara la
variable.
struct alias{
tipo1 campo1;
tipo2 campo2;
} variable;
alias
campo1 campo2
CICLO 2014-2
193
Definicin de la Estructura
Es posible definir la estructura sin alias y declarar la
variable.
struct{
tipo1 campo1;
tipo2 campo2;
} variable;
variable
campo1 campo2
CICLO 2014-2
194
Ejercicio1
Leer por teclado la siguiente informacin de n
alumnos:
Cdigo
Apellidos y Nombres
Crditos Aprobados
Promedio
Guardar lo ledo en un archivo. Utilizar un arreglo
de estructuras.
CICLO 2014-2
195
Codificacin1
/*Ejemplo con registros o estructuras*/
#include<stdio.h>
struct datos //1:Definicion
{char coda[11]; char apenom[40];
int credap; float prom;
}; //Aqui punto y coma
int main()
{ //2: Declaracion de variable
struct datos x[50]; int i,n; FILE *g;
printf("n: "); scanf("%d",&n);
for(i=1;i<=n;i++){
printf("Alumno%d\n",i);
printf("Promedio: "); scanf("%f",&x[i].prom);
printf("Codigo: "); scanf("%s",x[i].coda);
getchar(); //Para el salto de linea
CICLO 2014-2
196
Ejecucin1
n: 5
Alumno1
Promedio: 15.8
Codigo: 20120101A
Apellidos y Nombres: PEREZ LOPEZ JUAN CARLOS
Creditos: 120
Alumno2
Promedio: 10.9
Codigo: 20100101B
Apellidos y Nombres: RAMOS ESTRADA KEVIN FAUSTO
Creditos: 100
Alumno3
Promedio: 14.6
Codigo: 20110101C
Apellidos y Nombres: SANTIAGO LLEELLISH JOSE
Creditos: 200
Alumno4
Promedio: 13.7
Codigo: 20100101D
Apellidos y Nombres: OTERO MONTEZA ALEXANDER
Creditos: 190
Alumno5
Promedio: 19.9
Codigo: 20130101E
Apellidos y Nombres: MOYA CAHUANA CARLOS ARTURO
Creditos: 200
Presione una tecla para continuar . . .
CICLO 2014-2
197
CICLO 2014-2
198
ALUMNOS.TXT
20120101A
20100101B
20110101C
20100101D
20130101E
40 car.
15.80
10.90
14.60
13.70
19.90
120
100
200
190
200
Laboratorio N 13
CICLO 2014-2
199