85

Universidad Nacional de Salta Facultad de Ingeniería Estructuras de Datos simples, operadores aritmético-lógicos, Estru

Views 420 Downloads 8 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Universidad Nacional de Salta Facultad de Ingeniería

Estructuras de Datos simples, operadores aritmético-lógicos, Estructuras Control básicas. APUNTES DE CÁTEDRA 4.1 (versión 1ºcuat.2015)

2°cuat.1°año de las Ing’s del Ciclo Común de Articulación 1° año Ingenierías de Univ.Nac.del Noroeste ACTIVIDAD DE CLASE

TEÓRICO / PRÁCTICO

Prof.Adj. (a cargo): Lic. José Ignacio Tuero JTP’s:

Lic. Néstor Javier Hurtado Lic. Leopoldo E. Lugones

Colaboraron versiones originales: Lic. Pablo Wolmy Lic. Patricia Aballay Ing. Fabián Montelongo

Univ.Nac.de Salta – Fac. de Ingeniería – INFORMÁTICA (C.C.A.)

Apuntes de Cátedra

Tabla de Contenidos Tabla de Contenidos ..................................................................................................................................................... 2 4 – Orígenes del lenguaje de programación de alto nivel de abstracción C y derivados ....................................... 3 4.1 - Características de C y C++ .................................................................................................................................. 3 4.2 - Conceptos y macro-pasos para desarrollar Programas .................................................................................... 4 4.3 - Estructura de un programa en C ó C++ ............................................................................................................. 5 4.3.1 – Consideraciones generales de un programa C ó C++: .................................................................................... 5 4.3.2 – Zonas de un programa C ó C++ (analogías con SLE): ................................................................................... 5 4.3.3 - Tabla de correspondencias SLE  C ó C++ ............................................................................................... 6 4.3.4 - Reglas Generales de C ó C++ .......................................................................................................................... 6 4.3.5 - Instrucciones de la Entrada / Salida de información, similitudes y diferencias entre C y C++ -: .................... 7 4.4 – Identificadores y “Palabras reservadas” ........................................................................................................... 8 4.5 - Variables................................................................................................................................................................ 8 4.5.1 - Tipos de datos predefinidos en el lenguaje de programación .......................................................................... 9 4.5.2 - Declaración de variables .................................................................................................................................. 9 4.6 – Operadores y Asignación .................................................................................................................................. 10 4.6.1 – Operadores de Asignación ............................................................................................................................ 10 4.6.2 – Operadores Aritméticos ................................................................................................................................ 10 4.6.3 – Operadores de Comparación o Lógicos ........................................................................................................ 10 4.6.4 – Operadores de Concatenación Lógica ........................................................................................................... 11 4.6.5 – Precedencias ................................................................................................................................................. 11 4.6.6 – Sentencias ..................................................................................................................................................... 11 4.7 – Estructuras de Control ...................................................................................................................................... 12 4.7.1 – Condiciones .................................................................................................................................................. 12 4.7.1.1 Sentencia IF (SI) ....................................................................................................................................... 12 4.7.1.2 Sentencia IF ... ELSE (si ... sino) .............................................................................................................. 12 4.7.1.3 Sentencia SWITCH ................................................................................................................................... 13 4.7.2 – Iteraciones (estructuras de control de bucle o ciclos) ................................................................................... 13 4.7.2.1 Sentencia FOR (iteración incondicional: PARA valores que van desde…hasta) ..................................... 13 4.7.2.2 Sentencia WHILE (condicional)............................................................................................................... 13 4.7.2.3 Sentencia DO ... WHILE (conocido como repeat-until en otros lenguajes) ............................................ 14 4.8 – Bibliografía ......................................................................................................................................................... 14

Unidad 4: Programación Estructurada en C

2/14

Univ.Nac.de Salta – Fac. de Ingeniería – INFORMÁTICA (C.C.A.)

Apuntes de Cátedra

4 – Orígenes del lenguaje de programación de alto nivel de abstracción C y derivados Historia y posicionamiento estratégico de C, C++ y C#: El lenguaje C se deriva de la evolución del lenguaje BCPL, desarrollado por Martin Richards 1967 que también tiene influencia de un lenguaje llamado B, inventado por Ken Thompson en 1970 y que confluyeron en C a fines de 1971 implementado por Dennis Ritchie de Bell. Para 1973 el sistema operativo UNIX estaba casi totalmente escrito en C. Durante años el estándar para C fue la versión 5 del sistema operativo UNIX, documentada en 1978 en “The C Programming Language” de Brian W. Kernighan & Dennis M. Ritchie (comúnmente referido como K&R). En 1983 se estableció un comité para resolver discrepancias del versionado que culminó en 1988 en un estándar ANSI C.  C: quizás la historia de C y su versión ampliada C++ ó, incluso C# (C sharp), merezca ser explicada detenidamente, porque son los lenguajes de programación que utilizaremos, además de su enorme importancia en variados ámbitos de informática.

 C++: es la evolución del C en un lenguaje orientado a objetos (otra filosofía de programación diferente pero complementaria a la estructurada). En 1990 apareció C++, desarrollado por Bjarne Stroustrup también en los Laboratorios Bell, originalmente llamado “C con clases” como una mejora que proporciona

Como se mencionó C evolucionó a partir de dos lenguajes previos: BCPL y B. BCPL fue desarrollado por Martin Richards, como un lenguaje para escribir software y compiladores de sistemas operativos. En el lenguaje B, muchas características de BCPL fueron remodeladas y se utilizó para crear versiones iniciales del Sistema Operativo UNIX. Ambos lenguajes, BCPL y B eran lenguajes “sin tipos de datos”.

capacidades de Programación Orientada a Objetos (POO) que incrementan: su productividad, la reutilización del código y amplía el espectro de aplicaciones y mercados en programación. El nombre C++ incluye el operador de incremento (++) de C, para indicar que C++ es una versión mejorada de C. C++ es un conjunto de C, por lo que, para compilar los programas existentes de C, los programadores pueden utilizar un compilador C++ y posteriormente modificar estos programas a C++, haciendo migrables casi automáticamente. Comparte las ventajas y desventajas del C. A mediados de los años noventa, la mayor parte de los entornos de programación C se convirtieron a C++.

El lenguaje C fue derivado de B por Dennis Ritchie de los Laboratorios Bell, implantándose por primera vez a principios de 1972. C al inicio se popularizó como lenguaje de desarrollo del sistema operativo UNIX. Hoy, virtualmente todos los sistemas están escritos en C y/o C++. C, independiente del hardware, está disponible para la mayor parte de las computadoras a lo largo de las últimas décadas. Es posible incluso escribir programas en C que sean portables hacia la mayor parte de las computadoras.

Los diseñadores de C nunca previeron que el lenguaje resultaría en un “fenómeno” como en el que derivó. Cuando un lenguaje de programación se implementa en entornos tan variados, se “arraiga” tanto que las nuevas necesidades demandan que el “lenguaje evolucione”, de allí las variantes C++ y C# (en lugar de que sólo sea reemplazado por un nuevo lenguaje, como ocurrió con muchos otros), por lo que C está “más vigente” que nunca con gran proyección!



C#: es un lenguaje de programación script orientado a objetos derivado de C/C++ en su sintaxis básica, pero desarrollado y estandarizado por Microsoft como parte de su plataforma .NET. Aunque C# forma parte de la plataforma .NET, ésta es una API (Interfaz de Programación de Aplicaciones), mientras que C# es un lenguaje de programación independiente diseñado para generar programas sobre dicha plataforma. Existen compiladores que posibilitan genera programas para distintas plataformas como: sistemas operativos libres GNU/Linux, MonoDot-GNU o bien Windows, Unix, Android, iOS, Windows Phone, Mac_OS; haciéndolo prácticamente universal y “generador de todas las plataformas”.

4.1 - Características de C y C++  C: es un lenguaje estructurado, compilable, de propósitos generales (muy eficiente también para el cálculo numérico automatizado, como para la redacción de sistemas operativos o software embebido que controla dispositivos digitales) que funciona en una gran variedad de computadores y por tanto es portable entre ellos. Es decir, existen compiladores de C para casi todos los tipos de “máquinas” existentes en la actualidad. El lenguaje C es muy adecuado para escribir multitud de tipos de programas (tanto software base como de aplicación): sistemas operativos, software embebido para cualquier dispositivo digital, robótica, juegos, gráficos, gestores de bases de datos, procesadores de texto, software comercial... y de hecho la mayoría del software de aplicación disponible actualmente está realizado en C o variantes.

Unidad 4: Programación Estructurada en C

3/14

Univ.Nac.de Salta – Fac. de Ingeniería – INFORMÁTICA (C.C.A.)

Apuntes de Cátedra

Algunas de las características más importantes que definen el lenguaje y que han permitido que sea tan difundido: 1. Tamaño pequeño (compilados de pocos bytes). 2. Uso extensivo de llamadas a funciones. 3. Comandos breves (poco tecleo). 4. Lenguaje estructurado. 5. Programación de bajo nivel (nivel bit). 6. Implementación de apuntadores: uso extensivo de apuntadores para memoria, arreglos y funciones. Por qué se convirtió en un lenguaje de uso profesional: 7. Estructura de alto nivel. 8. Se puede manejar actividades de bajo-nivel. 9. Genera programas muy eficientes. 10. Gran portabilidad (puede ser compilado en una gran variedad de computadoras con pocos cambios). Principales ventajas: 11. Los compiladores de C han sido altamente probados y desarrollados para casi todos los tipos de ordenadores. 12. Tiene un alto grado de portabilidad. Los programas en C pueden ser compilados en una gran variedad de PC’s con pocos cambios. 13. Es muy rápido y eficiente. Los compiladores de C suelen estar optimizados muy bien y producen código máquina muy rápido.

Desventajas superables: a) C suele ser difícil de aprender y no se recomienda como 1° lenguaje de enseñanza a principiantes en el mundo de la programación. (Mito). b) Además, es muy conciso, lo que a veces dificulta seguir y entender los programas hechos por otros. (Salvable: a través de buenas normas). c) Un punto en contra es que tiene una detección pobre de errores, lo cual es problemático no sólo para los principiantes.

4.2 - Conceptos y macro-pasos para desarrollar Programas Un programa informático está constituido por un conjunto de instrucciones que se ejecutan de modo secuencial, es decir, cada una a continuación de la anterior. Sin embargo, las instrucciones que un procesador digital es capaz de entender, están constituidas por conjuntos de 1’s y 0’s. A esto se llama lenguaje de máquina o binario y es muy difícil de entender. Por ello, desde casi los primeros años de los ordenadores, se comenzaron a desarrollar los llamados lenguajes de alto nivel (tales como el Fortran, el Cobol, etc.), que están mucho más cerca del lenguaje natural nuestro. Programa.c

compilación

Programa.obj

Estos lenguajes están basados en el uso de identificadores, tanto para los datos como para las instrucciones elementales del programa, que en algunos lenguajes se llaman rutinas o procedimientos y en otros (como C) se denominan funciones. Además, cada lenguaje dispone de una sintaxis y reglas con las que se indica de modo inequívoco las operaciones que se quiera realizar. Los lenguajes de alto nivel son más o menos comprensibles para el usuario, pero para que la computadora pueda ejecutar un programa es necesario traducirlos a su propio lenguaje de máquina (0’s y 1’s). Esta es una tarea que realiza un programa especial llamado compilador, que traduce el programa a lenguaje de máquina.

linkeo

Programa.exe

Esta tarea suele descomponerse en dos etapas, (que pueden realizarse juntas o por separado): el programa de alto nivel se suele almacenar en uno archivo fuente, (los fuentes de C tienen extensión .c). La 1° tarea del compilador es realizar una traducción directa del programa a un lenguaje más próximo al de 0’s y 1’s (llamado ensamblador = assembler), produciendo un archivo objeto con la extensión (.obj). En una 2° etapa se realiza el proceso de ensamblaje (linkeo) del programa, consistente en producir un programa ejecutable en lenguaje de máquina, en el que están ya incorporados otros módulos que aporta el sistema sin intervención explícita del programador (funciones de librería, recursos del sistema operativo, etc.) que se guarda con extensión .exe.

La decisión de enseñar C (o sus variantes) está fundada en todas estas consideraciones (incluyendo y sopesando las desventajas), incluso todo se sustenta desde la “plataforma introductoria” vista en SLE (que también está desarrollado en C), por lo tanto, no tendría que haber grandes esfuerzos y reducirse a detalles de “traducción” (SLE  C), profundización y especificidad de conceptos previamente adquiridos. Unidad 4: Programación Estructurada en C

4/14

Univ.Nac.de Salta – Fac. de Ingeniería – INFORMÁTICA (C.C.A.)

Apuntes de Cátedra

4.3 - Estructura de un programa en C ó C++ 4.3.1 – Consideraciones generales de un programa C ó C++: Comenzaremos, sin embargo, con ciertas precisiones más bien conceptuales: Un programa en C consta de funciones y variables. Una función contiene proposiciones que especifican las operaciones de cálculo que se van a realizar (básicamente una función es un sub-programa, con todas las características de éstos, pero que devuelve un resultado; veremos el comportamiento específico de las funciones cuando abordemos el tema más adelante) y las variables almacenan los valores utilizados en los cálculos.

Todo programa en C contiene una función principal denominada “main”. Esto significa que todo programa en C debe tener un main (invocación a una función principal) en algún sitio. Comprendamos esto a través de un ejemplo, el más simple a programar: escribamos un programa que muestre un cartel que diga “Introduccion a C”: #include int main() { printf(“\n Introduccion a C ”); return(0); }

main llamará a otras funciones que ayuden a realizar su trabajo, por ejemplo: “printf” que permite mostrar por pantalla un cartel.

La primera línea del programa: #include le indica al compilador que debe incluir información acerca de la biblioteca estándar de entrada/salida. Esta biblioteca permite, entre otras cosas, mostrar información y obtener información del dispositivo estándar de entrada/salida. Por ejemplo, la fución “printf” se encuentra definida dentro de ésta biblioteca de funciones . Expliquemos, “traduciendo” renglón por renglón: #include

incluye información de la biblioteca estándar

int main() {

define una función llamada main que no recibe argumentos las instrucciones de main se encierran entre llaves

printf(“\n Introducción a C ”);

main llama a la función de biblioteca printf para escribir caracteres \n representa el carácter de nueva línea

return(0);

todo función debe devolver un valor, también main, que devuelve 0 o cualquier valor que propongamos

} Forma general de una función:

tipo_dato_retorna nombre_de_la_funcion(parámetros) { variables locales ; sentencias de C ; return(valor de retorno); } Si la definición del tipo es omitida (como en el caso de main), C asume que la función regresa un tipo entero.

4.3.2 – Zonas de un programa C ó C++ (analogías con SLE): En programa en C ó C++, al igual que en un programa en SLE, podemos distinguir las “4 ZONAS” típicas donde podemos agrupar las correspondientes instrucciones: 1. Zona de declaración de variables. 2. Zona de ingreso de datos.

3. Zona de procesamiento y transformación aritm./lógica 4. Zona de muestra de resultados.

Nuestra estrategia didáctico / pedagógica para aprender C y C++ será “traducir” desde lo que conocemos en SLE:

Unidad 4: Programación Estructurada en C

5/14

Univ.Nac.de Salta – Fac. de Ingeniería – INFORMÁTICA (C.C.A.)

Apuntes de Cátedra

4.3.3 - Tabla de correspondencias SLE  C ó C++ sentencias Generales

Declaración de Variables y Tipos de Datos Asignaciones Operaciones Instrucción de Bifurcación

PSEUDOCODIGO SLE La primera línea de todo programa programa NombredelPrograma inicio fin a,b: numerico; c,d: cadena;

LENGUAJE C ó C++ #include No tiene correspondencia void main( ) { } int a,b; o bien float a,b; char c,d;

v: vector[10]numerico; mat: matriz[3,4]numerico;

int v[10]; o bien float v[10]; int mat[3,4]; o bien float mat[3,4]; a = b; i = i + 1; o bien i++; +, -, *, /, % if (condición) { sentencias; } if (condición) { Sentencias_si; }

a = b i = i + 1 +, -,*, /(real), %(mod), ^(pot) si (condición) { sentencias } si (condición) { Sentencias_si

sino

else {

sentencias_sino Instrucciones de Ciclos condicional

sentencias_sino;

}

}

mientras (condición)

while (condición)

{

{ sentencias

sentencias;

}

}

repetir sentencias hasta (condicion)

do { sentencias; } while (condicion);

desde i=1 hasta 9 Ciclos incondicionales { sentencias } desde i=9 hasta 1 paso -1 { sentencia } imprimir(“El valor de n es ”,n) Salida info leer(n) Entrada info a and b Condiciones a or b Lógicas not a a > b a < b a == b a >= b a = 0) { // acumulo y cuento para el promedio. sum=sum+x ; cont++ ;

imprimir("\nOtro nro? Negativo=fin: ") ; leer(x) ;

coutx ;

} prom=sum/cont ; // Muestra el resultado. imprimir("\nEl promedio es ",prom) ;

} prom=sum/cont ; // Muestra el resultado. cout