Você está na página 1de 28

UNIVERSIDAD DE LAS FUERZAS ARMADAS - ESPE

DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIN

INGENIERIA DE SISTEMAS E INFORMATICA

PROGRAMACION I

NRC

Docente: Ing. Cesar Villacis Silva.

Integrantes: ato Alba Omar Suntaxi

Fecha: 30 de septiembre de 2013

INDICE

OBJETIVOS Introducir de forma progresiva y sistemtica una correcta metodologa para la programacin. En la realizacin de los ejemplos y en los ejercicios prcticos propuestos se usa el lenguaje C ++ que permite al alumno comprobar en la prctica que los ejemplos propuestos funcionan. Obtener programas con las mismas funcionalidades pero de menor longitud, es decir obtener programas de calidad Realizar programas claros, y legibles (con comentarios) para facilitar su mantenimiento

Marco Terico UNIDAD I FUNDAMENTOS DE ALGORITMOD C/C++

1.1.

TEORIA DE LA PROGRAMACION ESTRUCTURAL

En mayo de 1966, Bohm y Jacopini, demostraron que en un programa propio puede ser escrito utilizando tres tipos de estructura de control.

a) Secuenciales b) Selectivos c) Repetitivos Un programa que se define como propio si cumple las siguientes caractersticas: Posee un solo punto de entrada y una de salida para el control del programa. Existen caminos desde la entrada hasta la salida; que se pueden seguir y que pasan por todas las partes del programa. Todas las instrucciones son ejecutables y no existen lasos o bucles infinitos (sin fin).

1.2. ALGORITMO Un algoritmo es un mtodo para resolver un problema. 1.2.1. Caractersticas de un algoritmo a) Un algoritmo debe ser preciso. b) Un algoritmo debe ser definido. c) Un algoritmo debe ser finido.

1.3. ESTRUCTURAS DE CONTROL SECUENCIALES Estas estructuras se define como acciones que van una a continuacin de otra, siguiendo una secuencia lgica. SINTAXIS: Accin_1; Accion_2; Accion_3; .

. . Accion_4;

EJERCICIO:

Un sistema de ecuaciones lineales ax + by = c; dx +ey = f , se pueden resolver con las siguientes formulas: X=(ce-bf)/(ae-bd) ; Y=(af-cd)/(ae-bd). Escribir un programa que lea los coeficientes del sistema de ecuaciones y visualice los valores X e Y.

ANALISIS. Datos de entrada: a, b, c, d, e, f: float. Datos de salida: X, Y: float. Formulas relevantes: X= --; Y =----

DISEO. ALGORITMO 1. Leer el valor de a, b, c, d, e, f. 2. Calcular el valor de X. 3. Calcular el valor de Y. 4. Imprimir los valores de X e Y.

IMPLEMENTACION (Codificacin). Visual Studio Visual C++ Aplicacin de Consola Win 32.

Wizard

Asistente.

Seleccin de aplicacin de consola.

Especificadores de Formato % ld % lf %p long (entero largo). doubl (flotante de doble precisin). pointer (puntero).

void main ( ) { }

Procedimiento

int main ( ) { return ; }

Funcion

Estructuras de decisin o seleccin 1.4.1. Definicin Las estructuras de decisin o seleccin controlan la secuencia o flujo de ejecucin de las sentencias 1.4.2. Sentencia if
if (expancion) accin; if (expancion) { Accion 1; Accion2; Accion 3;.Accion n ; }

1.4.3. Sentencia if-else


if (expancion) Accin 1; else Accin 2; --------------------if (expancion) { Accin 1; Accin 2; Accin 3; } else { Accin 2.1;

Accin 2.2; Accin 2.3; }

1.4.4. Sentencia if - else anidados


if (expansin logia 1) Sentencia 1; else if (expresin lgica 3) Sentencia 3; else if (expresin lgica N) Sentencia lgica N; else Sentencia (N+1);

1.4.5. Sentencia de control switch


switch (selector) { case etiqueta 1 : sentencia 1; break; case etiqueta 2 : sentencia 2; Break; case etiquita n : sentencia N break; defaul :sentencia d ; /*opcional*/ }

Ejercicio: Dado la funcin f(x) calcular o evaluar la funcin para un valor dado de x y visualizarlo en pantalla. F(x)= x2 x para x<=0 -x2+3x para x>0

if > < ==
// Versin 1 (Sin Funciones). // Libreras. #include <stdio.h> #include <conio.h> #include <math.h> // Sentencias de Preprocesador o Macros.

else <= >= =

// Prototipos de las Funciones (Declaracin de las funciones). // Programa principal. int main() { // Declarar las variables. float x, y; // Imprimir unos mensajes de informacin. printf("Evaluar la funcin f(x)\n"); printf("x^2 - x para x <= 0\n"); printf("-x^2 + 3x para x > 0\n\n"); // Leer el valor de 'x'. printf("Ingrese un valor para 'x': "); scanf("%f", &x); // Seleccionar el rango en que se encuentra 'x'.

if(x > 0) { y = -pow(x, 2) + 3*x; } else // (x <= 0) { y = pow(x, 2) - x; } // Imprimir el valor de f(x) = y. printf("f(%.2f) = %.2f\n", x, y); // Eco por pantalla. getch(); return 0; }

// Versin 2 (Con Funciones). // Libreras. #include <stdio.h> #include <conio.h> #include <math.h> // Sentencias de Preprocesador o Macros. // Prototipos de las Funciones (Declaracin de las funciones). void ImprimirMensajesInformacion(); float f(float x); float g(float x); void ImprimirResultados(float x, float y); // Programa principal. int main() { // Declarar las variables. float x, y; // Imprimir unos mensajes de informacin. ImprimirMensajesInformacion(); // Leer el valor de 'x'. printf("Ingrese un valor para 'x': "); scanf("%f", &x); // Seleccionar el rango en que se encuentra 'x'. if(x > 0) { // y = -pow(x, 2) + 3*x; y = g(x); } else // (x <= 0) { // y = pow(x, 2) - x; y = f(x); } // Imprimir el valor de f(x) = y. // printf("f(%.2f) = %.2f\n", x, y); ImprimirResultados(x, y); // Eco por pantalla. getch();

return 0; } // Implementacin de las funciones (Definicin de las funciones). void ImprimirMensajesInformacion() { printf("Evaluar la funcin f(x)\n"); printf("x^2 - x para x <= 0\n"); printf("-x^2 + 3x para x > 0\n\n"); } float f(float x) { return(pow(x, 2) - x); } float g(float x) { return(-pow(x, 2) + 3*x); } void ImprimirResultados(float x, float y) { printf("f(%.2f) = %.2f\n", x, y); }

1.5. Bucles o Estructuras de Repeticion 1.5.1 Definicin Los bucles o sentencias repetitivas controlan el numero de veces que una sentencia o lista de sentencias se ejecutan. 1.5.2 sentencia While Sintaxis
1. while (condicin del bucle)

Sentencia; cuerpo del bucle 2. while (condicin_bucle)iteracion { Sentencia 1; Sentencia 2; ..sentencia n; } cuerpo del bucle

1.5.3 Sentencia do-while Sintaxis 1. do sentencia; while (expresion); 2. do{ sentencia 1; sentencia 2; ..sentencia n; } while (expresion); 1.5.4 Sentencia For Sintaxis 1. for (inicializacin1 ; condicin Iteracin ; Incremento /des incremento) Sentencia; 2. for (Inicializacin1 ; condicin iteracin2 ; incremento /des incremento3) { Sentencia 1; Sentencia 2; .. Sentencia n; } Ejercicio: Escribir un programa que calcule el nmero de caloras en funcin de los alimentos consumidos por una persona. Salida: Cuntos alimentos ha comido hoy? 8 Introducir el nmero de caloras de cada uno de los 8 alimentos tomados: 500 50 1400 700 10 5 250 100 Expresin lgica que determina si la accin se repite

Las caloras totales consumidas hoy son : 3015

Num_de_calorias Caloras_por_ alimento


(1 a num_de _alimentos)

PROCESO

total_calorias (acumulador)

1 2

Inicializa la o las condiciones del bucle Expresin lgica que determina si las sentencias se han de ejecutar 3 Incremento o des incrementa la o las variables de control del bucle

//Librerias #include<stidio.h> #include<conio.h> // Programa principal. int main() { //declarar las variables int num_de_elementos; int caloras_por_alimento; int contador; int total_calorias; //leer el numero de elementos printf("Cuntos alimentos ha comido hoy?"); scanf ("%d",&num_de_elementos) //leer

SUMATORIA

Neutro aditivo=0 Acumulador = 0 (inicializar)

PRODUCTO

Neutro multiplicativo =0 Acumulador=1 (Inicializar)

el numero de caloras de cada uno de los alimentos tomados

total_calorias= 0 Contador=1

Print(Introducir el nmero de caloras de cada uno de los %d alimentos tomados: ,num_de elementos)

//Leer y sumar

cada una de las caloras de

los alimentos tomados

while(cotador <= num_de_elementos) { scanf(%d,&caloras_por_alimento); Total_calorias = total_calorias + caloras_por_alimento ;

//Imprimir el total de caloras consumidas Printf("Las caloras totales consumidas hoy son : %d\n",total_calorias);

//eco por pantalla getch(); return 0; }

N de elementos 8

Contador 1 2 3 4 5 6 7 8 9

PRUEBA DE ESCRITORIO Total de calorias Contador<=n de elemntos 0 1<=8 (V) 0+500=500 2<=8 (V) 500+50=550 3<=8 (V) 550+1400=1950 4<=8 (V) 1950+700=2650 5<=8 (V) 2650+10=2660 6<=8 (V) 2660+5=2665 7<=8 (V) 2665+250=2915 8<=8 (V) 2915+100=3015 9<=8 (F)

Caloras por elementos 500 50 1400 700 10 5 250 100

CAPITULO 2. FUNCIONES
2.1. Definicion Una funcin es una unidad de cdigo diseado para ejecutar una cierta tarea. Para ejecutar su tarea, una funcin tpicamente ingresa alguna informacin y/o retorna alguna informacin. 2.2. Estructura de una Funcion Tipo_de_retorno Nombre Funcin (Lista_de_Parametros) { Cuerpo_de_la_funcin Return (expresion); } Tipo_de_retorno : Tipo de valor devuelto por la funcin o la palabra reservada void si la funcin no devuelve ningn valor Nombre funcin: Identificador o nombre de la funcin Lista_de_parametros:Lista de declaraciones de los parmetros de la funcin separados por comas Expresin: Valor que devuelve la funcin EJERCICIO: Escribir un programa que calcule el permetro y el rea de un circulo, utilizando funciones. P=2r rea= r2

2.3. Paso por valor (paso por copia) Paso por valor tambin llamado (paso por copia), significa que cuando C compila la funcin el cdigo que llama la funcin, la funcin recibe una copia de los valores originales en sus parmetros. Si se cambia el valor de un parmetro, el cambio solo afecta a la funcin y no tiene efecto fuera de ella.

PERIMETRO=calcularperimetro(radio) Float calcularperimetro (float r) { Return (2*PI*r) } Ejercicio: r=radio;

radio pertenece a main() r pertenece a Calcularperimetro

Si un proyectil es disparado desde la tierra con un angulo en grados con respecto a la horizontal y con una velocidad inicial de v[m/s] que viaja con una trayectoria parablica . Calcular la distancia recorrida, la altura mxima alcanzada y el tiempo de vuelo del proyectil.
// Calculo de distancia recorrida, alura mxima, tiempo del disparo de un proyectil //Librerias #include<stdio.h> #include<conio.h> #include<math.h> // Sentencias de prepocesador #define G 9.81 #define PI 3.14159 //Prototipos de las funciones void ImprimirMensajedeInformacion(); float ConvertidorGrados(float grados); float CalcularDistancia(float velocidad,float angulo ); float CalcularTiempo(float velocidad,float angulo); float CalcularAltura(float velocidad, float angulo); void ImprimirDatos(float distancia,float tiempo,float altura); // Programa Principal int main () { //Declaracion de Variables float velocidad, grados;

float distancia, tiempo, altura, angulo; ImprimirMensajedeInformacion(); scanf("%f", & velocidad); printf("Ingrese el angulo de inclinacion [grados]\n"); scanf("%f", & grados); angulo=ConvertidorGrados(grados); distancia= CalcularDistancia(velocidad, angulo); tiempo=CalcularTiempo(velocidad, angulo); altura=CalcularAltura(velocidad, angulo); ImprimirDatos(distancia,tiempo, altura); // Eco por pantalla getch (); return 0; } // Implementacion de las funciones void ImprimirMensajedeInformacion() { printf("Calculo de distancia recorrida, alura mxima, tiempo del disparo de un proyectil\n"); printf("Ingrese la velocidad [m/s]\n"); } float ConvertidorGrados(float grados) { return (grados*PI/180); } float CalcularDistancia(float velocidad,float angulo ) { return((pow(velocidad,2)*sin(2*angulo))/G); } float CalcularTiempo(float velocidad,float angulo) { return((2*velocidad*sin(angulo))/G); } float CalcularAltura(float velocidad, float angulo) { return((pow(velocidad,2)*sin(angulo))/G); } void ImprimirDatos(float distancia,float tiempo,float altura) { printf("Distancia= %.4f [m]\n", distancia); printf("Tiempo= %.4f [s]\n", tiempo); printf("Altura= %.4f [m]\n", altura); }

Ejercicio: Calcular el permetro y el rea de un tringulo mediante las siguientes formulas: S= (a+b+c)/2 P=2s Area = (s(s-a)(s-b)(s-c))1/2 Donde s es el semiperimetro siendo a,b,c los tres lados del triangulo Teorema un tringulo existe si (a+b)>c ^ (b+c)>a ^ (a+c)>b

Ejercicio: Se desea calcular el salario de un trabajador de acuerdo a las siguientes normas a) Si gana hasta 300 no paga impuestos. b) Si gana entra 300 y 1000 paga el 12% de impuestos. c) Si gana mas de 100 paga el 15% de impuestos. Considerar para todos los casos el aporte al IESS que es del 8% del salario. Considerar que el trabajador tiene un prstamo hipotecario del 40% de su salario.
/librerias

#include <stdio.h> #include <conio.h> #include <math.h> //prototipos de las funciones

void mensajeinformacion(); float calcularimpuestos(float salarioneto); float calculardescuestos(float salarioneto); float calcularsalariototal(float salarioneto,float impuestos, float descuentos); void imprimirsalariototal(float salariototal); //progrma principal int main() { //DECLARACION DE VARIABLES float salarioneto; float descuentos; float salariototal; float impuestos;

//mensaje de informacion //printf("calculo del salario de un trabajador.\n"); mensajeinformacion(); //leer datos. printf("ingrese el salario neto:");scanf("%f",&salarioneto);

//validar el valor de los impuestos. /*if(salarioneto>0 && salarioneto<=300) { impuestos=0.0f; } if(salarioneto>300 && salarioneto<=1000) { impuestos=0.12f*salarioneto; } if(salarioneto>1000) { impuestos=0.15f*salarioneto; }*/ impuestos=calcularimpuestos(salarioneto);

//calculo los descuestos.

/*aporteiess=0.08*salarioneto; hipoteca=0.40*salarioneto;

salariototal=salarioneto-impuestos-aporteiess-hipoteca; */

descuentos= calculardescuentos(salarioneto); salariototal=calcularsalariototal( salarioneto ,impuestos, descuentos); // imprimir el salariototal //printf("el valor del salario total es:%.2f\n",salariototal); imprimirsalariototal(salariototal); getch(); return 0; }

//implementacion de funciones (definiciones de las funciones) void mensajeinformacion() { printf("calculo del salario de un trabajador.\n"); } float calcularimpuestos(float salarioneto) { if(salarioneto>0 && salarioneto<=300) { return(0.0f); } if(salarioneto>300 && salarioneto<=1000) { return(0.12f*salarioneto); } if(salarioneto>1000) { return(0.15f*salarioneto); }

} float calculardescuentos(float salarioneto) { float aporteiess,hipoteca; aporteiess=0.08*salarioneto; hipoteca=0.40*salarioneto; return(aporteiess+hipoteca); } float calcularsalariototal(float salarioneto,float impuestos, float descuentos) { return(salarioneto-impuestos-descuentos); }

void imprimirsalariototal(float salariototal) { printf("el valor del salario total es:%.2f\n",salariototal); }

Ejercicio: Escribir un programa que visualice la siguiente figura: por ejemplo cuando n=5 * *** ***** ******* *********
//librerias #include<stdio.h> #include<conio.h> #include<math.h>

//prototipos de las funciones void dibujartrianguloisosceles(int num_lineas); void dibujarrombo(int num_lineas); void dibujarespaciosenblancos(int num_lineas, int fila); void dibujarasteriscos(int filas); //programa princial.

int main()

{ int num_lineas; //leer datos printf("n:"); scanf("%d",&num_lineas); //dibujartrianguloisosceles(num_lineas); dibujarrombo(num_lineas), getch(); return 0; } //implementacion de las funciones

//version 2

void dibujartrianguloisosceles(int num_lineas) { int fila; //bucle externo for(fila=1;fila<=num_lineas;fila++) { //llamada de la funcion dibujarespaciosblancos dibujarespaciosenblancos(num_lineas, fila);

//llamada a la funcion dibujarasteriscos //dibuja el numero de asterisco en la pantalla dibujarasteriscos( fila); printf("\n"); } } void dibujarrombo(int num_lineas) { int fila; dibujartrianguloisosceles(num_lineas); for(fila=num_lineas-1;fila>0;fila--) { //llamada de la funcion dbujarespaciosblancos dibujarespaciosenblancos(num_lineas, fila);

//llamada a la funcion dibujarasteriscos //dibuja el numero de asterisco en la pantalla dibujarasteriscos( fila);

printf("\n"); } } void dibujarespaciosenblancos(int num_lineas, int fila) { int blancos; //bulce interno que controla el numero de blancos

for(blancos=num_lineas-fila; blancos>0;blancos--) { printf(" "); } } void dibujarasteriscos(int fila) {

int asteriscos; //bucle internop que controla el numero de asteriscos

for(asteriscos=1;asteriscos<2*fila;asteriscos++) { printf("*"); } }

Ejercicio: Escribir un programa que resuelva las siguientes series numricas n!=1*2*3*4*.n ( )

// Libreras. #include <stdio.h> #include <conio.h> #include <math.h> // Prototipos de las funciones. float Factorial(float m); float sucesion1(float n); float Serienumeroe(float n, float x); float Seriesenox(float n, float x); void Imprimirresultado(float r); // Programa principal. int main() { float n ; float x ;

float resp;

resp= Factorial(n);

resp = Sucesion1 ();

resp= Serienumeroe(n , x);

resp=seriesenx(n,x) }

// Implementacin de las funciones.

float Factoria(float m) { float j, prod; for(j=1,prod = 1 ; j<=m; j++) prod = prod *j ; return prod; } float Sucesion1(float n) { float i,sum ; for(i = 1, sum = 0; i < n; i++) {

for(j = 1, prod = 1; i <= n; i++) { prod = prod * i;

return sum } float Serienumeroe(float n, float x) { float i, sum ;

for(i = 0, sum=0; i <= n-1; i++) { sum=sum+pow(x,i)/Factorial(i); return sum;

} void Imprimirresultado(float r) { } float Seriesenox(flaot n, float x) { float i, sum;

for(i = 0, sum=0; i <= n-1; i++) { sum=sum+(pow(-1,i)*pow(x,2*i+1))/Factorial(2*i+1); } return sum; }

Ejercicio: Escribir un programa que imprima una tabla de multiplicacin donde se ingresan los valores mnimos y mximos de la tabla y el lmite de la tabla.

2.4. Pasos por parmetros por direccin Cuando una funcin debe modificar el parmetro de direccin pasado y devolver este valor modificado a la funcin llamadora que puede ser el programa principal, se ha de utilizar el paso de parmetros por direccin, donde se usan punteros. 2.4.1. Punteros Un puntero es una variables especial que almacena la direccin de memoria de otra variable, del mismo tipo de dato que fue creado el puntero. a) Definicin y uso de punteros Como cualquier tipo de variable, un puntero debe haber sido definido antes de que ste pueda ser utilizado, por ejemplo: Int * ptr; prt es el nombre del puntero * significa que ptr es un puntero ptr puede ser urilizado para apuntar a variable de tipo entero b) Int c; c=3; int*ptr; ptr=&c; int c=3; int*ptr=&c Inicializadion de punteros

al puntero ptr se le asigna la direccin de memoria de ubicacin de la variable MAPA DE MEMORIA (RAM) VARIABLE Int c; int * ptr =&c; c=3 ptr=FFF1 * * DIRECCIONES FFF0 FFF1 FFF2 FFF3

* c accede al contenido del puntero

c) Introduction a los lvalues y rvalues Diagrama de Bloques de Direcciones ptr=&c lvalue=FFF3 c=3 lvalue=FFF1 rvalue=3 d) El operador de indireccion * El operador de indireccion en un puntero permite acceder al contenido de lo que apunta dicho puntero y modificar ese contenido (manipular la variable que apunta el puntero).

Escribir un con funciones que permita leer dos nmeros desde el teclado y luego invertir dichos nmero, intercambiando sus contenidos.
///librerias #include<conio.h> #include<stdio.h>

//prototipo o declaracion de funciones void invertirdatos(int x, int y); void imprimirdatos(int x, int y); void leerdatos(int *px, int *py); void invertirdatos(int *px, int *py); //programa principal int main() { int a,b;

//leer los valores de a y b //printf("Ingrese el primer valor: ");scanf("%d",&a); //printf("Ingrese el segundo valor: ");scanf("%d",&b); leerdatos(&a,&b); //Imprimir los valores originales imprimirdatos (a,b); //Invertir los numeros invertirdatos (&a,&b); //imprimir valores invertidos imprimirdatos(a,b); getch (); return 0; } //implementacion de funciones void invertirdatos(int x, int y) { int temp; temp = x; x=y; y=temp;

} void invertirdatos(int *px, int *py) { int temp; temp=*px; *px=*py; *py=temp;

} void leerdatos(int *px, int *py) { printf("Ingrese el primer valor: \n printf("Ingrese el segundo valor: \n } void imprimirdatos(int x, int y) { printf("a=%d y b=%d\n",x,y); } ");scanf("%d",px); ");scanf("%d",py);

2.5. Paso de Parmetros por Referencia Una referencia es esencialmente un alias para una variable. Dada un referencia R a una variable A, se puede acceder directamente a la variable A con la referencia R, donde se dice que R se refiere a A. Para tomar un referencia se deben tomar en cuenta los siguientes aspectos: a) Se debe especificar el tipo de variable a la cual la referencia se va a referir. b) Se debe utilizar el operador binario de direccin (&).

c) Se debe utilizar un nombre para la referencia. d) Se debe inicializar la referencia con el valor especifico de la variable a la cual se va a referir. Por ejemplo:
int a = 10; // se crea una variable llamada 'a' int & ref_a = a; //se crea un referencia a la variable 'a' ref_a = 5; printf("a=%d\n",a);

Sobrecarga de Funciones La sobrecarga de funciones se refiere a que una funcin puede tener el mismo nombre pero diferente firma (diferentes parmetros), lo cual le permite tener o asumir un comportamiento diferente en un programa.

Ejerciocio

Ejercicio: Calcular las races de la funcin cuadrtica y=ax^2+bx+c a) Raices reales > b) Raices imaginarias <0 c) Raiz nica =0

CONCLUCIONES Y RECOMENDACIONES CONCLUCIONES En conclusiones hemos aprendido a realizar programas con las mismas funcionalidades pero mediante funciones hemos logrado hacer un programa mas corto. El uso de punteros y referencias hacen que nuestro programa sea mas legible y por ende mas fcil para realizar mantenimientos RECOMENDACIONES Se recomienda el uso de Funciones en todos los programas para reducir su tamao. Es recomendable comentar todo programa para mejorar su legibilidad. Se recomienda en especificar las variables de tipo int, no es necesario ya que Visual estudio reconoce a una variable no especificada como int, pero para mejorar su lectura es mejor especificarlas. BIBLIOGRAFIA Evelio Granizo 2da Ed Joyanes Aguilar 3ra Ed.

Você também pode gostar