Professional Documents
Culture Documents
PROGRAMACION DIGITAL
LABORATORIOS
CICLO 2014-1
Laboratorio N°1
Objetivos
1. Utilizar el PSeInt para la creación y ejecución
de Diagramas de Flujo.
2. Conocer las facilidades del PSeInt para la
Ejecución Paso a Paso, Prueba de Escritorio y
Exportación a C.
3. Utilizar el DEV C++ para la Depuración de la
codificación en C.
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 4
AREA DE COMANDOS
TRABAJO
LINEA DE
ESTADO
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 5
AREA DE COMANDOS
TRABAJO
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 6
Operadores y Funciones
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 8
Prueba de Escritorio
Prueba de Escritorio
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 15
Exportación a C
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 16
HERRAMIENTAS
AREA DE
TRABAJO
LINEA DE
ESTADO
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 17
Compilar
Compila el archivo actual
Ejecutar
Parámetros…
Compilar y Ejecutar
Reconstruir Todo
Revisar Sintáxis
Limpiar Resultados
Análisis de Perfil
Reiniciar ejecución del programa
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 19
Lenguaje de Programación C
Ejemplo de Programa 1
/*Mayor de tres numeros*/ Comentario
LAB1.C
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 22
Archivo Objeto
Archivo
ENLACE
Ejecutable
Librerias
Pre-compiladas LAB1.EXE
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 23
Errores
Errores de Sintáxis
Errores de Ejecución
Errores Lógicos
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 26
Errores de Sintáxis
Errores de Ejecución
Errores Lógicos
Laboratorio N° 2
#include<stdio.h>
Especificadores de Formato
Especificadores de Formato
Especificadores Efecto
Adicionales
Ancho Justifica a la derecha
.Precisión Redondea al n° de decimales
- Justifica a la izquierda
0 Llena con ceros según el ancho
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 34
Secuencias de Escape
Secuencia Efecto
de Escape
\n Salto de línea
\t Tabulador
\r Retorno de carro
\’ Comilla simple
\” Doble comilla
\\ Diagonal
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 35
• Especificadores de Formato
• Secuencias de Escape
• Texto
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 36
Ejemplo Inicio
b 12
Escribir
b
c 24.3
Escribir
c
Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 37
Comentario
/*Ejemplo printf*/
#include<stdio.h> Directiva de Preprocesador.
Se incluye la librería de funciones
int main() estándar de Entrada/Salida
{ Función Principal
int b;
Declaración de Variables
float c;
b=12; Escritura en pantalla
printf("Ejemplo de printf\n");
printf("b=%5d\n",b);
c=24.3;
printf("c=%7.1f\n",c);
system("pause"); Pausa en la ejecución
}
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 38
Ejemplo1.-
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 39
Ejemplo2.-
Inicio
Leer
a, b, c
Escribir
a, b, c
Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 40
Ejemplo2.-
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 42
Ejemplo3.-
Inicio
Leer
x, y
Escribir
x, y
Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 43
Ejemplo3.-
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 45
Operadores
Aritméticos
De asignación
Incrementales
Relacionales
Lógicos
Primarios
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 46
Operadores
Aritméticos Lógicos
+ Suma && Y
- Resta || O
* Multiplicación ! Negación
/ División
% Resto división entera Primarios
() Llamada función
Incrementales [] Indice de arreglo
++ Incremento en 1 . Miembro estructura
-- Decremento en 1
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 47
Operadores
De Asignación Relacionales
= Asignación simple == Igual que
+= Asignación suma < Menor que
-= Asignación resta > Mayor que
*= Asignación <= Menor o igual que
multiplicación >= Mayor o igual que
/= Asignación división != No igual que
%= Asignación resto
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 48
Inicio
Ejemplo4.-
Leer
x, y
xx+5
yy+1
z resto entero(x/y)
Escribir
x, y, z
Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 49
Ejemplo4.-
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 51
Laboratorio N° 3
Funciones Matemáticas
#include<math.h>
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 53
Funciones Trigonométricas
Función Descripción
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 seno(x) en radianes
double acos(double x) arco coseno(x)
double atan(double x) arco tangente(x)
Potencias y Logaritmos
Función Descripción
double pow(double x, Devuelve el valor de xy
double y)
double exp(double x) Devuelve el valor de ex
double log(double x) logaritmo neperiano de x
double log10(double x) logaritmo decimal de x
Función Descripción
double sqrt(double x) Devuelve x (x positivo)
double abs(int x) Devuelve |x| (entero x)
double fabs(double x) Devuelve |x| (double x)
double ceil(double x) Redondea x hacia arriba al
entero mas cercano
double floor(double x) Redondea x hacia abajo al
entero mas cercano
Tipo del valor devuelto Argumento o parámetro
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 56
Funciones hiperbólicas
Función Descripción
double sinh(double x) seno hiperbólico(x), x en
radianes
double cosh(double x) coseno hiperbólico(x)
double tanh(double x) tangente hiperbólica(x)
Ejercicio1
Dados dos puntos A(xa, ya) y B(xb, yb), calcular la
longitud de la línea AB.
B(xb, yb)
Inicio
Leer
xa, ya, xb, yb
Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 59
Ejercicio2
Dados la hipotenusa y un cateto de un triángulo
rectángulo, calcular el ángulo que forman y el otro
cateto.
a
c=?
ang=?
b
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 62
Inicio
Leer
a, b
c a2 b2
Escribir
c, ang , angm
Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 63
• Evaluar la función:
f ( x) seno( x) e cos(x )
x 2
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 66
Inicio
Leer
x
f seno(x) ecos(x) x 2
Escribir
f
Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 67
/*Evalua Formula*/
#include<stdio.h>
#include<math.h>
int main()
{
float x;
double f;
printf("Evalua Formula\n");
printf("x: ");
scanf("%f",&x);
f=fabs(sin(x)-exp(cos(x)))+floor(pow(x,2));
printf("f(%.3f) = %.4lf",x,f);
system("pause");
}
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 68
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 69
Laboratorio N° 4
Sentencias Sentencia if
Condicionales de
Control de Flujo
Sentencia if … else
Sentencia switch
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 70
Sentencia if
La sentencia compuesta
forma un bloque { … }
~
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 72
Sentencia if
Ejm: ~
F
if (nota>=10) nota10
printf(“Aprobado”); V
Esc
“Aprobado”
~
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 73
Sentencia if … else
~
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 74
Sentencia if … else
Ejm: ~
V F
nota10
Esc Esc
“Aprobado” “Desaprobado”
if (nota>=10)
~
printf(“Aprobado”);
else
printf(“Desaprobado”);
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 75
else if(expr3)
sent2 V F
sent3; expr3
else if(…) …
… sent3 sentn
[else
sentn;]
~
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 77
Esc V F
“Aprobado” 10> nota6
Esc V F
“Desaprobado” 6> nota 0
Esc Esc
“Reprobado” “Nota no Válida”
~
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 78
Ejm:
Sentencia switch
Sentencia switch
switch(expr) {
case cte1:
sent1; ~
break; expr
cte1 cte2 cten default
case cte2:
sent2;
break; sent
sent1 sent2 … sentn
…
case cten:
sentn; ~
break;
[default:
sent;]
}
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 81
Sentencia switch
~
3 4 lados 5 default
~
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 82
Sentencia switch
Ejemplo:
switch(lados) {
case 3:
printf(“Triángulo”);
break;
case 4:
printf(“Cuadrado”);
break;
case 5:
printf(“Pentágono”);
break;
default:
printf(“Otro”);
}
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 83
Ejercicios
• Dados tres números, determinar el mayor valor
de los tres.
• Escribir un programa que presente en pantalla un
menú de opciones:
Opciones
1.- Triángulo
2.- Cuadrado
3.- Pentágono
Ingresar opción:
Ejercicios
• Ingresar la opción y mostrar un mensaje con la
opción que fue elegida.
• Ingresar por teclado las notas del examen
parcial, final y promedio de prácticas de un
alumno de programación digital. Calcular su
promedio y determinar si está aprobado,
desaprobado o reprobado.
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 85
PROGRAMACION DIGITAL
GUIA DE LABORATORIO
CICLO 2013-2
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 86
Laboratorio N° 5
Sentencia do … while
Sentencia for
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 87
Sentencia while
~
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 89
Ejemplo
Inicio
suma 0
conta 0 prom suma/conta
Leer Escribir
nota prom
F Fin
0 nota 20
V
suma suma + nota
conta conta + 1
Leer
nota
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 91
Ejemplo
El MCD es 91
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 92
Sentencia do … while
do sentencia
sentencia;
while (expresion); V
expresión
F
~
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 93
Ejemplo
ex=1+x+x2/2!+x3/3!+…..
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 94
Inicio
serie 0
error 1 Escribir
serie
conta 0
Fin
Leer
x
conta conta + 1
V
|error| > 10-4
F
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 95
Sentencia for
Sentencia for
~
Inicial; expr; increm
sentencia
~
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 97
Ejemplo
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 98
Ejemplo
Inicio
Leer
n,num
menor num F
num > mayor
mayor num
V
mayor num
i 2..n
Leer
num
Escribir
F
num < menor mayor,menor
V Fin
menor num
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 100
Laboratorio N° 6
Arreglo Lineal
Variable
y Ejercicios
Subindicada
Bidimensional
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 101
Variable Subindicada
Tipos:
Arreglo Lineal
subíndice
50 elementos
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 103
Arreglo Lineal
Lectura y Escritura:
scanf(“formato”,&elemento[i-ésimo]);
printf(“formato”,elemento[i-ésimo]);
~
Ejemplo: Leer
scanf(“%d”, &x[i]); xi
~
~
printf(“%d”, x[i]); Escribir
xi
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 104
Ejercicio1
Entradas Salidas
N media
xi (i 1..N) desv
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 105
Diagrama PSeInt
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 106
Codificación C
/*Obtiene la media y desviacion de n números 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");
}
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 107
Ejecución
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 . . .
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 108
Ejercicio2
x1 x2 x3 x4 … xN
…
Entradas Salidas
N moda
xi (i 1..N) vecesmoda
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 109
Diagrama PSeInt
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 110
Codificación C
/*Obtiene la(s) moda(s) de n números 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;
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 111
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");
}
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 112
Ejecución
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 . . .
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 113
Ejercicio3
A1 A2 ... An B1 B2 ... Bn
An 1 An 2 ... A2 n Bn 1 Bn 2 ... B2 n
...
... ... ... ... ... ... ...
Ak Bk
A( m 1) n 1 A( m 1) n 2 ... Amn m*n B( m 1) n 1 B( m 1) n 2 ... Bmn m*n
Diagrama PSeInt
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 115
Codificación 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]);
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 116
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");
}
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 117
Ejecución
Nro filas: 3
Nro columnas: 4
A:
9 3 8 1
8 6 4 0
5 2 3 4
B:
5 7 2 3
9 6 1 1
4 9 3 7
C:
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 . . .
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 118
Arreglo Bidimensional
Tiene dos subíndices.
Declaración:
tipo nombre_matriz[N°filas][N°columnas];
Ejemplo: int x[20][30];
30 columnas
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 119
Arreglo Bidimensional
Lectura y Escritura:
scanf("formato",&matriz[fila-ésima][col-ésima]);
printf("formato",matriz[fila-ésima][col-ésima]);
~
Ejemplo:
scanf("%d", &x[i][j]); Leer
xi,j
~
~
printf("%d", x[i][j]); Escribir
xi,j
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 120
Laboratorio N° 7
Archivo
Archivo Tipo Texto Definición
2. Abrir el Archivo
4. Cerrar el Archivo
Fin de Archivo
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 121
Archivo
Tipos:
Tabla ASCII
Fuente: http://www.elcodigoascii.com.ar/
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 123
Pasos a seguir:
1. Declarar variable FILE
2. Abrir el archivo
3. Leer y/o Escribir
4. Cerrar el archivo
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 124
FILE *var_archi;
Donde:
2. Abrir el Archivo
var_archi=fopen(archivo, modo);
Donde:
2. Abrir el Archivo
var_archi=fopen(archivo, modo);
Donde:
modo Forma en que se utilizará el archivo.
Modo Apertura Descripción
“r” Abre un Archivo para lectura (ENTRADA)
“w” Crea un Archivo para escritura (SALIDA)
“a” Abre un Archivo para añadir al final (SALIDA)
“r+” Abre un Archivo para lectura/escritura
“w+” Crea un Archivo para lectura/escritura
“a+” Abre o crea un Archivo para añadir al final
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 127
Donde:
fscanf Lee la variable desde el archivo según el
formato.
~
Leer (var_archi)
variable
~
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 128
Donde:
fprintf Escribe la expresión al archivo según el
formato.
~
Escribir (var_archi)
expresión
~
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 129
4. Cerrar el Archivo
fclose(var_archi);
fcloseall();
Donde:
fclose Cierra el archivo.
fcloseall Cierra todos los archivos abiertos.
fclose(var_archi) fcloseall( )
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 130
Ejercicio1
Fin de Archivo
Archivo
EOF
Archivo
de
Lectura
EOF
!feof(var_archi) será Verdadero mientras no se alcance
el EOF.
negación
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 133
V
sentencias
~
while(!feof(var_archi)){
//Sentencias de Lectura
…
}
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 134
sentencia
~
for(Inicial; !feof(var_archi); increm){
//Sentencias de Lectura
…
}
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 135
Ejercicio2
Ejercicio3
Laboratorio N° 8
Función
Llamado
Definición
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 138
Función
DIVIDIR FUNCION 2
PROGRAMA
FUNCION 3
Paso de Parámetros
Definición
Valor(x)
…
z=Valor(x,…); …
Definición
Referencia(*x)
…
z=Referencia(&x,…); …
Valor Retornado
1. Declaración
2. Llamado 1. Declaración
3. Definición
2. Llamado
3. Definición
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 144
Llamado: Declaración y
parámetro_actual Definición:
parámetro_formal
parámetro formal
Memoria de la
Función
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 145
1. Declaración
Donde:
2. Llamado
Donde:
3. Definición
Donde:
tipo : tipo de dato del valor retornado por la
función
función : Nombre de la función
Parámetros : Declaración de los parámetros formales de
formales la función
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 148
Ejemplo1
Planteamiento
¿Que parámetros necesita la función?
a0..n por referencia (arreglo float)
n por valor (int)
x por valor (float)
¿La función retorna un valor?
Si, retorna el polinomio evaluado en x.
tipo double
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 149
Codificación1
Ejemplo2
Planteamiento
¿Que parámetros necesita la función?
grad por valor (int)
min por valor (int)
¿La función retorna un valor?
Si, retorna el ángulo en radianes.
tipo double
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 151
Codificación2
Ejemplo3
Planteamiento
¿Que parámetros necesita la función?
ninguno
Codificación3
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;
}
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 154
Ejemplo4
Planteamiento
¿Que parámetros necesita la función?
n por valor (int)
x1..n por referencia (arreglo float)
y1..n por referencia (arreglo float)
¿La función retorna un valor?
Si, retorna la longitud de la poligonal.
tipo double
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 155
Codificación4
Laboratorio N° 9
Función
Llamado
Definición
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 157
Definición
Referencia(*x)
…
z=Referencia(&x,…); …
Llamado Declaración y
Definición
*parámetro_formal
&parámetro_actual
parámetro_actual
Memoria de
la función
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 159
1. Declaración
Donde:
tipo : tipo de dato del valor retornado por la función
función : Nombre de la función
Parámetros : Declaración de los parámetros formales de la
formales función como punteros
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 160
2. Llamado
Donde:
variable : Variable donde se asigna el valor retornado
por la función (opcional)
función : Nombre de la función
parámetros : Listado de los parámetros actuales de la
función pasando la dirección en memoria
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 161
3. Definición
Donde:
Ejercicio1
Planteamiento
¿Que parámetros necesita la función?
x por referencia (arreglo float)
*n por referencia (int)
¿La función retorna un valor?
No, n y x se retornan como parámetros por
referencia.
tipo void
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 163
Diagrama de Flujo1
DEFINICION
lee_vector(x, *n) Inicio
LLAMADO
Leer lee_vector(x, &n)
*n
i 1..*n i 1..n
Leer Escribir
xi xi
Fin Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 164
Ejercicio2
Planteamiento
¿Que parámetros necesita la función?
x por referencia (arreglo float)
y por referencia (arreglo float)
n por valor (int)
¿La función retorna un valor?
No, x e y se retornan como parámetros por
referencia.
tipo void
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 165
Diagrama de Flujo2
Inicio
LLAMADO
DEFINICION
lee_vector(x, &n)
intercambio(x, y, n)
LLAMADO
Ejercicio3
Planteamiento
¿Que parámetros necesita la función?
A por referencia (arreglo bidimensional float)
*m por referencia (int)
*n por referencia (int)
¿La función retorna un valor?
No, A, m y n se retornan como parámetros por
referencia
tipo void
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 167
Diagrama de Flujo3
DEFINICION
lee_matriz(A, *m, *n) Inicio
LLAMADO
Leer lee_matriz(A, &m, &n)
*m , *n
i 1..*m i 1..m
j 1..*n j 1..n
Leer Escribir
Ai j Ai j
Fin Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 168
Ejercicio4
Planteamiento
¿Que parámetros necesita la función?
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 función retorna un valor?
No, C se retorna como parámetro por referencia
tipo void
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 169
Inicio
Diagrama de Flujo4 LLAMADO
DEFINICION
multiplica(A,B,C,m,n,p) lee_matriz(A,&m,&n)
LLAMADO
i 1..m lee_matriz(B,&n,&p)
LLAMADO
j 1..p multiplica(A,B,C,m,n,p)
Ci j 0
i 1..m
k 1..n
j 1..n
Ci j Ci j + Ai k* Bk j
Escribir
Ci j
Fin Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 170
Laboratorio N° 10
Recursividad
Llamado
Definición
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 171
Función Recursiva
n * fact(n 1) n 0
fact(n)
1 n0
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 172
Ejercicio1
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 parámetros necesita la función?
x por valor (float)
n por valor (int)
¿La función retorna un valor?
Si, retorna xn.
tipo double
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 173
Diagrama Potencia
pot(x,n) Inicio
V F Leer
LLAMADO n>0
RECURSIVO x, n
LLAMADO
p x*pot(x,n-1) p1
p pot(x,n)
return p Escribir
p
Fin
Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 174
Ejercicio2
Calcular en forma recursiva el máximo común divisor de
dos números
mcd (b, a%b) a%b 0
mcd (a, b)
b a%b 0
Planteamiento
¿Que parámetros necesita la función?
a por valor (int)
b por valor (int)
¿La función retorna un valor?
Si, retorna el MCD de a y b.
tipo int
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 175
Diagrama MCD
mcd(a,b) Inicio
V F Leer
LLAMADO a%b>0
RECURSIVO a, b
LLAMADO
m mcd(b,a%b) mb
m mcd(a,b)
return m Escribir
m
Fin
Fin
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 176
Laboratorio N° 11
Funciones Principales
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 177
Cadenas de Caracteres
Una cadena es un arreglo de caracteres.
Declaración:
char cadena[#carac]=“valor inicial”;
Ej:
char cad[30]=“Hola Mundo\n”;
cad: H o l a M u n d o \n \0
0 1 2 3 4 5 6 7 8 9 10 11
12 caracteres
El carácter nulo (‘\0’) indica el final de la cadena.
Una constante cadena se encierra entre dobles comillas.
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 178
~
Lectura de Cadenas Leer
cad
Lee hasta encontrar espacio o salto de línea.
~
char cad[30];
scanf("%s", cad); //por teclado, sin &
fscanf(g,"%s", cad); //de archivo, sin &
~
Escritura de Cadenas
Escribir
cad
char car[30];
~
printf("%s", cad); //en pantalla
fprintf(h,"%s", cad); //en archivo
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 180
Funciones de Cadenas
Función Descripción
strlen(cad) Retorna la longitud de cad. No se
cuenta el nulo.
strcpy(cad1, cad2) Copia cad2 en cad1.
strcat(cad1, cad2) Une cad1 con cad2.
strcmp(cad1, cad2) Compara cad1 con cad2.
<0 si cad1<cad2
Retorna =0 si cad1=cad2
>0 si cad1>cad2
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 181
Ejecución
Ejercicio1
cad: a r e p … … … … … e r a \0
0 1 2 3 … i n-i-1 n-3 n-2 n-1 n
n=?
i=0,1,…,?
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 184
Solución1
cad: a r e p … … … … … e r a \0
0 1 2 3 … i n-i-1 n-3 n-2 n-1 n
n caracteres
…
conta=0 //cuenta letras diferentes
n = strlen(cad);
for(i=0;i<=(n-1)/2;i++)
if(cad[i]!=cad[n-i-1])
conta++;
…
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 185
Ejercicio2
Solución2
Ejercicios Propuestos
Laboratorio N° 12
Tipos Simples y
Estructurados
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 189
Estructuras o Registros
Definición de la Estructura
Definición de la Estructura
struct variable
{tipo1 campo1;
tipo2 campo2;
… … campo1 campo2 …
} variable;
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 192
Definición de la Estructura
Ejemplo
struct datos datos
{char coda[11];
char apenom[40];
int credap;
coda apenom credap prom
float prom;
};
variable.campo
variable_puntero->campo
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 195
Ejemplos:
strcpy(alu1.coda, “20130001A”);
strcpy(alu1.apenom, “Perez-Manuel”);
alu1.credap=100;
alu1.prom=15.6;
Asignación directa
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);
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 197
Arreglo de Estructuras
struct alias arreglo[#elementos];
xi
Ejercicio1
Codificación1
/*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
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 200
Ejecución1
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 . . .
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 202
ALUMNOS.TXT
40 car.
PROGRAMACION DIGITAL - CB412 - CICLO 2014-1 203
Laboratorio N° 13
Punteros Definición
Aritmética de Punteros
Aplicaciones