Está en la página 1de 26

10-10-2019

Docente: Patricio H. Salgado Rozas

PROGRAMACIÓN
INGENIERÍA CIVIL QUÍMICA

UNIDAD 2
ESTRUCTURAS Y FUNCIONES

1
10-10-2019

SEMANA 6
REPASO

ESTRUCTURA DE CONTROL IF
Es una estructura de control, que permite verificar el cumplimiento o no de una
condición. En base al cumplimiento de la condición, se realiza un conjunto de
instrucciones, si la condición es falsa o no se cumple, el flujo del programa
simplemente ignora la ejecución de las instrucciones existentes en el if.

Ejemplo:
Realice un programa, que muestre por pantalla el mensaje usted no aprobó, en el
caso de que la nota ingresada sea menor que 4,0:

#include "stdio.h"
void main(void) {
float nota;
printf("Ingrese su nota\n");
scanf("%f",&nota);
if (nota < 4)
printf("Usted se sacó un %f por lo tanto
reprobó\n",nota);
}

2
10-10-2019

ESTRUCTURA DE CONTROL IF
Puede notar que en la línea del IF, no hay apertura llave “{” y tampoco cierre “}”, esto
es posible, si y sólo si, el bloque que dé instrucciones que se ejecutan tras el “if” sólo
contiene una sola linea (también puede usar llaves con una sola instrucción); en el
caso que este bloque contenga dos o más instrucciones, el uso de llaves es
obligatorio como puede ver en el siguiente ejemplo:

#include "stdio.h"
void main(void) {
float nota;
printf("Ingrese su nota\n");
scanf("%f",&nota);
if (nota < 4){
printf("Usted se sacó un %f por lo tanto reprobó\n",nota);
printf(“Pruebe a quitar las llaves para ver qué sucede”);
}
}

ESTRUCTURA DE CONTROL DE FLUJO


IF/ELSE
Es una estructura de control, que permite definir si se realiza un conjunto de
instrucciones en base al cumplimiento de la condición o condiciones que
esta evalúa, la diferencia con el if es que esta estructura permite ejecutar
otro bloque de instrucciones, en el caso que la condición o condiciones que
se evalúan son falsas o mejor dicho no se cumplen.
Cabe señalar que en el caso de if/else, se aplican las mismas normas que en
el if, en cuanto a las llaves que marcan el inicio y termino de un bloque.
Ejemplo:
Continuemos con el ejemplo anterior; Se le encarga construir un
programa que muestre por pantalla el mensaje usted no aprobó la
asignatura, en el caso de que la nota ingresada sea menor que 4,0, en
caso contrario imprima un mensaje en el que indique que usted aprobó
la asignatura.

3
10-10-2019

ESTRUCTURA DE CONTROL IF/ELSE

#include "stdio.h"
void main(void) {
float nota;
printf("Ingrese su nota\n");
scanf("%f",&nota);
if (nota < 4){
printf("Usted se sacó un %f por lo tanto reprobó\n",nota);
}
else {
printf("Usted se sacó un %f por lo tanto aprobó\n",nota);
}
}

CONSIDERACIONES IF/ELSE

 Nunca puede existir un else si no hay un if.

 El válido colocar al interior de un “if” o un “else” otras estructuras “if”


o “else”, a esto le denominamos anidar.

 Es posible colocar ‘{ }’ llaves al tener solamente una instrucción en la


instrucción if o else.

4
10-10-2019

CICLOS CON CONDICIÓN DE TÉRMINO


Estos ciclos, tienen la particularidad que requieren de una o más
condiciones para iniciar su ejecución, es decir, si la condición o
condiciones del ciclo se cumplen, este comienza a iterar (se repetirá el
código de su interior) mientras la condición o condiciones se siga
cumpliendo (mientras sea válida o verdadera la condición), en el
momento que deja de ser válida el ciclo deja de repetirse y continua con
el resto del programa, en un cierto modo, se parecen a las estructuras IF,
ya que la ejecución de un bloque depende de la condición o condiciones,
si estas no son válidas.

CICLOS CON CONDICIÓN DE TÉRMINO


Entre estos ciclos tenemos:

 Ciclo Mientras (while), se ejecuta de 0 a N veces, se sugiere


utilizarlo cuando no se sabe cuándo debe comenzar a iterar y
mucho menos cuando se debe terminar de hacerlo, claro que es
importante conocer, las condiciones para comenzar a iterar y las
condiciones que se deban dar para dejar de iterar.

 Hacer – Mientras (do - while), ciclo que se ejecuta de 1 a n veces,


se sugiere utilizarlo cuando no se sabe cuándo debe comenzar a
iterar y mucho menos cuando se debe terminar de hacerlo, pero al
menos se necesita que se ejecute una vez, al igual que en el
mientras, es importante conocer, las condiciones para comenzar a
iterar y las condiciones que se deben dar para dejar de iterar.

10

5
10-10-2019

CICLOS CON CONDICIÓN DE TÉRMINO


Al usar este tipo de ciclos, si no se establecen las condiciones para dejar de
iterar, puede formar un loop o ciclo infinito que al final terminaría
deteniendo al PC, dada su ejecución sin fin; en base a esto cada vez que
necesite usar estos ciclos se debe preguntar:

 Necesito ejecutarlo de 0 a N veces o al menos necesito que se ejecute


una vez, esto para discriminar entre while (de 0 a N) y do while (de 1 a
N).

 Conozco la condición o condiciones que se deben dar para comenzar a


iterar.

 Establecer algún mecanismo al interior del bloque que en algún


momento permita terminar con la ejecución, para evitar que se formen
loops.

11

CICLOS CON CONTADOR DE ITERACIONES O FOR

A diferencia de los ciclos anteriores, estos siempre se


ejecutan, la cantidad de iteraciones está especificada en su
construcción, se recomienda utilizarlos cuando se sabe
perfectamente cuando inicia y cuando termina; en estos
ciclos es menos probable generar loops.

Ejemplos:
Si bien en el apartado anterior se explicó cuando usar cada
uno de los ciclos, haremos el mismo ejemplo usando los tres
ciclos.

12

6
10-10-2019

Usando diferentes ciclos para resolver el problema

USANDO CICLO FOR, CREAR UN PROGRAMA QUE MUESTRE


LOS PRIMERO 50 NÚMEROS ENTEROS POSITIVOS.

#include "stdio.h"
void main(void) { // USANDO CICLO FOR( )
int c = 1;
/*Lo mismo con for*/
for (int c=1; c<=50; c++){
printf( “ %d \n ", c );
} // cierre del For
} //cierre llaves de programa principal main()

13

Usando diferentes ciclos para resolver el problema


Usando do- While, cree un programa que muestre los primero 50
números enteros positivos.

#include "stdio.h"
void main(void) { // USANDO DO-WHILE( )
int b = 1;
/*Este es un comentario que puede ser de varias lineas*/
do { /* En este caso se ejecuta siempre el código al
menos una vez, ya que la condición se revisa abajo*/
printf("{ %d }\n",b);
b++; // aumento de b en 1
} while(b <= 50); /*este código se ejecutará mientras b sea
menor igual a 50*/
}//cierre del main programa principal

14

7
10-10-2019

Usando diferentes ciclos para resolver el problema


Usando ciclo While, cree un programa que muestre los primero 50
números enteros positivos.

#include "stdio.h"
void main(void) { //USANDO WHILE ( )
int a = 1;
while (a <= 50) {
//mientras a sea menor o igual a 50 iterará
printf("[ %d ]\n",a);
a++; //a++ hace que a aumente de n en 1
}//cierre del ciclo while
} //cierre del programa principal main

15

EJERCICIO 1
 Realizar un programa que pide un número del 1 al 10 y
muestra la tabla de multiplicar correspondiente

int main() {
int T, i;
printf ("Indique la tabla que desea conocer (de 1 a 10): ");
scanf ("%d", &T);
printf("TABLA DEL %d \n", T);
for (i=1; i<=10; i++)
{ printf ("%d * %d = %d \n",T, i, T*i); }
}

16

8
10-10-2019

EJERCICIO 2
 Realizar un programa que muestre todos los enteros
comprendidos entre un número definido por el usuario y 100.

#include <stdio.h>
int main() {
int num, i;
printf ("Introduzca un numero entero comprendido entre 1 y 99: ");
scanf ("%d", &num);
printf ("ENTEROS ENTRE %d y %d \n", num, 100);
for (i=num; i<=100; i++) { printf("%d \t", i); }
}

17

SEMANA 7

18

9
10-10-2019

ESTRUCTURAS DE DATOS
Una estructura de datos o TDA (Tipo de Dato Abstracto),
corresponde a una variable con varios campos y que además
es posible que tenga campos con diferentes tipos de dato.

Es decir, debemos declararla con la palabra reservada struct


de la siguiente manera:
Ejemplo Ejemplo
struct nombreestructura{ struct Agenda{
Tipo_dato1 nombre_variable1; char nombre[20];
Tipo_dato2 nombre_variable2; char apellido[20];
Tipo_dato3 nombre_variable3; int edad;
Tipo_dato4 nombre_variable4; int fono;
} variable1, variable2; } dental, medica;
En este ejemplo hemos declarado dos En este caso declaramos dos variables
variables del mismo tipo que la del tipo de la estructura, una llamada
estructura declarada. dental y la otra medica.

19

ESTRUCTURAS DE DATOS
Otra forma de declarar variables de tipo estructura es:

Ejemplo Ejemplo
struct Nombre{ struct Agenda{
tipo_dato1 nombre_variable1; char nombre[];
tipo_dato2 nombre_variable2; char apellido[];
tipo_dato3 nombre_variable3; int edad;
tipo_dato4 nombre_variable4; int fono;
} }
struct Nombre variable1, variable2; struct Agenda dental, medica;

En este ejemplo se han declarado dos En este caso se han declarado dos
variables del mismo tipo que la variables del tipo de la estructura, una
estructura declarada. llamada dental y la otra médica.

20

10
10-10-2019

ESTRUCTURA DE DATOS

Para movernos por la estructura debemos usar un ‘.’ entre el


nombre de la variable estructura y la variable interior. Por
ejemplo:
dental.nombre;
dental.apellido;
dental.edad;
dental.fono;

Por lo tanto, para usar printf o scanf también es necesario usar


el nombre de la estructura ‘.’ Nombre de variable.

21

ESTRUCTURAS DE DATOS

 Realizando un ejemplo de agenda, se solicitará al usuario ingresar


los datos para un usuario de la agenda médica, y se mostrará en
pantalla:
#include <stdio.h>
int main() {
struct agenda{
char nombre[20]; Continuación…
char apellido[20]; printf("Ingrese edad para la agenda medica");
int edad; scanf("%d",&medica.edad);
int fono; printf("Ingrese fono para la agenda medica");
}medica, dental; scanf("%d",&medica.fono);
printf("Ingrese nombre para la agenda medica"); printf("\n Lo que tenemos guardado en la Agenda");
scanf("%s",medica.nombre); printf(" \n Nombre %s",medica.nombre);
printf("Ingrese apellido para la agenda medica"); printf(" \n Apellido %s",medica.apellido);
scanf("%s",medica.apellido); printf(" \n Edad %d",medica.edad);
printf(" \n Fono %d ",medica.fono);
}

22

11
10-10-2019

ESTRUCTURA DE DATOS
Agrupamos mediante la estructura fecha los campos: día, mes,
año. Ejemplo de estructura e inicialización de la misma:

struct fecha {
int dia;
int mes;
int agno;
};
struct fecha fecha1, fecha2;
fecha1=fecha2;
fecha1.mes=11; //ejemplo de asignación al campo mes.
struct fecha fecha3 = {23, 9, 2019}; //definición e inicialización.

23

ESTRUCTURA DE DATOS
 Ejemplo, usando estructuras de datos o TDA desarrolle un
programa que permita crear un amigo con los datos nombre,
apellido, teléfono y edad, solicite el ingreso de los datos de un
amigo y muéstrelos posteriormente.
#include <stdio.h>
struct amigo {
/* Definimos la estructura amigo */
char nombre[30];
char apellido[40];
char telefono[10];
int edad;
}; struct amigo amigo1;
/* Declaramos la variable amigo1 con esa estructura */
main( ) {
printf( "Escribe el nombre del amigo1: " );
scanf( "%s", &amigo1.nombre );
printf( "Escribe el apellido del amigo1: " );
scanf( "%s", &amigo1.apellido );
printf( "Escribe el número de teléfono del amigo1: " );
scanf( "%s", &amigo1.telefono );
printf( "Mi amigo %s %s tiene el número: %s.\n", amigo1.nombre, amigo1.apellido, amigo1.telefono );
}

24

12
10-10-2019

ESTRUCTURA DE DATOS – CONSIDERACIONES …

 Es posible usar estructuras de datos dentro de arreglos o vectores,


pero esto se verá más adelante.

 Así también, es posible pasar este tipo de dato como parámetros en


las funciones y procedimientos.

 En el uso de punteros las estructuras de datos son fundamentales.

 Todos estos temas los veremos más adelante en esta misma clase.

 Por ahora se recomienda realizar los ejercicios planteados en las


guías de apoyo a las clases.

25

EJERCICIOS
PRÁCTICA

26

13
10-10-2019

EJERCICIO 1 - FOR
1. Realizar un programa que pida un número y diga si es primo o no
#include <stdio.h>
int main(void)
{ int num, cont, x;
printf("Introduzca número: ");
scanf("%d",&num);
cont=0;
for (x=1;x<=num;x++)
{
if (num%x==0) cont++;
}
if (cont==2 || num==1 || num==0)
printf("Es primo\n");
else
printf("No es primo\n");
}

27

EJERCICIO 2 - FOR
2. Realizar un programa que pida dos números y muestre todos los números que van
desde el primero al segundo. Se debe controlar que los valores son correctos.
#include <stdio.h>
int main(void)
{
int num1, num2,x;
printf("Introduzca primer número:");
scanf("%d",&num1);
printf("Introduzca segundo número:");
scanf("%d",&num2);
if (num1>num2)
printf("Los valores introducidos no son correctos \n");
else
for (x=num1;x<=num2;x++)
{
printf("%d\n",x);
}
}

28

14
10-10-2019

EJERCICIO 3 - WHILE
3. Realizar un programa que haga un menú del tipo “desea salir (S/N)” y el programa no
termine hasta que el usuario teclee “S”
#include <stdio.h>
int main(void)
{
char c;
printf("¿Desea salir (S/N)?: ");
scanf("%s",&c);
while (c!='s' && c!='S')
{
printf("Opción incorrecta\n");
printf("¿Desea salir (S/N)?: ");
scanf("%s",&c);
}
}

29

EJERCICIO 4 - WHILE
4. Realizar un programa que visualice los números del 1 al 10
#include <stdio.h>
int main()
{
// Crear variables auxiliares
int contador=0;
// Inicializar el contador
contador=1;
// repetir mientras que el contador tenga un valor inferior a 10
while (contador<11) {
// visualizar el valor de contador
printf("\n%d",contador);
// incrementar contador en una unidad
contador=contador+1;
};
}
// Se ha de tener en cuenta que el no incrementar el contador puede tener como consecuencia
// la ejecución de un bucle infinito y por tanto el bloqueo del programa.

30

15
10-10-2019

EJERCICIO 5 - WHILE
5. Realizar un programa que calcule el factorial de un número cualquiera y lo muestre en
pantalla.
#include <stdio.h>
int main()
{
int num, num2;
printf("Introduce número: ");
scanf("%d",&num);
num2=num;
while (num2!=1){
num2=num2-1;
num=num*num2;
}
printf("El factorial es: %d \n", num);
}

31

EJERCICIO 6 – DO WHILE
6. Realizar un programa que muestre todos los números entre 11 y 21.

#include <stdio.h>
int main()
{
int contador=0;
// Inicializar el contador
contador=11;
do {
// visualizar el valor de contador
printf("\n%d",contador);
// incrementar contador en una unidad
contador=contador+1;
} while(contador<21);
}

32

16
10-10-2019

EJERCICIO 7 – DO WHILE
Realizar un programa que
1º) Pida por teclado un número (dato entero).
2º) Pregunte al usuario si desea introducir otro o no.
3º) Repita los pasos 1º y 2º, mientras que, el usuario no responda 'n' de (no).
4º) Muestre por pantalla la suma de los números introducidos por el usuario.
#include <stdio.h>
int main()
{ char seguir;
printf( "\n Desea introducir otro numero
int acumulador, numero; (s/n)?: " );
/* En acumulador se va a guardar la suma scanf( "%c", &seguir);
de
} while ( seguir != 'n' );
los números introducidos por el usuario. */
/* Mientras que el usuario desee introducir
acumulador = 0;
más números, el bucle iterará. */
do
printf( "\n La suma de los números
{ printf( "\n Introduzca un numero entero: " ); introducidos es: %d",
scanf( "%d", &numero); acumulador );
acumulador += numero; }

33

SEMANA 7

34

17
10-10-2019

ARREGLOS (ARRAY)

Los vectores o arreglos, son estructuras de datos estáticas, se les


denomina estructuras estáticas, ya que no es posible cambiar su
tamaño en tiempo de ejecución.

En términos generales, esta estructura nos permite almacenar


información en posiciones contiguas de memoria, lo que garantiza
que su costo de acceso sea siempre uniforme; si lo comparamos
con una variable.
Variable, es sólo un espacio de memoria, que permite guardar un
dato a la vez.
Vector o arreglo, permiten guardar más de un dato en espacio de
memoria contigua.

35

ARREGLOS (ARRAY)
Arreglos de una dimensión:

 Corresponde a una estructura de datos que está formada por


una colección finita de datos del mismo tipo.

 Costo de acceso a cada dato es constante.

 Almacenamiento contiguo en memoria.

 Se puede crear arreglos de 1 a n dimensiones.

36

18
10-10-2019

ARREGLOS (ARRAY)
Arreglos de una dimensión:

Un arreglo de una dimensión debe tener un tamaño, el cual


determina, la cantidad de espacios de memoria contigua que debe
reservar.

Para poder identificar cada uno de estos espacios o componentes


del vector, aparece el concepto de índice, en lenguaje C, estos
índices siempre comienzan en 0, es decir la primera posición del
vector es 0; gráficamente un vector se puede ver de la siguiente
forma.

37

ARREGLOS (ARRAY)
Arreglos de una dimensión - Declaración

Para declarar un vector o arreglo de una dimensión, tenemos


que indicar el tipo de dato, seguido del nombre, y el tamaño de
este entre corchetes [ ], algunos ejemplos:

 char cadena[15]; declaración de un arreglo de tipo char, con


capacidad para 15 caracteres.

 int numero[10]; declaración de un arreglo de tipo entero, con


capacidad para 10 números enteros.

 float flotantes[5]; declaración de un arreglo de tipo float, con


capacidad para 5 números decimales.

38

19
10-10-2019

ARREGLOS (ARRAY)

Arreglos de una dimensión - Inicialización

La inicialización de un vector, puede realizarse a través del operador


de asignación y el uso de llaves {} algunos ejemplos:

 char cadena[10] = {'a','b','c','d','e','f','g','h','i','j'};

 int numero[10] = {1,15,25,8,7,9,25,12,70,135};

 float flotantes[5] = {3.5,3.7,3.8,3.9,10};

39

ARREGLOS (ARRAY)
Arreglos de una dimensión - Inicialización

También es posible declarar un vector sin especificar el tamaño


entre los corchetes [ ], para lograr hacer esto, es necesario inicializar
el vector junto con la declaración, ya que esta inicialización,
entregará el tamaño del vector, de la siguiente forma:

 char cadena[] = {'a','b','c','d','e','f','g','h','i','j'};

 int numero[] = {1,15,25,8,7,9,25,12,70,135};

 float flotantes[] = {3.5,3.7,3.8,3.9,10};

40

20
10-10-2019

ARREGLOS (ARRAY)

Arreglos de una dimensión - Acceso

Si bien el acceso a los elementos del vector se realiza por medio de


sus índices, de la siguiente forma:

Asuma el vector char cadena[] = {'A','U','T','O','N','O','M','A'};

Si queremos mostrar la letra ‘T’ podemos usar printf para imprimirla


en pantalla de la siguiente forma:

printf("%c",cadena[2]);

Si queremos obtener la letra ‘N’ podemos usar:

printf("%c",cadena[4]);
41

ARREGLOS (ARRAY)
Arreglos de una dimensión - Recorrido

Para recorrer un vector completo podemos usar un ciclo, si bien es


posible hacerlo con ciclo WHILE, para los próximos ejemplos
usaremos un ciclo FOR.

char cadena[] = {'a','b','c','d','e','f','g','h','i','j'};

Para recorrer y mostrar este vector usaremos:

for (int i=0;i < 10;i++){


printf("[%c]",cadena[i]);
}

42

21
10-10-2019

ARREGLOS (ARRAY)
Arreglos de una dimensión - Cadenas o string

Como se ha visto en algunos ejemplos cuando trabajamos con


cadenas de caracteres las podemos inicializar de una forma similar,
a como lo hacemos con los arreglos numéricos; no obstante existe
una manera más simple para inicializar arreglos de tipo cadena:

char cadena[]=“Hola Mundo";

Esto se puede realizar de esta forma, debido a que en rigor las


cadenas de caracteres en C, son vectores de tipo char. Para el
manejo de cadenas existen funciones que nos harán más sencilla la
vida.

43

ARREGLOS (ARRAY)
Arreglos de una dimensión - Cadenas o string

TAREA

 Investigue el uso de la librería string.h


 Investigue el uso de la librería stdlib.h
 Investigue para que su usa #define
 Investigue para que se usa typedef

44

22
10-10-2019

EJERCICIOS DE ARREGLOS

45

EJERCICIO 1
1. Realizar un programa que rellene un vector con los números primos comprendidos
entre 1 y 100 y los muestre en pantalla.
#include <stdio.h>
int main(void) if (cont==2 || z==1 || z==0)
{ int x,cont,z,i,tabla[100]; {
i=0; tabla[i]=x;
for (x=1;x<=100;x++) i++;
{ }
cont=0; }
for (z=1;z<=x;z++) for (x=0;x<i;x++)
{ {
if (x%z==0) printf("%d\n",tabla[x]);
{ }
cont++;
} }
}

46

23
10-10-2019

EJERCICIO 2
1. Realizar un programa que lea 10 números por teclado, los almacene en un vector y
muestre la suma, resta, multiplicación y división de todos.
#include <stdio.h>
int main(void) for (x=1;x<10;x++)
{ int x,tabla[10]; {
int sum,res,mul,div; sum=sum+tabla[x];
for (x=0;x<10;x++) res=res-tabla[x];
{ mul=mul*tabla[x];
printf("Introduzca número\n"); div=div/tabla[x];
scanf("%d",&tabla[x]); }
} printf("Suma: %d\n",sum);
sum=tabla[0]; printf("Resta: %d\n",res);
res=tabla[0]; printf("Multiplicación: %d\n",mul);
mul=tabla[0]; printf("División: %d\n",div);
div=tabla[0]; }

47

EJERCICIO 3
1. Realizar un programa que lea 5 números por teclado, los copie a otro vector
multiplicados por 2 y muestre el segundo vector.
#include <stdio.h>
int main()
{ int aux, numeros1[5],numeros2[5];
int i,j;
for (i=0;i<5;i++){
printf("Escriba un número");
scanf("%d",&numeros1[i]);
}
for(i=0;i<5;i++){
numeros2[i]=numeros1[i]*2;
}
for(i=0;i<5;i++){
printf("%d\n",numeros2[i]);
}
}

48

24
10-10-2019

EJERCICIO 4
Realizar un programa que rellene un vector con los 100 primeros números pares y muestre
su suma.
#include <stdio.h>
int main(void) for (x=0;x<i;x++){
{ sum=sum+tabla[x];
int x,cont,sum,i,tabla[100]; }
printf("%d\n",sum);
i=0; }
#include <stdio.h>
sum=0; int main(void)
for (x=1;x<=200;x++){ { int x, sum,tabla[100];sum=0;
for (x=0;x<100;x++){
cont=0; tabla[x]=2*x;
if (x%2==0){ }
tabla[i]=x; for (x=0;x<100;x++){
sum=sum+tabla[x];
i++;
}
} printf("%d\n",sum);
} }

49

EJERCICIO 5
Realizar un programa que lea 10 números por teclado, los almacene en un vector y muestre
la media.
#include <stdio.h>
int main()
{
float sum, numeros1[10];
int i;

sum=0;
for (i=0;i<10;i++){
printf("Escriba un número");
scanf("%f",&numeros1[i]);
}
for(i=0;i<10;i++){
sum=sum+numeros1[i];
}
printf("%f\n",sum/10);
}

50

25
10-10-2019

EJERCICIO 1
Realizar un programa que

51

BIBLIOGRAFÍA

52

26

También podría gustarte