Anda di halaman 1dari 199

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 1
CICLO 2014-2
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

COMPETENCIAS DEL CURSO


Disea programas para procesar datos, la generacin de
informacin y su interpretacin.
2. Razona, planea y construye una secuencia lgica de procesos
utilizando estructuras de seleccin e iteracin.
3. Conoce nuevas tcnicas y herramientas que permita su
aplicacin en la solucin de problemas.
4. Conoce y utiliza un lenguaje de programacin a travs de
prcticas de edicin y ejecucin de programas estructurados.
5. Comprende el comportamiento de otros programas de
cmputo durante su utilizacin.
Las competencias 3, 4 y 5 se desarrollarn en las sesiones de
Laboratorio
1.

PROGRAMACION DIGITAL - CB412-I

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.

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

Entorno del PSeInt


MENU

HERRAMIENTAS

AREA DE
TRABAJO

LINEA DE
ESTADO

COMANDOS

PROGRAMACION DIGITAL - CB412-I

Creacin de Diagramas de Flujo

AREA DE
TRABAJO

COMANDOS

CICLO 2014-2

PROGRAMACION DIGITAL - CB412-I

Creacin de Diagramas de Flujo

CICLO 2014-2

PROGRAMACION DIGITAL - CB412-I

Operadores y Funciones

CICLO 2014-2

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

Ejecucin del Diagrama de Flujo

PROGRAMACION DIGITAL - CB412-I

Ventana de Ejecucin

CICLO 2014-2

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

10

Ejecucin paso a paso


Permite realizar un seguimiento ms detallado de la
ejecucin del diagrama de flujo, observando en
tiempo real las instrucciones y el orden en que se
ejecutan.
Tambin se puede observar el contenido de variables
o expresiones durante el proceso.

PROGRAMACION DIGITAL - CB412-I

Ejecucin paso a paso

CICLO 2014-2

11

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

Ventanas de Ejecucin paso a paso

12

PROGRAMACION DIGITAL - CB412-I

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.

PROGRAMACION DIGITAL - CB412-I

Prueba de Escritorio

CICLO 2014-2

14

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

15

Ejercicios
1. Se leen las coordenadas de un tringulo y un

punto ms. Mostrar si este ltimo punto est en el


interior o no del tringulo.
2. Sea f(x) una funcin definida en el intervalo I=[0 ,
6a]. Leer un valor real para x, cualquiera, e indicar
con un mensaje si xI y si xI, evaluar en la
funcin y mostrar el resultado.

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

16

Ejercicios
3. Telefnica del Per ha diseado los siguientes

planes para sus usuarios de telefona fija:


Plan

Min. Libres

Costo por min. adicional

% Dscto.

300

0.10

0%

200

0.08

5%

100

0.05

10%

Determinar la cantidad de minutos libres que le


corresponden segn el plan que elija, el pago por
los minutos adicionales, el monto de descuento y
el monto que debe pagar un usuario. Considere la
posibilidad que el usuario no tenga que pagar nada
porque sus minutos consumidos ya estn
cubiertos por sus minutos libres.

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

17

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 2
CICLO 2014-2
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

Entorno del DEV C++


MENU
HERRAMIENTAS

AREA DE
TRABAJO

LINEA DE
ESTADO

CICLO 2014-2

19

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

20

Menu File (Archivo)


Nuevo
Nuevo
Archivo
Archivo Fuente
Fuente
Proyecto
Proyecto
Abrir
Abrir Proyecto
Proyecto oo Archivo
Archivo
Abrir
Abrir Archivo
Archivo Reciente
Reciente
Grabar
Grabar
Grabar
Grabar Como
Como
Grabar
Grabar Todo
Todo
Cerrar
Cerrar
Cerrar
Cerrar Todo
Todo
Propiedades
Propiedades
Importar
Importar
Exportar
Exportar
Imprimir
Imprimir
Configura
Configura Impresin
Impresin
Salir
Salir

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

21

Menu Execute (Ejecutar)

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

PROGRAMACION DIGITAL - CB412-I

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.

ANSI: American National Standards Institute

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

25

Directivas del Pre-procesador


#include<stdio.h> : Incluye la librera de
funciones de Entrada/Salida del archivo de
cabecera stdio.h
#define PI 3.14159 : Define la constante
PI

Terminal
Inicio

int main(){

Fin

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

31

Procesos
var expresin

var=expresion;

var var + delta

var=var+delta;
var+=delta;

var var + 1

var=var+1;
var++;

a b Resto 2

a=b%2;

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

32

Decisin
V

Condicin

V
Sentencias
if(Condicin){
Sentencias V;
}
else {
Sentencias F;
}

F
Sentencias

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

33

Bucle condicin al inicio

~
Condicin
V
Sentencias

while(Condicin)
{
Sentencias;
}

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

34

Bucle condicin al final

Sentencias

do

Condicin

}
while(Condicin);

{
Sentencias;

PROGRAMACION DIGITAL - CB412-I

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);

PROGRAMACION DIGITAL - CB412-I

Compilacin

Ejecucin

CICLO 2014-2

36

(Execute Compile)

(Execute Run)

El archivo ejecutable es independiente del DEV.

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

39

PROGRAMACION DIGITAL - CB412-I

Exportacin a C

CICLO 2014-2

40

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

41

Depuracin del Programa C con DEV C++

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

42

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 3
CICLO 2014-1
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

44

Ejercicio: DF con PseInt


Dadas las coordenadas (x, y) de tres puntos del
eje de una carretera, se desea determinar los
elementos de la curva horizontal de radio R.
(x2, y2)

(x1, y1)

(x3, y3)

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

45

Elementos de una Curva Horizontal


P.I.
E
M

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)

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

46

Ejercicio: DF con PseInt


Dada una poligonal abierta de N vrtices, se desea
calcular sus ngulos de deflexin 1, 2, ...
X

X1

Y1

X2

Y2

XN

YN

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

Ejemplo de ejecucin

CICLO 2014-2

48

PROGRAMACION DIGITAL - CB412-I

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>

PROGRAMACION DIGITAL - CB412-I

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 seno(x) en radianes

double acos(double x) arco coseno(x)


double atan(double x)
Tipo del valor devuelto

arco tangente(x)

Argumento o parmetro

PROGRAMACION DIGITAL - CB412-I

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

double log10(double x) logaritmo decimal de x


Tipo del valor devuelto

Argumento o parmetro

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

52

Raz Cuadrada, Valor Absoluto, Redondeo de


Decimales
Funcin

Descripcin

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 parmetro

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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.

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

58

Ejemplos
2. Realizar un programa que encuentre el valor de

e con un error menor a 10-4, dado que el valor


del exponencial para un valor de x se puede
expresar mediante la serie:
ex=1+x+x2/2!+x3/3!+..
3. Dados n nmeros ingresados por teclado,

escribir un programa que permita determinar el


mayor y el menor de los n nmeros.

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

59

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 4
CICLO 2014-1
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

60

Laboratorio N4
Objetivo
Resolver ejercicios propuestos
Diagrama de Flujo y Codificacin C.
Utilizar PSeInt y DEV C++.

presentando

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

Ejercicio3

CICLO 2014-2

63

PROGRAMACION DIGITAL - CB412-I

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.

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

66

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 5
CICLO 2014-1
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

68

Archivo Tipo Texto


Esta formado por un conjunto de caracteres
ASCII organizados secuencialmente.
Utilizamos el archivo para entrada y/o salida del
programa.

Archivo de
Datos
ENTRADA

Programa

Archivo de
Resultados
SALIDA

PROGRAMACION DIGITAL - CB412-I

Tabla ASCII

Fuente: http://www.elcodigoascii.com.ar/

CICLO 2014-2

69

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

70

1. Declarar variable FILE


FILE *var_archi;

2. Abrir el Archivo
var_archi=fopen(archivo, modo);
Modo
Apertura

Descripcin

r
w
a

Abre un Archivo para lectura (ENTRADA)


Crea un Archivo para escritura (SALIDA)
Abre un Archivo para aadir al final (SALIDA)

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

71

3. Leer y/o Escribir


fscanf(var_archi, formato,
&variable);
fprintf(var_archi, formato,
expresin);

4. Cerrar el Archivo
fclose(var_archi);
_fcloseall();

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

72

Fin de Archivo para archivos de lectura


feof(var_archi) ser Verdadero si se alcanz el EOF y
ser Falso si an no se alcanza.
inicio
Archivo
de
Lectura
EOF

!feof(var_archi) ser Verdadero mientras no se alcance


el EOF.
negacin

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

73

Lectura del archivo usando while con !feof()

!feof(var_archi)

V
sentencias

~
while(!feof(var_archi)){
//Sentencias de Lectura

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

74

Lectura del archivo usando do while con !feof()

~
sentencias

!feof(var_archi)

V
F

do {
//Sentencias de Lectura

} while(!feof(var_archi));

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

*
* *
*

*
*
*********

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

79

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 6
CICLO 2014-1
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

Laboratorio N6
Objetivo
1. Bucle for
2. Arreglo Lineal
3. Arreglo Bidimensional
4. Ejercicios

CICLO 2014-2

80

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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.

PROGRAMACION DIGITAL - CB412-I

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]

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

Diagrama PSeInt

CICLO 2014-2

86

PROGRAMACION DIGITAL - CB412-I

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");
}

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

Diagrama PSeInt

CICLO 2014-2

90

PROGRAMACION DIGITAL - CB412-I

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;

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

94

Ejercicio3

Dadas las matrices A y B de m*n, se pide sumarlas


utilizando arreglos lineales.
A1
An 1

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

PROGRAMACION DIGITAL - CB412-I

Diagrama PSeInt

CICLO 2014-2

95

PROGRAMACION DIGITAL - CB412-I

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]);

PROGRAMACION DIGITAL - CB412-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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

99

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 6
CICLO 2014-1
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

100

Laboratorio N6
Objetivo
1. Utilizar arreglos bidimensionales
2. Utilizar funciones y paso de parmetros por

valor

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

102

Lectura de Arreglo Bidimensional


scanf("formato",&matriz[#fila][#col]);
fscanf(file,"formato",&matriz[#fila]
[#col]);
Ejemplo:

scanf("%d", &x[i][j]);
fscanf(file,"%d", &x[i][j]);

Leer
xi j

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

103

Escritura de Arreglo Bidimensional


printf("formato",matriz[#fila][#col]);
fprintf(file,"formato",matriz[#fila]
[#col]);
Ejemplo:

printf("%d", x[i][j]);
fprintf(file,"%d", x[i][j]);

Escribi
r
xi j

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

Fila Modificada j i+1..n


c = -Aji/Aii , Aii 0
Filaj Filaj + c*Filai
Determinante:

105

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

106

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

107

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

108

PROGRAMACION DIGITAL - CB412-I

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

La funcin es una parte o mdulo del programa que


realiza una tarea especfica y/o retorna un valor como
resultado.

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

110

Parmetros pasados por Valor


Se pasa una copia del valor del parmetro (el original
no cambia).
IDA
Copia de x

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

PROGRAMACION DIGITAL - CB412-I

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)

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

112

Pasos para utilizar Funciones


Para utilizar funciones en nuestro programa se deben seguir
los siguientes pasos: Declaracin, Llamado y Definicin.
#include<stdio.h>
tipo funcion(parmetros formales);
int main() {

1. Declaracin

variable = funcion(parmetros
actuales);

}
tipo funcion(parmetros formales){

2. Llamado

3. Definicin

return valor;
}

Retorna valor

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

113

Pasos para utilizar Funciones


1. Declaracin tipo funcion(parmetros formales);
2. Llamado

variable = funcion(parmetros actuales);

3. Definicin

tipo funcion(parmetros formales){

}
Donde:

tipo
funcin
Parmetros
formales
Parmetros actuales
Variable

: tipo del valor retornado por la funcin


: Nombre de la funcin
: Parmetros utilizados en la definicin
: Parmetros utilizados en el llamado
: Recibe el valor retornado

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

D.F. PSeInt

CICLO 2014-2

115

PROGRAMACION DIGITAL - CB412-I

Codificacin1

CICLO 2014-2

116

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

118

D.F. PSeInt

PSeInt:
an+1xn + anxn-1 + + a2x + a1
C:
anxn + an-1xn-1 + + a1x + a0

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

119

Codificacin2
Arreglo como parmetro
N de elementos opcional

Arreglo como parmetro


N de elementos opcional

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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);
}

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

124

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 7
CICLO 2014-1
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

125

Laboratorio N7
Objetivo
1. Utilizar funciones y paso de parmetros por

referencia.
2. Utilizar vectores y matrices como parmetros

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

126

Parmetros pasados por Referencia


Se pasa la direccin en memoria del parmetro (el
original puede cambiar).
IDA
a de x
Direccin en Memori

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

127

Pasos para utilizar Funciones


Para utilizar funciones en nuestro programa se deben seguir
los siguientes pasos: Declaracin, Llamado y Definicin.
#include<stdio.h>
tipo funcion(*parmetros formales);
int main() {

1. Declaracin

variable = funcion(&parmetros
actuales);

}
tipo funcion(*parmetros formales){

2. Llamado

3. Definicin

return valor;
}

Retorna valor

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

128

Pasos para utilizar Funciones


1. Declaracin tipo funcion(*parmetros formales);
2. Llamado

variable=funcion(&parmetros actuales);

3. Definicin

tipo funcion(*parmetros formales){

}
Donde:

tipo
funcin
Parmetros
formales
Parmetros actuales
Variable

: tipo del valor retornado por la funcin


: Nombre de la funcin
: Parmetros punteros en la definicin
: Direccin parmetros en el llamado
: Recibe el valor retornado

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

Diagrama de Flujo PSeInt


DEFINICION

LLAMADO

CICLO 2014-2

130

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

131

Diagrama de Flujo CB412


DEFINICION

lee_vector(x, *n)

LLAMADO

Inicio

Leer
*n

lee_vector(x, &n)

i 1..*n

i 1..n

Leer
xi

Escribir
xi

Fin

Fin

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

132

Codificacin C

Arreglo como parmetro


N de elementos opcional

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

Diagrama de Flujo PSeInt


DEFINICION

LLAMADO
LLAMADO
LLAMADO

CICLO 2014-2

134

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

135

Diagrama de Flujo CB412


Inicio
DEFINICION

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

PROGRAMACION DIGITAL - CB412-I

Codificacin C

CICLO 2014-2

136

PROGRAMACION DIGITAL - CB412-I

Codificacin C

CICLO 2014-2

137

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

Diagrama de Flujo PSeInt


DEFINICION

LLAMADO

CICLO 2014-2

139

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

141

Codificacin C

Matriz como parmetro


N de filas opcional

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

144

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 8
CICLO 2014-1
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

Laboratorio N8
Objetivos
1. Resolver ejercicios utilizando funciones.
2. Introduccin a la Recursividad

145

PROGRAMACION DIGITAL - CB412-I

Ejercicio1

Imprimir la matriz en un archivo.


Resolver utilizando funciones.

CICLO 2014-2

146

PROGRAMACION DIGITAL - CB412-I

Ejercicio2

CICLO 2014-2

147

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

149

Ejercicio1
Calcular en forma recursiva el mximo comn divisor de
dos nmeros

mcd (b, a %b) a %b 0


mcd (a, b)
b
a %b 0

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

153

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 9
CICLO 2014-1
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

Laboratorio N9
Objetivo
1. Utilizar cadena de caracteres.
2. Utilizar funciones para cadenas.

CICLO 2014-2

154

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

155

Cadena de Caracteres
Una cadena es un arreglo de caracteres.
Declaracin:

char cadena[#carac]=valor inicial;


Ej: char cad[30]=Hola Mundo\n;
cad:

H o l a
0

M u n d o \n
4

10

\0
11

12 caracteres

El carcter nulo (\0) indica el final de la cadena.


Una constante caracter se encierra entre comilla simple.
Una constante cadena se encierra entre doble comilla.

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

Escritura de Cadenas
char car[30];

CICLO 2014-2

157

~
Escribir
cad

printf("%s", cad); //en pantalla


fprintf(h,"%s", cad); //en archivo

PROGRAMACION DIGITAL - CB412-I

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.

Compara cad1 con cad2.


<0 si cad1<cad2
Retorna
=0 si cad1=cad2

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

159

Ejemplo con Funciones de Cadenas


#include<stdio.h>
#include<string.h>
int main(){
char ap[50],no[50],apn[100]; int n;
printf("Apellidos: "); gets(ap);
printf("Nombres: "); gets(no);
strcpy(apn,ap);
strcat(apn," ");
strcat(apn,no);
printf("%s %d caracteres\n",apn, strlen(apn));
n=strcmp(ap,no);
if(n>0) printf("%s>%s\n",ap,no);
else if(n<0) printf("%s<%s\n",ap,no);
else printf("%s=%s\n",ap,no);//n=0
}

PROGRAMACION DIGITAL - CB412-I

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 . . .

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

162

Solucin1
cad: a r e p
0

n-i-1

\0

n-3

n-2

n-1

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-I

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.

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

164

Solucin2
Frase: Estas
moderacin

fiestas

patrias

tome

con

Primero la frase se guarda en un archivo:


Frase.txt
Estas fiestas pascuas
tome con moderacin

Luego se lee del archivo palabra por palabra:

while(!feof(g)){
fscanf(g,"%s", cad);
printf("%-20s %d\n",cad, strlen(cad));
}

PROGRAMACION DIGITAL - CB412-I

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.

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

166

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 10
CICLO 2014-1
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

Laboratorio N9
Objetivo
1. Utilizar arreglos de cadenas
2. Desarrollar aplicaciones con cadenas

167

PROGRAMACION DIGITAL - CB412-I

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

= nro. de filas o nro. de cadenas.


= nro. de columnas o nro. de caracteres
de las cadenas.
{valor inicial} = valores iniciales opcionales.

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

169

Como vector de cadenas


char x[20]
[30]={"Hola","Mundo","CB412I","\n"};
x: Hola
Mundo CB412I \n

20 cadenas

0
1
2
3

19

Hola
Mundo
CB412I
\n

30 car

x2

19

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

170

Como matriz de caracteres


Tambin se puede representar como una matriz de
caracteres.
char
0
1
2
3
4
5
[30]={"Hola","Mundo","CB412I","\n"};
0 Hola
0 H
o l a \0
1 Mundo
1 M
u n d o \0
2 CB412I
x2 2 C B 4 1 2 I
3 \n \0
3 \n

19

19
30 car

x[20]

29

\0

x2,5

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

Lectura del Arreglo de Cadenas

Se lee elemento por elemento.

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

PROGRAMACION DIGITAL - CB412-I

Escritura de Arreglo de Cadenas


Se escribe elemento por elemento.

CICLO 2014-2

172

~
Escribir
xi

~
printf("%s", x[i]); //en pantalla
fprintf(g,"%s", x[i]); //en archivo

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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:

Estas fiestas Patrias TOME con moderacin


Palabras.txt
CON
ESTAS
FIESTAS
MODERACION
PATRIAS
TOME

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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.

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

179

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 11
CICLO 2014-1
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

Laboratorio N11
Objetivo
1. Definir un tipo de datos Registros (struct)
2. Utilizar variables tipo Registros

180

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

struct alias variable;

PROGRAMACION DIGITAL - CB412-I

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;

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

185

Acceso a los campos de una Estructura


Para acceder a la informacin guardada en una
estructura, podemos hacer uso de dos operadores:
1.-El operador punto (.)
variable.campo
2.-El operador puntero flecha (->)
variable_puntero->campo

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

186

Acceso a los campos de una Estructura


Ejemplos:
strcpy(alu1.coda, 20130001A);
strcpy(alu1.apenom, Perez-Manuel);
alu1.credap=100;
alu1.prom=15.6;
Para utilizar el operador flecha, debemos hacer uso
de punteros.
struct datos *ptr;
ptr=&alu1;
strcpy(ptr->coda, 20130001A);
ptr->credap=100;

PROGRAMACION DIGITAL - CB412-I

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);

PROGRAMACION DIGITAL - CB412-I

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.

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

189

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA CIVIL

PROGRAMACION DIGITAL
LABORATORIO N 12
CICLO 2014-1
WILFREDO CUPE ROMN

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

Laboratorio N12
Objetivo
1. Definir un tipo de datos Registros (struct)
2. Utilizar arreglos de Registros

190

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

191

Arreglo de Estructuras
struct alias arreglo[#elementos];
xi

apeno
coda
credap prom
m

struct datos x[50];

scanf(%s,x[i].coda);
gets(x[i].apenom);
scanf(%d %f,&x[i].credap, &x[i].prom);

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

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.

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

196

printf("Apellidos y Nombres: ");


gets(x[i].apenom);
printf("Creditos: "); scanf("%d",&x[i].credap);
}
g=fopen("ALUMNOS.TXT","w");
for(i=1;i<=n;i++){
fprintf(g,"%s ",x[i].coda);
fprintf(g,"%-40s",x[i].apenom);
fprintf(g,"%05.2f ",x[i].prom);
fprintf(g,"%d\n",x[i].credap);
}
fclose(g);
system("pause");
}

PROGRAMACION DIGITAL - CB412-I

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

PROGRAMACION DIGITAL - CB412-I

CICLO 2014-2

198

ALUMNOS.TXT
20120101A
20100101B
20110101C
20100101D
20130101E

PEREZ LOPEZ JUAN CARLOS


RAMOS ESTRADA KEVIN FAUSTO
SANTIAGO LLEELLISH JOSE
OTERO MONTEZA ALEXANDER
MOYA CAHUANA CARLOS ARTURO

40 car.

15.80
10.90
14.60
13.70
19.90

120
100
200
190
200

PROGRAMACION DIGITAL - CB412-I

Laboratorio N 13

CICLO 2014-2

199

Anda mungkin juga menyukai