Vous êtes sur la page 1sur 33

COMPETENCIA 2

Habilidad 2.1 Elementos bsicos del lenguaje de programacin estructurado. Manipulacin bsica de los datos.

Cronologa en el desarrollo de algunos lenguajes de programacin

Ciclo de vida de un programa Niveles de abstraccin en los lenguajes de programacin

-Variables (definicin de variables globales, lectura y escritura de variables). Una variable es un dato donde su valor puede ser modificado durante la ejecucin del algoritmo o en un programa. En informtica, cuando hacemos mencin a una variable, nos estamos refiriendo a una pequea zona de la memoria principal donde se va a alojar un valor. Si este valor se modifica en algn momento del programa, el nuevo valor sustituir al que exista anteriormente. A este nombre de posiciones contiguas de memoria se le dan atributos: un nombre para poder referenciarlo (nombre de la variable) y su tipo (clase de caracteres que puede contener). A una variable definida de un determinado tipo, no se le puede asignar generalmente valores de otro tipo.

Definicin de variables globales Una variable global se declara fuera de todas las funciones, incluyendo a la funcin main(). Una variable global puede ser utilizada en cualquier parte del programa. Por ejemplo: short numero, suma; int numerogr, sumagr; char letra;

main() { ... }

Es tambin posible preinicializar variables globales usando el operador de asignacin =, por ejemplo:
float suma= 0.0; int sumagr= 0; char letra= 'A';
main() { ... }

Que es lo mismo que:


float suma; int sumagr; char letra; main() { suma = 0.0; sumagr= 0; letra = 'A; ... }

Dentro de C tambin se permite la asignacin mltiple usando el operador =, por ejemplo:


a = b = c = d = 3; ...que es lo mismo, pero ms eficiente que: a = 3; b = 3; c = 3; d = 3;

La asignacin mltiple se puede llevar a cabo, si todos los tipos de las variables son iguales. Se pueden redefinir los tipos de C usando typedef. Como un ejemplo de un simple uso se considera como se crean dos nuevos tipos real y letra. Estos nuevos tipos pueden ser usados de igual forma como los tipos predefinidos de C. typedef float real; typedef char letra; /* Declaracin de variables usando el nuevo tipo */ real suma=0.0; letra sig_letra;

Lectura y escritura de variables El lenguaje C usa salida formateada. La funcin printf tiene un carcter especial para formatear (%) -- un carcter enseguida define un cierto tipo de formato para una variable. %c caracteres %s cadena de caracteres %d enteros %f flotantes Por ejemplo: printf("%c %d %f", ch, i, x); La sentencia de formato se encierra entre " ", y enseguida las variables. Es necesario asegurarse que el orden de formateo y los tipos de datos de las variables coincidan. scanf() es la funcin para entrar valores a variables. Su formato es similar a printf. Por ejemplo: scanf("%c %d %f %s", &ch, &i, &x, cad); Observar que se antepone & a los nombres de las variables, excepto a la cadena de caracteres.

Tipos de datos en C
Tipo de Dato Modificador o subdivisin del tipo: Descripcin

short int

(-128 a 127) (-32768 a 32767) (-4294967296 a 4294967295) entero con signo entero sin signo

Tipo Entero (int)

long signed unsigned

Tipo Real (float o double) Tipo Carcter

float
double char

(con 7 decimales de aproximacin)


(con 16 decimales de aproximacin) En total los 256 caracteres del cdigo ASCII) para caracteres, letras y smbolos. Sin valor null o vaco Verdadero Falso Una cadena de texto es una secuencia de caracteres.

Sin valor Tipo Lgico

void true false

Tipo Cadena

Qu es un dato de tipo entero en C?


Un dato de tipo entero (int en lenguaje C ) representa nmeros enteros con o sin signo, que estarn compuestos por los dgitos del 0 al 9, pudiendo ser precedidos por los signos + o -. Z = { ..., -3, -2, -1, 0, 1, 2, 3, ... } Ejemplo: La edad de una persona y el ao en que naci, son dos datos de tipo entero: Edad...: 29 Ao....: 1976 Los tipos de datos enteros son: short, int, long, cada uno representa un nmero entero de un tamao o capacidad determinado. Segn el compilador y la plataforma de hardware, cada uno de estos tipos de dato puede ocupar desde 1 byte hasta 8 bytes en memoria. Adems, el lenguaje C hace la distincin de si el entero es con signo (signed) o sin signo (unsigned). En caso de que no se declare si es con signo o sin signo, se toma con signo.

Qu es un dato de tipo real en C? Se emplean para representar nmeros reales (con decimales). Ejemplo: El peso de una persona (en kilogramos) y su altura (en centmetros), son datos que pueden considerarse de tipo real. Peso.....: 75,3 Altura...: 172,7

Para nmeros con pocas cifras significativas (un mximo de 7, lo que se conoce como "un dato real de simple precisin") existe el tipo "float" y para nmeros que necesiten ms precisin (unas 15 cifras, "doble precisin") tenemos el tipo "double".
Qu es un dato de tipo carcter en C? Est constituido por caracteres simples, como a, Z, , 3 En total los 256 caracteres del cdigo ASCII) para caracteres, letras y smbolos. El tipo char es tambin un tipo entero, ya que puede tomar valores de 0 a 255. Por lo tanto tambin puede ser signed o unsigned.

Qu es un dato sin valor en C? Un dato sin valor (void en lenguaje C) es un dato que no puede tomar por valor ningn valor, es decir, es un dato vaco (nulo). Qu es un dato de tipo lgico en C? Un dato de tipo lgico es aquel que puede tomar por valor slo uno de los dos siguientes: { verdadero, falso } Los valores verdadero y falso son contrapuestos, de manera que, un dato de tipo lgico siempre est asociado a que algo se cumpla o no se cumpla. Qu es un dato de tipo cadena en C? Los datos de tipo cadena son aquellos que pueden tomar por valor una secuencia de caracteres. En lenguaje C, el valor de un dato de tipo cadena se debe representar entre comillas dobles (").

Ejemplo: El ttulo de un libro y el nombre de su autor, son datos de tipo cadena. Ttulo...: "La Odisea" (cadena de 9 caracteres) Autor....: "Homero" (cadena de 6 caracteres)

Constantes
C permite declarar constantes. Cuando se declara una constante es un poco parecido a declarar una variable, excepto que el valor no puede ser cambiado. La palabra clave const se usa para declarar una constante, como se muestra a continuacin: #define PI 3.141592 int main() { float area, radio; ... } Otro ejemplo sera: const int temperatura = -5; Notas: -Se puede usar const antes o despus del tipo. -Es usual inicializar una constante con un valor, ya que no puede ser cambiada de alguna otra forma. La directiva del preprocesador #define es un mtodo ms flexible para definir constantes en un programa. Frecuentemente se ve la declaracin const en los parmetros de la funcin. Lo anterior simplemente indica que la funcin no cambiara el valor del parmetro.

Clasificacin de las Constantes Constantes numricas

Subdivisin
Constantes numricas

Descripcin
Constituye un nmero entero, puede ser int, long (L) (si es mayor que 32767), unsigned (U), unsigned int (UI), unsigned long (UL).

Constantes de punto flotante


Constantes carcter

Constituye un nmero decimal, puede ser float (f), double y long double (l).
Es un carcter cualquiera encerrado entre apstrofos. Su valor depende del asignado por cdigo ASCII, en realidad son constantes enteras. Una cadena de caracteres es una sentencia de caracteres delimitada por comillas () Se utilizan para definir los posibles valores de ciertos identificadores o variables que slo deben poder tomar unos pocos valores, ej. Los das de la semana.

Cadenas de caracteres Enumeracin

Habilidad 2.2 Utilizar estructuras de control No siempre un programa ser escrito de forma secuencia, es decir que al terminar de ejecutarse una sentencia se inicia la ejecucin de la siguiente. Al programar es necesario contar con ciertas estructuras que permitan controlar el flujo del programa, es decir, tomar decisiones y repetir acciones. Algunas de ellas son las siguientes:

1.- Estructuras condicionales. (la sentencia if, el operador, la sentencia switch).


a) La estructura condicional if y su variante if else. Su funcionamiento consiste en evaluar la condicin, si la expresin se ha evaluado como cierta, se ejecuta la sentencia o grupo de sentencias. En caso contrario la ejecucin del programa contina por la siguiente sentencia en orden secuencial.

//Programa que determina el mayor de 3 nmeros ingresados por el usuario //utilizando la estructura if # include <conio.h> # include <iostream.h> int main () { int a,b,c; cout << "Ingrese el primer valor" <<endl; cin >> a; cout << "Ingrese el segundo valor" <<endl; cin >> b; cout << "Ingrese el tercer valor" <<endl; cin >> c; if ((a>=b) && (a>=c)) { cout <<"El mayor es el primer valor" <<endl << a; } if ((b>=a) && (b>=c)) { cout <<"El mayor es el segundo valor" <<endl << b; } if ((c>=a) && (c>=b)) { cout <<"El mayor es el tercer valor" <<endl << c; } getch (); return 0; }

Esquema de funcionamiento de if

// Programa que solicita 3 calificaciones, sacar el promedio // y muestra un mensaje si el alumno aprob o no aprob. #include<stdio.h> #include<conio.h> int main() { float calif_1=0,calif_2=0,calif_3=0,promedio=0; printf("\nIntroduce tu primera calificacion: "); scanf("%f",&calif_1); printf("\nIntroduce tu segunda calificacion: "); scanf("%f",&calif_2); printf("\nIntroduce tu tercera calificacion: "); scanf("%f",&calif_3); promedio=(calif_1+calif_2+calif_3)/3; if(promedio<6) { printf("\n\tLo siento, tu promedio de %.2f no es aprobatorio",promedio); } else { printf("\n\tFelicidades, pasaste con un %.2f",promedio); } getch(); }

Esquema de funcionamiento de if else

El operador condicional ? El operador condicional ? es el nico operador ternario de C. La forma general de las expresiones construidas con este operador es la siguiente: expresin 1 ? expresin 2 : expresin 3; De manera que si la primera expresin se evala cierta, toda la expresin toma el valor de la segunda expresin. En cambio, si la primera expresin se evala falsa, toda la expresin toma el valor de la tercera expresin. Un ejemplo tpico del uso de este operador es el calculo del mximo de dos valores. En la siguiente sentencia, c toma el valor del mximo entre la variable a y b. c = (a > b) ? a : b; Esto mismo podra haberse escrito usando la construccin if-else como: //Programa que pide dos nmeros y nos muestra // cual es mayor utilizando operador condicional ? if (a > b) #include<stdio.h> #include<conio.h> c = a; #include <stdlib.h> else int main (){ int a,b,c; c = b; system ("cls");
printf ("PROGRAMA QUE PIDE DOS NUMEROS Y MUESTRA EL MAYOR\n\n"); printf ("------------------------------------------------\n\n"); printf(" INTRODUCE UN NUMERO : "); scanf("%d",&a); printf(" INTRODUCE OTRO NUMERO : "); scanf("%d",&b); printf ("-------------------------------------------------\n\n"); printf(" El NUMERO MAYOR ES: %d \n\n", ((a > b) ? a : b) ); getch(); return 0; }

Sentencia switch En primer lugar se evala la expresin. Seguidamente su valor es comparado secuencialmente con el de las diferentes constantes en los case. Si el valor de la expresin coincide con alguna de ellas, se ejecuta el grupo de sentencias correspondiente y switch concluye gracias a la sentencia break. En caso contrario, y si existe el caso default (que es opcional), se ejecutara el grupo de sentencias por defecto.
switch ( expresin ) { case constante 1 : grupo de sentencias 1; break; case constante 2 : grupo de sentencias 2; break; ... case constante N : grupo de sentencias N; break; default : grupo de sentencias por defecto; break; }

// Programa que solicita la matrcula de un alumno, su semestre y su promedio y //en base a la sentencia solicitada evala si cumple con las condiciones //especificadas en el case seleccionado. #include <cstdlib> #include <iostream> using namespace std; int main() { char Carrera; int Matricula, Semestre; float Promedio; system ("color F0"); cout<<"\n\t___________________________________________\n"<<endl; cout<<"\tDados los datos de la matricula de un alumno,\n"; cout<<"\tsu semestre y su promedio, determine si el mismo es apto \n"; cout<<"\tpara pertenecer a alguna de las profesiones que tiene la universidad.\n"; cout<<"\tSi el alumno es aceptado teniendo en cuenta las especificaciones\n"; cout<<"\tque se listan abajo, se debe imprimir su matricula, tipo de \n"; cout<<"\tprofesion y su aprobacion\n\n"; cout<<"\tPara entrar a Ingenieria - Semestre > 6 y Promedio >= 8.8\n"; cout<<"\tPara entrar a Medicina - Semestre >=6 y Promedio > 8.5\n"; cout<<"\tPara entrar a Licenciatura - Semestre > 5 y Promedio >= 8.3\n"; cout<<"\tPara entrar a Tecnico - Semestre >=3 y Promedio >= 7.8\n\n"; cout<<("\tEscriba el numero de Matricula\n\t"); cin>>Matricula; cout<<("\n\tEscriba el promedio\n\t"); cin>>Promedio; cout<<("\n\tEscriba el Semestre\n\t"); cin>>Semestre; cout<<"\n\tProfesion a elegir (Escribir en MAYUSCULA la letra)\n\t"; cout<<"[I = Ingenieria , M = Medicina , L = Licenciatura , T = Tecnico]\n\t"; cin>>Carrera; switch (Carrera) { case 'I': if (Semestre>6) { if (Promedio>=8.8) { cout<<"\n\n\t***APROBADO***\n"; cout<<"\n\tMatricula No. "<<Matricula; cout<<"\n\tTipo de Carrera: "<<Carrera<<"\n\n\t"; } else { cout<<"\n\tNo Aprobado\n\n\t"; } } break;

case 'M': if (Semestre>=6) { if (Promedio>8.5) { cout<<"\n\t***APROBADO***\n"; cout<<"\n\tMatricula No. "<<Matricula; cout<<"\n\tTipo de Carrera: "<<Carrera<<"\n\n\t"; } else { cout<<"\n\tNo Aprobado\n\n\t"; } } break; case 'L': if (Semestre>5) { if (Promedio>=8.3) { cout<<"\n\t***APROBADO***\n"; cout<<"\n\tMatricula No. "<<Matricula; cout<<"\n\tTipo de Carrera: "<<Carrera<<"\n\n\t"; } else { cout<<"\n\tNo Aprobado\n\n\t"; } } break; case 'T': if (Semestre>=3) { if (Promedio>=7.8) { cout<<"\n\t***APROBADO***\n"; cout<<"\n\tMatricula No. "<<Matricula; cout<<"\n\tTipo de Carrera: "<<Carrera<<"\n\n\t"; } else { cout<<"\n\tNo Aprobado\n\n\t"; } } break; } system ("PAUSE"); return 0; }

2.- Iteracin, la sentencia for, la sentencia while, la sentencia do-while, uso de break y continue. Una iteracin es un mecanismos de C para repetir un conjunto de instrucciones hasta que se cumple cierta condicin. Su forma ms general para la ejecucin repetida de una sola sentencia es:
for (sentencia inicial ; condicin ; incremento/decremento) sentencia; //Programa que muestra los nmeros pares que existen del 2 al 20 #include <iostream.h> int main() { short a; cout <<( "Los numeros pares del 2 al 20: \n\n"); for ( a=2; a<=20; a=a+2 ) { cout <<a<< "\n"; } system("PAUSE"); return 0; }

Sentencia for
Esta construccin iterativa no presenta un formato fijo estricto, sino que admite numerosas variantes, lo que la dota de gran potencia y flexibilidad. Su forma ms general para la ejecucin repetida de una sola sentencia es:
for (sentencia inicial ; condicin ; incremento/decremento) sentencia;

o para la ejecucin repetida de un grupo de sentencias: for (sentencia inicial ; condicin ; incremento/decremento) { grupo de sentencias; } Por ejemplo, el siguiente programa muestra la secuencia de nmeros desde la sentencia inicial hasta la sentencia final respetando el incremento fijado: //Este programa mostrar en pantalla 0 1 2 3 4 5 #include<stdio.h> #include<conio.h> int main () { int x=0; for (x=0;x<=5;x++) { printf("%d ",x); } getch(); }

Explicacin del programa: Se necesita una variable exclusiva para el ciclo (en este caso x) y ste empieza con la palabra for, su sintaxis es la siguiente: for ( variable = inicio-del-ciclo ; condicin-que-indica-el-final ; aumento de

x)
Por partes: x=0 -> Indica el inicio del ciclo. Puede ser cualquier variable y cualquier valor de inicio. x<=5 ->Indica el fin del ciclo. Cuando la condicin deja de cumplirse el ciclo termina. Cuando el ciclo no es menor o igual a 5 el ciclo termina. x++ -> Indica que la variable x aumenta de uno en uno. Para aumentar de dos en dos: x+=2, de tres: x+=3.

Sentencia while
La forma ms general para la ejecucin repetida de una sola sentencia es: while (condicin) sentencia; O para la ejecucin repetida de un grupo de sentencias: while (condicin) { grupo de sentencias; } Por ejemplo el siguiente cdigo, solicita un nmero para multiplicarlo por los nmeros del 1 al 10 y muestra la tabla de los resultados:
#include<conio.h> #include<stdio.h> int main() { int a=0,b=1,i=0; printf("A que tabla quieres entrar\n\n"); scanf("%d",&a); if(a<=0)printf("El valor no es valido"); if(a>0){ i=1; while(i<=10) { printf("\n%d*%d=%d\n",a,i,a*i); i++; } } getch(); }

Sentencia do while
Una de las caractersticas del bucle while (Mientras) es que la condicin lgica se evala al principio de cada interaccin, cosa que cuando la condicin sea falsa entonces el bucle no se ejecuta nunca. Caso contrario ocurre con el bucle dowhile, primero se ejecuta el bloque de instrucciones y despus se evala la condicin. Su estructura general es la siguiente: do { sentencia; } while (condicin); El siguiente programa nos imprime en pantalla los nmeros del 0 al 100 utilizando la sentencia do while:
#include <stdio.h> #include <stdlib.h> int main () { int numero=0; do { printf("%d\n", numero); numero = numero+1; }while (numero<=100); system("PAUSE"); }

Instruccin break
En lenguaje C, para escribir una instruccin de salto break (interrumpir), se utiliza la sintaxis: break; La instruccin de salto break se usa para interrumpir (romper) la ejecucin normal de un bucle, es decir, la instruccin break finaliza (termina) la ejecucin de un bucle y, por tanto, el control del programa se transfiere (salta) a la primera instruccin despus del bucle.

Instruccin continue En lenguaje C, para escribir una instruccin de salto continue (continuar), se utiliza la sintaxis: continue; La instruccin de salto continue siempre se usa para interrumpir (romper) la ejecucin normal de un bucle. Sin embargo, el control del programa no se transfiere a la primera instruccin despus del bucle (como s hace la instruccin break, es decir, el bucle no finaliza, sino que, finaliza la iteracin en curso, transfirindose el control del programa a la condicin de salida del bucle, para decidir si se debe realizar una nueva iteracin o no.

3.- Arreglos y cadenas (arreglos unidimensionales y multidimensionales).


Los arreglos son una coleccin de variables del mismo tipo que se referencian utilizando un nombre comn. Un arreglo consta de posiciones de memoria contigua. La direccin ms baja corresponde al primer elemento y la ms alta al ltimo. Un arreglo puede tener una o varias dimensiones. Para acceder a un elemento en particular de un arreglo se usa un ndice. El formato para declarar un arreglo unidimensional es: tipo nombre_arr [ tamao ] Por ejemplo, para declarar un arreglo de enteros llamado listanum con diez elementos se hace de la siguiente forma: int listanum[10]; En C, todos los arreglos usan cero como ndice para el primer elemento. Por tanto, el ejemplo anterior declara un arreglo de enteros con diez elementos desde listanum[0] hasta listanum[9].

La forma como pueden ser accesados los elementos de un arreglo, es de la siguiente forma: listanum[2] = 15; /* Asigna 15 al 3er elemento del arreglo listanum*/ num = listanum[2]; /* Asigna el contenido del 3er elemento a la variable num */

El lenguaje C permite arreglos con ms de una dimensin , el formato general es: tipo nombre_arr [ tam1 ][ tam2 ] ... [ tamN]; Por ejemplo un arreglo de enteros bidimensionales se escribir como: int tabladenums[50][50]; Observar que para declarar cada dimensin lleva sus propios parntesis cuadrados. Para acceder a los elementos se procede de forma similar al ejemplo del arreglo unidimensional, esto es:

tabladenums[2][3] = 15; /* Asigna 15 al elemento de la 3 fila y la 4 columna*/ num = tabladenums[25][16]

//Programa que forma el nombre de una persona utilizando un arreglo //Elabor: #include <stdio.h> #include <conio.h> #include <stdlib.h>

int main () { char nombre[15], apellidopaterno[15], apellidomaterno[15];


printf("\nIntroduce tu nombre: \n\n"); scanf("%s",nombre); printf("\nIntroduce tu apellido paterno: \n\n"); scanf("%s",apellidopaterno); printf("\nIntroduce tu apellido materno: \n\n"); scanf("%s",apellidomaterno); printf("\nUsted es %s %s %s\n\n", nombre, apellidopaterno, apellidomaterno); system ("PAUSE"); }

//Programa que forma el nombre de una persona utilizando un arreglos y cadenas //Elabor:

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int main() { char nombre[41], apell[41], Nombre[81]; printf("\nPor favor, escriba su nombre : \n\n"); gets(nombre); //Funcion gets permite unir cadenas, necesita la libreria Stdio.h printf("\nPor favor, escriba su apellido : \n\n"); gets(apell); strcpy(Nombre, nombre); //Utiliza la libreria String.h, debe ser un arreglo de caracteres, copia nombre en Nombre strcat(Nombre, " "); // Sirve para concatenar dos cadenas, La funcion pega la segunda cadena a la derecha de la primera cadena strcat(Nombre, apell); printf("\nBuenos dias %s\n\n", Nombre); system ("PAUSE"); return 0; }

Cadenas
A diferencia de otros lenguajes de programacin que emplean un tipo denominado cadena string para manipular un conjunto de smbolos, en C, se debe simular mediante un arreglo de caracteres, en donde la terminacin de la cadena se debe indicar con nulo. Un nulo se especifica como '\0'. Por lo anterior, cuando se declare un arreglo de caracteres se debe considerar un carcter adicional a la cadena ms larga que se vaya a guardar. Por ejemplo, si se quiere declarar un arreglo cadena que guarde una cadena de diez caracteres, se har como: char cadena[11]; Se pueden hacer tambin inicializaciones de arreglos de caracteres en donde automticamente C asigna el carcter nulo al final de la cadena, de la siguiente forma: char nombre_arr[ tam ]="cadena"; Por ejemplo, el siguiente fragmento inicializa cadena con ``hola'': char cadena[5]="hola"; El cdigo anterior es equivalente a: char cadena[5]={'h','o','l','a','\0'};

Para asignar la entrada estndar a una cadena se puede usar la funcin scanf con la opcin %s (observar que no se requiere usar el operador &), de igual forma para mostrarlo en la salida estndar. Por ejemplo:

// Arreglo que contiene una cadena y muestra el mensaje: Como esta?


#include #include #include #include <math.h> <stdio.h> <stdlib.h> <conio.h>

int main() { char aviso[30]; aviso[0] = 'C'; aviso[1] = 'o'; aviso[2] = 'm'; aviso[3] = 'o'; aviso[4] = ' '; aviso[5] = 'e'; aviso[6] = 's'; aviso[7] = 't'; aviso[8] = 'a'; aviso[9] = '?'; aviso[10] ='\0'; printf("%s\n\n", aviso); system ("PAUSE"); }

Vous aimerez peut-être aussi