resumen fundamentos de programación c+-

Upload: ito

Post on 11-Jul-2015

266 views

Category:

Documents


0 download

TRANSCRIPT

TEMA_1 ---------------------------------- Introduccin1. Mquinas y programas Qu es la Informtica? Ciencia que estudia el tratamiento automtico y racional de la informacin. Qu es un sistema informtico? Es el conjunto de elementos necesarios para llevar a cabo el tratamiento automtico de la informacin. Partes de un sistema informtico Mquina (Hardware) Programa (Software): Programas base Programas de aplicacin Programa + Mquina base = (PC ms el sistema operativo) Computador = sistema informtico = mquina programable 2. Programacin e ingeniera del software Qu es un algoritmo? Conjunto de pasos necesarios para resolver un determinado problema. Los algoritmos deben ser: - Correctas - Claros - Eficientes Qu es un programa? Es la implementacin o codificacin de un determinado algoritmo en uso de algn lenguaje de programacin. Lenguaje de programacin: Conjunto de smbolos y reglas para crear programas. Programacin e ingeniera del software? Programacin = En general se encarga de desarrollar programas a pequea escala. Ingeniera del software = Conjunto de etapas necesarias para desarrollar programas a gran escala y de gran calidad. Etapas de la ingeniera del software: Anlisis Diseo Codificacin Pruebas y Mantenimiento

3. Compiladores y interpretes Qu es un traductor? Es un programa que traduce el cdigo fuente de un programa a un cdigo que pueda entender la CPU. Hay dos tipos de traductores: Compiladores Intrpretes Diferencias entre ellos? 1

Archivo fuente COMPILADORES Archivo ejecutable nombre.cpp nombre.exe

Escribimos el programa con el cdigo correspondiente (archivo fuente):

Compilamos el fichero fuente:

Una vez ya tenemos el programa compilado sin ningn error ya podemos ejecutarlo:

4. Modelos abstractos de programacin Actualmente existen diferentes modelos de programacin (o paradigmas de programacin): - Programacin funcional - Programacin lgica - Programacin imperativa - Modelo de flujo de datos - Programacin orientada a objetos (POO)

2

TEMA_2 --------------- Elementos_bsicos1. Notacin BNF (Backus-Naur Form) Es el conjunto de reglas gramaticales en las que se basa un lenguaje de programacin. Para describir estas reglas se utilizan una serie de metasmbolos: :: = Metasmbolo de definicin | Metasmbolo de alternativa { } Metasmbolo de repeticin [ ] Metasmbolo de opcin ( ) Metasmbolo de agrupacin Las reglas BNF tendrn dos tipos de elementos: Elemento_terminal: Son elementos que forman parte del lenguaje C+ Elemento_no_terminal: Estn definidos a partir de los elementos terminales a partir de las reglas de produccin. Ejemplo: Elementos bsicos BNF (Pg 435 del libro) Valor_entero ::= [+ | -] secuencia_dgitos Secuencia_digitos ::= Digito {Digito} Digito ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Valor_real ::= Valor_entero [Secuencia_digitos] [Escala] Escala ::= E Valor_entero Etc, ... 2. Valores y tipos Datos de entrada Programa Datos de salida

1

3. Tipos predefinidos Tipo entero (int) Este tipo puede tomar valores positivos y negativos. El rango de valores que puede tomar depende de la plataforma (combinacin de procesador, sistema operativo y compilador) utilizada. Tamao de palabra Rango de valores enteros 16 bits -32768 ... 0 ... 32768 32 bits -2147483648 ... 0 ... 2147483648 64 bits -9223372036854775808 ... 0 ... 9223372036854775808 Para poder controlar los valores mximo y mnimo que podemos utilizar no es preciso recordar estos valores, podemos utilizar las constantes INT_MAX y INT_MIN que estn en la librera Las operaciones que podemos hacer con estos datos son: Ejemplo x%y x/y x*y x-y x+y Significado Mdulo o resto Divisin Multiplicacin Resto Suma Operador % / * +

Con los enteros se cumplir siempre: a = b * (a / b) + (a% b) Tipo real (float) Este tipo puede tomar valores positivos y negativos, y puede tener una parte decimal. Es una representacin no exacta. El rango de valores que puede tomar depende de la plataforma (combinacin de procesador, sistema operativo y compilador) utilizada. Tamao de palabra y precisin 32 bits; 6 cifras decimales Rango de valores enteros -3.4E +38 ..- 1.2E-38 O 1.2E-38 .. +3.4 E +38 -1.7E +308 ..- 2.3E-308 O +2.3 E-308 .. +1.7 E +308

64 bits; 15 cifras decimales

Para valores reales no se cumple siempre que: (a / b) * b = a Tipo carcter (char) Lo utilizaremos para manejar caracteres imprimibles: "A", "a", "B", "b", ... ."@","{", .... y no imprimibles: RETURN, ESCAPE, F1, F2, .... Incluye la prctica totalidad de caracteres utilizados en el Mundo Para hacer referencia a un carcter de la mesa del cdigo ascii podemos hacer uso de la funcin char(x): char(13) Tecla Return char(27) tecla ESCAPE char(65) letra "A" Tambin podemos hacer referencia al lugar de la tabla que ocupa un carcter en uso de la funcin int(c): 2

int ("A") 65

int ("Z") 90

Evidentemente se cumplir:char (int (c)) = c int (char (x)) = x

Si hacemos uso de la librera podemos utilizar las siguientes funciones para a manejar caracteres: isalpha(c) Comprueba si c es una letra o no isascii(c) Comprueba si c es un carcter ASCII isblank(c) Comprueba si c es un espacio en blanco o tabulacin iscntrl(c) Comprueba si c es un carcter de control o no isdigit(c) Comprueba si c es un dgito decimal (0 .. 9) o no tolower(c) Pasa a minscula el carcter c toupper(c) Pasa a mayscula el carcter c 4. Expresiones aritmticas Si no se utilizan parntesis el orden de prioridad en una expresin es: 1. Operadores multiplicativos * / % 2. Operadores aditivos + Ejemplos:5 * 30 + 5 = 155 float (45) = 45.0 334 / 6 % 4 * 5 = 15 int (56.8) = 56 -5 * 10% 3 / 2 = -1 nt (33.7) / 5 = 6 33 / int(5.3) = 6 25 * int (3.5) = 75

5. Operaciones de escritura simples El procedimiento printf est en la librera y sirve para mostrar o escribir por pantalla un valor: Ejemplos: printf ("Introduce tu nombre:"); printf ("---- Bienvenido a este programa --- \ n "); Cuando a parte de texto queremos mostrar valores numricos, la funcin printf necesita saber el tipo de datos que tiene que escribir para saber cmo las ha de escribir. El formato o forma de utilizar esta funcin es: printf ("cadena con formatos", valor1, valor3, ... valorN); El especificador de formato tendr el siguiente aspecto: % [Flags] [largo] [. Ruego] [h | l | L] tipo Nota: no es obligatorio el signo de % de principio del especificador, y el tipo de datos que se quiere mostrar. Esto es lo ms normal y lo que se ve en esta asignatura. En caso de que se quiera especificar ms los datos de salida se utilizan los dems parmetros, que estn entre "corchetes". Ejemplos: printf ("%d", 120/12) 10 printf ("Resultado = %d", 120/12) Resultado = 10 printf ("Datos: %d # %d", 23 * 67, -50) Datos: 1541 # -50 printf ("Resultado = %5d", 120/12) Resultado = ... 10 printf ("Resultado = %3d", 100 * 34) Resultado = 34000 printf ("Datos: %7d # %5d", 23 * 6, -50) Datos: ... .138 # ..- 50 printf ("Resultado = %10.3f", 1.2) Resultado = ... .. 1.200 printf (Resultado = %10.4e ", 23.1 * 67.4) Resultado = 0.1557E +04 printf ("Resultado =% 15.3g",-50.6E-6) Resultado = ... ..- 0.506E-04 3

Los tipos habituales: Una cadena de caracteres: s Un carcter: c Valor real con / o sin notacin exponencial, con un nmero dado de decimales de precisin .Los ceros y puntos decimal salen si es necesario: g Valor real con notacin exponencial e [+/-] ddd. e Valor real (punto fijo) de la forma [-] dddd.dddd. f Entero decimal (un entero): d Nota: %10.3f real en coma fija que reserva 10 espacios y una precisin de 3 decimales 6. ESTRUCTURA DE UN PROGRAMA EN C / C + CABECERA DEL PROGRAMA / * Nombre del programa. Autor * / / * Descripcin del programa * / LLAMADAS EN LIBRERAS Y #include DEFINICIONES DE CONSTANTES const tipo nombre_constante = valor DECLARACIN DE FUNCIONES tipo_dato funcin A (parmetros) tipo_dato funcin B (parmetros) DECLARACIN DE VAIABLES GLOBALES int a; float b; FUNCIN PRINCIPAL tipo_dato main () { instrucciones } De momento la estructura que utilizaremos ser esta: / * Comentario del que hace el programa y el autor * / LIBRERIA STANDARD DE ENTRADA Y SALIDA #include FUNCIN O BLOQUE PRINCIPAL int main () { instrucciones } Ejemplo: /************************************* Programa que muestra una frase por pantalla Autor: Xavi Fontana *************************************/ #include int main () { printf ("Introduce tu nombre: "); } 4

TEMA_3 --------- Constantes_y_variables1. Identificadores Datos de entrada Programa Datos de salida Cualquier dato que se utiliza en un programa tiene asociada los siguientes atributos: Identificador Tipo Valor Reglas para identificador: -Palabra formada por caracteres alfabticos o numricos -No valen los espacios en blanco ni signos de puntuacin -Es necesario que comience por una letra -Pueden utilizarse las 52 letras maysculas y minsculas del alfabeto ingls, la barra de subrayado y los dgitos de 0 a 9. La regla BNF para un identificador: ID ::= letra {letra | guin | Dgito} Seran identificadores vlidos: Indice, precio, precio_base, nota1, nota20 No seran vlidos: 3nota, precio$, # Precio, ao, da del mes, 50 C + + distingue entre maysculas y minsculas, por lo tanto los siguientes identificadores haran referencia a datos diferentes: Diasemana, diasemana, DIASEMANA, diaSemana Hay palabras que no se pueden utilizar como identificadores, aquellas palabras que forman parte dela sintaxis propia de C+- (palabras reservadas): main, int, float, char, const, void, true, if, else, for, while, case, struct, new, private, and, or, don, this, ... 2. Constantes Son datos que mantienen su valor durante toda la ejecucin del programa. La forma de declarar una constante es: const tipo nombre = valor; Ejemplos: const float Pi = 3.14159265; const float NumeroE = 2.718281828459; const int largo = 50; const float radio = 5.10; Tambin se puede declarar una constante basndose en otra ya declarada: const float dimetro = 2 * radio; const float perimetro = 2 * Pi * radio; Qu ventaja puede tener el hacer uso de constantes con nombre a un programa? 3. Variables Son datos que pueden ir variando su valor durante la ejecucin del programa. La forma de declarar las variables es: tiposdevariable nombreVariable; Ejemplos: int da; int da, mes, ao; float precio; float precioneto, preciobruto; 1

char tecla; Podemos dar valores iniciales a las variables en la misma declaracin: char tecla ="*"; float suma = 0; Asignacin de variables Instruccin que nos permite darle un valor a una variable o tambin podemos hacerlo en cualquier momento de la ejecucin del programa: suma = 100; suma = suma + valor; tecla = 'x'; area = base * altura; El requisito que debe tener una asignacin es que en la parte izquierda debe hay habr una nica variable en la parte derecha puede hay habr una constante o una expresin. Sentencias de autoincremento y autodecremento Cuando tengamos una asignacin de esta forma: variable = variable +1; Se puede simplificar con: variable + +; Cuando tengamos una asignacin de esta forma: variable = variable - 1; Se puede simplificar con: variable - -; Compatibilidad de tipos Una sentencia de asignacin puede resultar confusa si el tipo de variable y el del resultado de la expresin son diferentes (de igual manera ocurre con una operacin aritmtica antro operandos de distinto tipo. C +- no es "fuertemente tipado" y permite estas ambigedades. Para salvar estas ambigedades C +- convierte previamente de forma automtica el valor a asignar al tipo del valor de la variable. As, para mejorar el estilo de programacin se recomienda hacer la conversin: int saldo; float gastos; .... saldo = int (gastos); 4. Lectura de variables Para leer variables desde el teclado hacemos uso de la funcin scanf que est en la librera :scanf (cadena con formatos, &variable1, &variable2, ... ...., variables); scanf ("%d", &a); lee

un valor entero por teclado, el valor se asigna a la variable int a. scanf ("%c", &a); lee un valor de tipo carcter y se le asigna a la variable a. scanf ("% f", & a); lee un valor real para teclado, y ese valor se le asigna a la variable real a.

2

Podemos leer varias variables con una nica instruccin scanf:int dia, mes, anno; ... ... ... printf (Introduce da mes y ao: "); scanf ("%d %d %d", &dia, &mes, &anno);

Apretando una vez INTRO :

O apretando 3 veces INTRO:

O tambin se puede hacer con varias instrucciones scanf:

Ejemplo: Programa que nos calcula las operaciones bsicas entre dos nmeros

3

Ejemplo: Programa que nos pide una cantidad total de segundos y tenemos que convertirlo en horas, minutos y segundos.

Ejemplo: Programa que calcula el rea y el volumen de un cilindro a partir del radio y de la altura.

4

TEMA_4 --------------------- Metodologa 11. Introduccin En este tema se presentan algunas recomendaciones a la hora resolver un problema y a la hora de su codificacin. No aporta ningn cdigo nuevo. 2. Descomposicin en subproblemas (tcnica de refinamientos sucesivos) A la hora de resolver problemas complejos lo mejor es intentar descomponer el problema en subproblemas ms pequeos y ms fciles de resolver. Por ejemplo si nos piden hacer el siguiente programa:

Si intenta hacer este programa veris como es muy difcil sacar una solucin sin descomponer el problema. La tcnica de refinamientos sucesivos consistir en sacar una solucin dividiendo el problema en subproblemas ms sencillos y combinando la solucin de estos subproblemas: - Pintar la parte izquierda superior del rombo - Pintar la parte derecha superior del rombo - Pintar la parte izquierda inferior del rombo - Pintar la parte derecha inferior del rombo 3. Aspectos de estilo Encolumnado Comentarios Eleccin de nombres Uso correcto de maysculas y minsculas Constantes con nombre

1

TEMA_5 --------- Estructuras_de_control1. Introduccin Si nos piden hacer los siguientes tipos de programas: "Hacer un programa en C / C + + que lee un nmero entero N desde teclado y nos muestre por pantalla si es par o impar ". "Hacer un programa en C / C + + que nos calcula y muestre la nota media de N alumnos (N ledo por teclado) ". Con las instrucciones vistas hasta ahora no los podramos hacer, necesitamos lo que llamamos estructuras de control (una estructura condicional para el primer programa y una estructura repetitiva o iterativa para el segundo). La programacin estructurada utiliza estas estructuras de control: Secuencia Seleccin o condicional iterativa o repetitiva 2. Estructura secuencia Las estructuras secuenciales estn formadas por un conjunto de instrucciones que se ejecutarn siguiendo el orden que estn en el programa.#include int main () { instruccion1 instruccion2 ...... instruccionN }

3. Estructura condicional de seleccin. Sentencia IF Se utilizan cuando se quiere ejecutar un grupo de instrucciones u otro grupo dependiendo de un valor o condicin. Tiene uno de los dos formatos siguientes if (condicin) { if (condicin) { accin 1; accin 1; } } else { accin 2; } Ejemplo: Programa que comprueba si un nmero es par o impar.

Ejemplo: Supongamos que una entrada al cine vale 8 y que hay un descuento segn la edad del espectador: Se quiere hacer un programa que nos calcula el total a pagar a la edad del espectador.75% Ms de 65 aos 0% De 18 a 65 aos 50% De 6 a 18 aos 100% De 0 a 6 aos

1

Otra forma de hacerlo es utilizando estructuras IF anidadas:

Ejemplo: Programa que nos muestre un men con varias opciones y que segn la opcin elegida se ejecute un programa u otro:

2

4. Estructura repetitiva o iterativa Supongamos que queremos aadir una opcin al men para salir y que el programa se repita hasta que nosotros apretamos la opcin de salir:

Para poder hacer esto necesitamos otra estructura de control, concretamente una estructura de control iterativa. La estructura es:while (condicin) { Accin 1 Accin 2 ... ... .... Accin N }

3

Ejemplo: Programa que nos calcula el factorial de un nmero N.

Ejemplo: Programa que nos calcula la media de N notas (N es leido por teclado):

4

5. Estructura repetitiva FOR Se utiliza cuando sabemos de antemano cuantas repeticiones queremos realizar. Su sintaxis es:for (int index=valorInicial; ndice = valorFinal; ndice - -) { Acciones }

Ejemplo: Programa que muestra los nmeros pares que hay entre 1 y N (N es introducido por teclado)

Qu modificacin harais para que aparte de mostrarles desde 1 a N nos los muestre desde un nmero a otro y nos calcule la media de los pares?

5

TEMA_6 ---------------- Metodologa 21. Introduccin En este tema: -Se vuelve a hablar de la tcnica de refinamientos sucesivos, ahora aprovechando el uso de las estructuras de control de seleccin y de repeticin. -Se parte de la idea de verificacin de programas. -Se habla de eficiencia 2. Uso de esquemas de seleccin e iteracin Esquemas de seleccin Habr que: a) Identificar cada una de las alternativas del esquema y las acciones correspondientes. b) Identificar las condiciones para seleccionar una alternativa u otra. Ejemplo: Desarrolla un esquema de seleccin para calcular cuntos das tiene el mes de Febrero de un determinado ao: a) Las alternativas es que tenga 28 o 29, y las acciones ser asignar ese valor a una variable: das = 28 o bien das = 29 b) La condicin para elegir una accin u otra es que el ao sea bisiesto o no. De forma simplificada (pero vlida para los aos 1901 y 2099) es que el ao sea mltiplo de 4: ao%4 == 0 El esquema de seleccin sera: El esquema de seleccin simplificado sera:if (ao% 4 == 0) { das = 29; } else { das = 28; } das = 28; if (ao% 4 == 0) { das = 29; }

Esquemas de iteracin Habr que: a) Identificar las acciones tiles a repetir y las variables necesarias. Precisar el significado de estas variables al principio y final de cada repeticin. b) Identificar como actualizar la informacin a pasar de cada iteracin a la siguiente. c) Identificar la condicin de finalizacin. d) Identificar los valores iniciales de las variables antes de entrar al bucle. Ejemplo: Desarrolla un esquema repetitivo que imprima la series de Fibonacci. Cada trmino de esta serie se obtiene sumando los dos anteriores. La serie comienza con los trminos 0, 1, .. a) Acciones tiles a repetir: Imprimir un trminoprintf ("%10d \ n", termino);

Variables necesarias: El trmino a imprimir.int termino;

Valor al comenzar la repeticin: ltimo trmino impreso hasta el momento. b) Actualizar las variables al pasar de una repeticin a otra: Antes de imprimir, calcular el trmino actual a partir de los dos anteriores (hay que tener almacenado el ltimo trmino).aux = termino + anterior; anterior = termino; termino = aux;

Variables adicionales: El penltimo trmino y una variable auxiliar.int anterior; int aux;

c) Condicin de finalizacin: El trmino siguiente superar el rango de los enteros. Hay que evaluar la condicin sin calcular explcitamente el valor de ese trmino, porque se producira overflow (desbordamiento de memoria).INT_MAX-termino < anterior

1

d) Valores iniciales de las variables Los dos primeros trminos 0 y 1anterior = 0; termino = 1;

El esquema iterativo o bucle sera:int termino, anterior, aux; anterior = 0; termino = 1; while (INT_MAX - termino> = anterior) { aux = termino + anterior; anterior = termino; termino = aux; printf ("%10d\n", termino); }

3. Verificacin de programas Un programa es correcto si produce siempre los resultados esperados de acuerdo con la especificacin del programa. Una forma de verificar un programa es mediante ensayos. Consiste en ejecutar el programa con unos datos preparados de antemano y a los que sabemos cul ser el resultado correcto. Si con la ejecucin del programa con estos datos se obtienen los resultados esperados no podemos afirmar que el programa sea correcto ya que puede tener un caso concreto y no probado que d resultados inesperados. La nica forma de verificar un programa es con una demostracin formal utilizando la lgica de predicados. 4. Eficiencia de programas. Complejidad. El coste que tiene un programa va a estar en funcin de los recursos que consume. Recursos son la memoria, el tiempo de procesador y el tiempo que tarda en ejecutarse. Nosotros slo nos fijaremos en el tiempo que tarda un algoritmo en ejecutarse, que vendr en funcin del nmero de instrucciones que ejecuta. No vamos a utilizar ninguna unidad de medida de tiempo sino que utilizaremos una notacin formal (una cota superior del nmero de instrucciones a ejecutar en el peor de los casos). Estas notaciones especiales se llaman anotaciones asintticas y son las siguientes ordenadas de mayor a menor eficiencia. O (1)