Está en la página 1de 26

Programacin Estructurada en C

El concepto de programacin estructurada se refiere a un diseo del cdigo en el que no haya saltos y todo se realice de forma estructurada y anidada. Esto tambien incluye la declaracion de variables previa al programa. La ventaja prctica de la programacin estructurada es: Si en vez de usarse bucles ordenados y anidados se usaran saltos y si se usan variables sin su previa declaracin, el programa sera imposible de interpretar por una persona que no haya visto nunca el cdigo, e incluso si el cdigo es algo largo, al propio autor le ser imposible entender su propio cdigo. (Esto le sonar a mucha gente programadora de Basic que usaba el famoso "goto", yo incluido hace unos aitos ;) ) Aunque en C, el comando goto existe, para esta gua NUNCA se utilizar, todo se realizar estructuradamente. En algunos casos podreis pensar que es ventajoso el uso del goto, pero la experiencia os demostrar que abusar de l os pondr problemas en entender vuestro propio cdigo, sobre todo si su tamao es grande.

Contenido
Expresiones Lgicas Includes, Defines, Variables (Locales y Globales) y Tipos de Datos Conversin de tipos Ejercicios Salida por pantalla y entrada por teclado Condicionales Ejercicios Bucles Ejercicios Estructuras Ejercicios Arrays (Unidimensionales y Bidimensionales), Strings Ejercicios Funciones Ejercicios Salida y entrada mediante ficheros Ejercicios Memoria Dinmica Ejercicios Soluciones Expresiones Lgicas y Aritmticas Includes, Defines, Variables (Locales y Globales) y Tipos de Datos Salida por Pantalla, Entrada por Teclado y Condicionales Bucles Estructuras Arrays (Unidimensionales y Bidimensionales), Strings Funciones Salida y entrada mediante ficheros Memoria Dinmica

Expresiones Lgicas
En esta seccin se mostrar como se escriben los operadores para C. Esto no significa que para otros lenguajes se escriban igual. Eso s, aunque puedan poseer distinta sintaxis, su uso es igual para todos los lenguajes. Antes de nada se dar un vistazo rpido a los 5 Operadores Aritmticos principales:

Suma + Resta Multiplicacion * Division / Igual = Nota: Un igual (=) se usa para operaciones aritmticas. Dos iguales (==) se usan al comparar. Estos son los 5 principales operadores aritmticos. En las operaciones aritmticas, siempre el trmino a la izquierda del igual, toma el valor del trmino de la derecha del igual. Observe el siguiente ejemplo, suponiendo que la variable x vale 4 y z valga 5. x = z x tomar el valor de z, por lo que x valdr 5, al igual que z. Si hubiera sido z = x, z valdra 4, al igual que x. A continuacin se dan unos cuantos ejemplos: Suponga x = 3 z = x + 4 Esto es una operacin aritmtica que le dara el valor 7 a z. z = 9/x Esto le dara el valor 3 a z, porque es el resultado de 9/3. De esta manera se concluye la introduccin al funcionamiento de los Operadores Aritmticos, se espera haya comprendido su uso. A continuacin se proceder a explicar los Operadores Lgicos Son las llamadas expresiones boleanas. Pueden devolver 2 valores: 0 1. Cuando devuelven 1, es que se cumplen las condiciones lgicas y 0 cuando no se cumplen stas. En la explicacin para simplificar, se dir que la operacin es vlida cuando devuelve. AND (y en castellano) se representa en el lenguaje C como && El And (&&) se usa para ver si se cumplen dos ms condiciones lgicas simultneamente. (condicion1 && condicion2) Sera vlido si se cumplen las dos condiciones. OR (o en castellano) se representa como || (Este smbolo lo encontrars la mayora de las veces en el nmero 1, solo debe presionar Alt Gr + 1) El Or (||) su usa para ver si se cumple al menos una de las condiciones. (condicion1 || condicion2) Sera vlido si se cumple al menos una de las dos condiciones. Not (no en castellano) se representa como ! EL Not (no en castellano) se usa para ver si no se cumple una condicion (!condicion1) sera vlido si no se cumple la condicion1. A continuacin se explicarn los Operadores Relacionales Igual que == (doble igual) Menor que < Mayor que > Distinto de != (como puede apreciar, esta sentencia esta compuesta por un = precedido por el operador Not, especificando un No igual) Menor o igual que <= Mayor o igual que >= Estas operaciones le parecern muy similares a las estudiadas en Matemticas. Los Operadores Lgicos en conjunto con los Operadores Relacionales, se usan para determinar si se ejecuta una Estructura de Repeticin (P.ej. Un bucle) o no y si se ejecuta una Estructura de Decisin (P.ej. Un if) o no.

Las Estructuras de Decisin y las Estructuras de Repeticin se profundizarn en los siguientes puntos, pero se dar un pequeo ejemplo para que usted tenga una idea de lo que se describi con anterioridad. Si x vale 3 y z vale 4 ( x + z == 7) Se cumple la condicin porque 3 + 4 == 7. (x == z) No se cumple la condicin porque 3 == 4 es algo falso. (x != z) Se cumple la condicin porque 3 != 4, 3 es distinto de 4. (x < z) Se cumple la condicin porque 3 es menor que 4, 3 < 4 (x <= z) Se cumple la condicin porque al ser x menor que z, se cumple que x es menor o igual a z. (x > z) No se cumple la condicin porque 3 > 4 es falso, ya que 4 es mayor que 3 Estos ejemplos se han colocado con el fin de ir aclarando los conceptos antes descritos.

Includes, Defines, Variables (Locales y Globales) y Tipos de Datos


Este punto comenzar explicando el include. Los include por costumbre se colocan al inicio del programa, stos se utilizan para cargar otro archivo que tenga declaradas en l funciones, variables y constantes. As stas pueden ser utilizadas en el programa que usted est desarrollando. Uno de los ms importantes es el stdio.h , que incluye funciones de entrada y salida de datos. La definicin de funcin se profundizar ms adelante, cuando se explique como crearlas. Nota sobre funciones: En un programa la funcin principal es main(), all es donde debeis empezar siempre a programar. Despus de los include, se suelen escribir los define. Los define son constantes, valores que nunca cambian. Esto puede ser til por ejemplo para declarar el numero pi, este nmero es aproximadamente 3,1416 y se usa para calcular dimetros y volmenes. Tanto el include como el define les precede la tecla de numeral (#). En las variables, como su nombre indica, se guardan datos que pueden variar durante la ejecucin del programa. Todas las variables deben ser declaradas previamente a ser usadas. Existen dos tipos de variables: Globales: Son las variables declararadas fuera cualquier funcin (generalmente declaradas al principio del programa, despus de los define). Estas variables pueden ser usadas en cualquier parte del programa. Locales: Son las variables declaradas dentro de una funcin (generalmente al principio de la misma). Solo pueden ser usadas en la funcin en que hayan sido declaradas. Como recomendacion final, una de las buenas costumbres de la Programacin Estructurada es declarar las constantes en maysculas y las variables en minsculas. Ahora, por ltimo se explicar los tipos de datos que pueden ser usados en una variable. Los tipos de datos bsicos definidos por C son caracteres, nmeros enteros y nmeros en coma flotante. Los tipos de datos bsicos se describen a continuacin: char Contiene un carcter (normalmente 8 bits) int Contiene un nmero entero (depende de la implementacin). float Contiene un nmero decimal de precisin normal (normalmente 32 bits). double Contiene un nmero decimal de doble precisin (normalmente 64 bits). Luego existen 3 tipos de calificadores. Estos 3 tipos se pueden omitir en la declaracin de

variables, pero es importante conocerlos. unsigned Construye un nmero sin signo (positivo). short Tamao de la variable ms pequeo (normalmente 16 bits). long Tamao de la variable ms grande (normalmente 32 bits).

Conversin de tipos
Cuando se escribe una expresin aritmtica a+b, en la cual hay variables o valores de distintos tipos, el compilador realiza determinadas conversiones antes de que evale la expresin. Estas conversiones pueden ser para "aumentar" o "disminuir" la precisin del tipo al que se convierten los elementos de la expresin. Un ejemplo claro, es la comparacin de una variable de tipo int con una variable de tipo double. En este caso, la de tipo int es convertida a double para poder realizar la comparacin. Los tipos pequeos son convertidos de la forma siguiente: un tipo de char se convierte a int, con el modificador signed si los caracteres son con signo, o unsigned si los caracteres son sin signo. Un unsigned char es convertido a int con los bits ms altos puestos a cero. Un signed char es convertido a int con los bits ms altos a uno o cero, dependiendo del valor de la variable. Para los tipos de mayor tamao: Si un operando es de tipo double, el otro es convertido a double Si un operando es de tipo float, el otro es convertido a float Si un operando es de tipo unsigned long, el otro es convertido a unsigned long Si un operando es de tipo long, el otro es convertido a long Si un operando es de tipo unsigned, el otro es convertido a unsigned Si no, los operandos son de tipo int Una variable o expresin de un tipo se puede convertir explcitamente a otro tipo, anteponindole el tipo entre parntesis. void change_tipe(void){ //Declaracion de una funcion float a=0,5; //Declaracion del tipo e inicializacion int b=10; if(a <= (float)b) //Condicion menor(); //llamada a otra funcion } En este instante, explicado lo ms bsico de la Programacin Estructurada en C, se proceder a colocar un ejemplo del desarrollo de la codificacin de un programa, en este ejemplo se podr observar las declaraciones hechas. Antes de implementar el desarrollo del ejemplo es conveniente explicar es uso de los comentarios dentro del cdigo, los comentarios son partes del cdigo que no se ejecutan y sirven para colocar explicaciones sobre lo que el programador esta haciendo, todo esto con el fn de que el cdigo sea de fcil entendimiento tanto para el autor del cdigo como para terceros programadores. Para llevar a cabo la implementacin de los comentarios en C, se colocar "/*" (sin comillas) para marcar donde empieza y "*/" (sin comillas) para marcar donde acaba, estos comentarios pueden ser de una o ms lneas. #include <stdio.h> /*Este es un ejemplo de include*/ #define PI 3.1416 /*Aqui se declara la constante PI*/ short int x = 0; /*Se Declara x como entero de 16 bits y variable global*/ void main(){ /*Funcion principal main*/ int z = 0; /*SeDeclara z como un entero local*/ } Aqu acaba el ejemplo de como se haran declaraciones en C. Ejercicios: Expresiones Lgicas y Aritmticas Decir si es verdadero o falso cada condicin (verdadero sera cuando se explic que devuelve 1 y falso devuelve 0). Suponga que x = 3, y = 6 , z = 12.

1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

(x == y) (x != y) ((x * 2) == y) ((z - y )== y) ((x * y) >= z) ((z / x) >= y) ((z - y) > x) (z > x) && (y > z) (z >= x) || (y >= z) !(z == x)

Include, Define, Variables (Globales y Locales) y Tipos de Datos 1. 2. 3. 4. Escribe un include que incluya la libreria stdio.h. Escribe una constante que valga 11. Distingue Variable Global de Local Declare estos tipos de variables. Entero corto sin signo. Variable que almacene un caracter. Decimal largo.

Posteriormente se publicar la solucin de estos ejercicios.

Salida por pantalla y entrada por teclado


Se comenzar esta seccin explicando la stdio.h (standard input/output), librera estndar de entrada/salida de datos. Esta librera contiene un gran nmero de funciones para la entrada y salida de datos, por lo que es imprescindible incluirla (mediante un include) en casi el 100% de los programas (dado que la mayora de programas siempre recibirn o enviarn datos). En esta seccin se tratar en su mayora la entrada de datos por teclado y salida de datos por pantalla, debido a que estos son los dispositivos de entrada/salida estndar de los datos.. En primer lugar, se dar a conocer el modo como se les indicar a estas funciones el tipo de datos a leer/mostrar (siempre que sea necesario). %d Entero corto (int) %f Decimal corto (float) %c Carcter (char) %s Cadena de caracteres %ld Entero largo (long int) %lf Decimal largo (long float) Se comenzar con la explciacin de la funcin principal de salida por pantalla, printf. printf permitir imprimir por pantalla cualquier carcter entre comillas y cualquier tipo de variable. Se mostrar lo que se acaba de explciar con un ejemplo: printf("Hola"); As imprimira Hola en pantalla. Ahora suponga que tiene dos variables, int x = 3,z = 5; Son dos variables enteras, cada una con su valor. printf("x vale %d y z vale %d", x, z); La ejecucin de la sentencia anterior imprimira por pantalla: x vale 3 y z vale 5. Fijese que el orden en que se imprimen las variables sustituyendo su tipo de datos (en este caso %d por ser enteros) es el mismo en el que se colocan tras cerrar las comillas. Lo mismo ocurrir si tuviese una variable char, char x='A'; printf("El caracter es %c",x);

La ejecucin de la sentencia anterior Imprimira por pantalla: El caracter es A. Existen varios caracteres especiales del cdigo ASCII representados por \ y una letra, uno de los mas usados es el "\n"(sin comillas) que actua de salto de lnea (pasa al principio de la lnea siguiente). printf("hola\nhola"); El resultado sera: hola hola Existen otras muchas funciones de salida por pantalla, pero esta es la ms til de todas. Antes de pasar a explicar la principal funcin de entrada por teclado (scanf), se mostrar un listado del grupo de smbolos que son tratados como caracteres individuales, estos caracteres especiales son: \a Alerta \b Espacio atrs \f Salto de pgina \n Salto de lnea \r Retorno de carro \t Tabulacin horizontal \v Tabulacin vertical \\ Barra invertida \' Comilla simple \" Comillas dobles \OOO Visualiza un carcter cuyo cdigo ASCII es OOO en octal \xHHH Visualiza un carcter cuyo cdigo ASCII es HHH en hexadecimal scanf le va a permitir almacenar cualquier tipo de dato. Suponga que tiene declarado: float x=0; La variable decimal x valdr 0. El uso del scanf se describe a continuacin. scanf(" %f",&x); El & antes de la variable es imprescindible, ya que lo que hace es apuntar a la direccin de memoria de la variable. En caso de que omita el &, se generar un error de memoria. La instruccin de scanf, le permitir introducir por teclado un valor para la variable x. Suponga que escribe "3" (sin las comillas). El valor de x, inicialmente declarado como 0, pasara a ser 3. scanf funciona igual para todos los tipos de datos. Solo una recomendacin. Al capturar strings (char declarado como vector, se ver ms adelante la definicin y uso de los vectores, pero si usted tiene curiosidad de navegar por la web), scanf aunque escriba un string largo, si tiene espacios dejar de capturar cuando encuentre un espacio. Para capturar strings con espacios se recomienda usar la funcion gets(variable); Se colocar un ejemplo en cdigo fuente para que lo compileis y probeis: #include <stdio.h>

void main(){ char hola[100]; char adios[100]; /*Estasdos variables son strings*/ printf("Ahora capturaremos con el scanf:\n"); scanf(" %s",&hola); /*Nuestro amigo el scanf capturando un string ;)*/ fflush(stdin); /*Esta funcion se usa para borrar el buffer del teclado y asi evitar que cosas escritas en un scanf o gets, se "pasen" a otro. Recomiendo tomeis esta funcion como apunte "teorico"*/ printf("\nAhora capturaremos con el gets:\n"); gets(adios); /*La funcion gets capturando un string*/ printf("Resultado con el scanf: %s\n",hola); /*Imprimiendo en pantalla la captur

printf("Resultado con el gets: %s\n",adios); /*Imprimiendo en pantalla la captur getchar(); } La funcion gets se usa exclusivamente para capturar strings o caracteres. Aparte de esas dos, existen ms funciones para la captura de datos por teclado, pero esas son las ms comunes.

Condicionales En esta instancia es importante recordar lo explicado en la seccin de Expresiones Lgicas En este punto se explicar la sentencia if y la sentencia else. Traduciendo stos trminos al castellano, if seria "Si" (condicional) else significaria "si no" (condicional). El uso del else en una sentencia if es prescindible. En una sentencia if la sintaxis correxta sera if(condicion), se ejecutara solo si se cumple dicha condicin. La sentencia else(opcional) se debe colocar nada ms culmine la sentencia if y se ejecutar si el la condicion del if no se ha cumplido. Suponga que x=3, y=5; A continuacin se colocar un ejemplo de if que se cumple if(x < y){ printf("hola"); } Al cumplirse la condicin, se ejecutara el contenido del if, y se mostrara por pantalla hola. Ahora, se ver un if que no se cumple if(x > y){ printf("hola"); } Al no cumplirse la condicin, el if no se ejecuta, por lo cual no ocurre nada. En este instante podr apreciar el uso de un if que se cumple, con un else if(x != y){ printf("Se cumplio la condicion"); } else{ printf("no se cumplio la condicion"); } Como se cumple la condicion se imprimira en pantalla "Se cumplio la condicion" y el cdigo del else no se ejecutara A continuacin podr observar un if que no se cumple, con un else if(x == y){ printf("Se cumplio la condicion"); } else{ printf("no se cumplio la condicion"); } En este caso en particular la condicin no se cumple, entonces se ejecutar el cdigo del else, imprimindose por pantalla "no se cumplio la condicion". Observe el siguiente cdigo fuente, queda para su anlisis #include <stdio.h>

void main(){ int x = 0; printf("Escriba un numero"); scanf("%d",&x); //Lee el numero if(x == 1){ //Si x=1 se ejecutara el contendio del if printf("\nUsted escribio 1"); } else{ // Si x no es igual a 1, se ejecutara el contenido de else printf("\nUsted escribio un numero distinto de 1"); } } Ejercicios Salida por pantalla, entrada por teclado y Condicionales 1. Aprovechando lo explicado anteriormente, cree un programa que le pida un nmero por teclado y que si el nmero es menor que 10, lo muestre por pantalla y si es mayor o igual a 10 que muestre un mensaje de error por pantalla. 2. Realice un programa que le solicite dos decimales por teclado. Despus que aparezcan por pantalla las distintas opciones aritmticas (sumar, restar, multiplicar y dividir) y le pida un entero para seleccionar esas opciones. Si el entero no es ninguno de las 4 opciones mostrar por pantalla un mensaje de error. Si el entero introducido es alguna de las 4 opciones, realizar la operacin correspondiente y mostrar el resultado por pantalla. Posteriormente se publicar la solucion de estos ejercicios.

Bucles En esta instancia se proceder a explicar el uso de los principales bucles: El while y el for El concepto de bucle, es similar al de dar vueltas (iteraciones), cuando acaba el bucle vuelve a ejecutarse desde el principio, es una accin repetitiva. Antes de entrar en detalle se explicar como funciona el goto en C. El uso del goto no es recomendable en la Programacin Estructurada en C, solo se dar una breve explicacin de sta sentencia. Para el goto se define una etiqueta de la siguiente manera: nombre_de_etiqueta: Despus, cuando se desee que el programa se dirija a esa etiqueta, se coloca lo siguiente: goto etiqueta; Lo explicado anteriormente se ampliar con la implementacin de un ejemplo de cdigo fuente: #include <stdio.h> void main(){ principio: printf("hola\n"); goto principio; } Este programa no terminara nunca su ejecucin (se dice que entra en un lazo infinito), se imprimira constantemente la palabra hola en pantalla. Ahora, se proceder a explicar el uso de la sentencia break. Su sintaxis es como sigue: break; As de simple. La traduccin de break al castellano es "romper". Lo que hace el programa al encontrar esta instruccion es "romper" un bucle en el que se encuentre el programa en ese momento (osea, sale de l). Posteriormente se har un ejemplo del break dentro de la sentencia while.

En primer lugar, se explicar la implementacin del bucle while. While significa en castellano "mientras". Este bucle se ejecutar mientras se cumpla una condicin. Ejemplo: while(numero != 5){ scanf("%d",&numero); printf("%d\n",numero); } Este bucle se ejecutar mientras se introduzca un nmero distinto de 5. Cada vez que se introduzca un nmero distinto de 5, ste se imprimir por pantalla, pero cuando se introduzca el nmero 5 el bucle se acabar, debido a que dej de cumplirse la condicin. Ejemplo: Uso del bucle while, interviene la sentencia break. #include <stdio.h>

void main(){ int x = 0; while(x >= 0){ printf("Mete un numero. Si es mayor que 5 o menor que 0"); printf("se acabara el programa.\n\n"); scanf("%d",&x); if(x <= 5){ printf("%d\n\n",x); } else{ break; //esto hara que al ser mayor que 5 salga del bucle : } } fflush(stdin); getchar(); } Como se logr apreciar en el ejemplo anterior, si el usuario introduce -1 (o cualquier nmero menor que 0) , saldr del programa porque no se cumple la condicin del bucle. Si se introduce un nmero mayor que 5, tambin saldr del programa porque se ejecutar la sentencia break. En este instante se explicar una sentencia interesante, aunque menos utilizada, se trata del continue, ste provoca que se comience una nueva iteracin, evalundose la expresin de control. El uso de esta sentencia se ampliar con la implementacin por medio de cdigo. #include<stdio.h>

int main(){ int a, b, i = 0; while(i < 3){ printf("Introduzca dos numeros enteros:\n"); printf("a= "); scanf("%d",&a); printf("\nb= "); scanf("%d",&b); if(b != 0) printf("\nEl resultado de la division es: %d\n", a/b); else{ printf("\nSe produjo una division entre cero. Vuelva a inte continue; //Uso de la sentencia continue } i++; } fflush(stdin); getchar(); } Ya explicado el uso del bucle while, se proceder a explicar el uso del bucle for. Su traduccin significa "para". El for primero se le indica que variable usar, despus se le indica la condicin

que se debe cumplir (similar a la usada en el bucle while), en ltima instancia se debe colocar el intervalo que cambiar la variable. La explicacin anterior se ampliar con la implementacin del siguiente ejemplo: for(x = 0; x < 10; x = x+1){ printf("%d\n",x); } La variable a usar es x=0 (se inicializa). La condicin que se deber cumplir es x<10, por lo cual el for se ejecutar mientras x sea menor que 10 y el intervalo es x=x+1, lo que har que a cada vuelta (iteracin) del for, la variable x ser incrementada en una unidad. En cada iteracin se imprimir el valor que tome la variable x en ese momento, para el ejemplo los valores de la variable x seran desde el cero (0) hasta el nmero nueve (9). Un ejemplo de cdigo fuente del uso del for: #include <stdio.h> void main(){ unsigned int x = 0, y = 0; printf("introduce hasta que numero quieres que se imprima\n"); scanf("%d",&y); for(x = 0; x <= y; x = x+1){ printf("%d\n",x); } fflush(stdin); getchar(); } Ejercicios Bucles 1. Cree un programa que pida un nmero. Mientras ese nmero sea menor que 5, que vuelva a pedir otro nmero. Y si el nmero es mayor que 5, que le muestre de dos en dos (0, 2, 4, etc..) todos los nmeros desde 0 hasta el nmero indicado. Si el nmero no es par, no importa que el nmero escrito no se muestre. 2. Cree un programa que solicite un nmero e imprima desde 0 de uno en uno hasta ese nmero. Realice este procedimiento a travs del uso del while, ese programa solo deber ejecutar 3 veces la accin. Posteriormente se publicar la solucion de estos ejercicios.

Estructuras Una estructura, permite agrupar distintas variables en un nico tipo. Es decir, desde ese nico tipo de variable creado, se puede hacer referencia a las variables que contiene. En este instante se indicar mediante la implementacin de un ejemplo como se creara una estructura. Se proceder a crear un nuevo tipo de datos llamado datoscurso, esta estructura har referencia a 2 variables, alumnos y alumnas, ambas variables son del tipo de dato entero. struct datoscurso{ int alumnos; int alumnas; }; A travs del procedimiento descrito anteriormente se crea la estructura. Ahora, para lograr el uso de ella, se debe declarar una variable que sea del tipo de datos "datoscurso". Esto se hace de la siguiente manera: struct tipodedatos variable. Para la estructura ya creada, se realizar un ejemplo que complemente lo dicho anteriormente, se declarar una variable del tipo "datoscurso" que se llame "semana1" y otra que se llame "semana2". struct datoscurso semana1; struct datoscurso semana2;

10

Ahora bien, a continuacin se explicar como hacer referencia a las variables de la estructura, para ello se utilizar el siguiente ejemplo: semana1.alumnos=1; La sentencia anterior har que el valor de la referencia alumnos de semana1, valga 1, estamos asignndole un valor a la variable. semana2.alumnos=2; La sentencia anterior har que el valor de la referencia alumnos de semana2, valga 2. Todo lo explicado con anterioridad sobre el uso de Estructuras se explicar a travs de la implementacin de un ejemplo, observe el beneficio de su uso: #include <stdio.h> void main(){ struct datoscurso{ int alumnos; int alumnas; }; struct datoscurso semana1; struct datoscurso semana2; struct datoscurso semana3; printf("Introduce el numero de alumnos de la primera semana: "); scanf("%d",&semana1.alumnos); printf("Introduce el numero de alumnas de la primera semana: "); scanf("%d",&semana1.alumnas); printf("Introduce el numero de alumnos de la segunda semana: "); scanf("%d",&semana2.alumnos); printf("Introduce el numero de alumnas de la segunda semana: "); scanf("%d",&semana2.alumnas); printf("Introduce el numero de alumnos de la tercera semana: "); scanf("%d",&semana3.alumnos); printf("Introduce el numero de alumnas de la tercera semana: "); scanf("%d",&semana3.alumnas);

printf("\n\n\n"); printf("La primera semana hubo %d alumnos y %d alumnas\n\n",semana1.alumnos printf("La segunda semana hubo %d alumnos y %d alumnas\n\n",semana2.alumnos printf("La tercera semana hubo %d alumnos y %d alumnas\n\n",semana3.alumnos fflush(stdin); getchar(); } Se espera que a travs de la descripcin del ejemplo anterior se comprenda el funcionamiento de las referencias a variables de las estructuras. Ejercicios: 1. Realice utilizando estructuras un programa tipo agenda que almacene los siguientes datos: Nmero de telfono, Nmero de mvil, ao de nacimiento. Haz que despus imprima esos datos en pantalla y tras ello, los vuelva a pedir hasta que en los 3 datos se meta 0 (eso signifca que el usuario quiere dejar de usar el programa). Posteriormente se publicar la solucion de estos ejercicios.

11

Arrays (Unidimensionales y Bidimensionales), Strings Se comenzar a explicar el uso de los arrays. Los arrays simplemente almacenan datos en una posicin concreta de una variable. La declaracin de un array se realiza de la siguiente manera: int variable[10]; Esto indica un array de 11 posiciones (0-10). Es decir, guardar un valor por cada posicin, por ejemplo, el valor de variable[0] puede ser 2 , mientras que el valor de variable[1] puede ser 4. Se colocar un ejemplo en cdigo fuente para aclarar el funcionamiento de los arrays. #include<stdio.h> void main(){ int prueba[10]; int x = 0; for(x = 0; x <= 10; x++){ prueba[x] = x; } for(x = 0; x <= 10; x++){ printf("%d\n", prueba[x]); } getchar(); } Este ejemplo da valor a las 10 posiciones de el vector prueba y luego las imprime. Ahora se explicar lo que es un array multidimensional, es aquel que tiene ms de una dimension, por ejemplo: int prueba[10][10]; es bidimensional. Es decir, prueba[1] tendr 11 posiciones ms para escribirse. Por ejemplo: prueba[1][0], prueba[1][1], prueba[1][2], etc... lo mismo para prueba[2][0], prueba[2][1], etc... En caso de usted desee crear arrys de ms de dos dimensiones, lo que debe realizar simplemente es los siguiente: Si desea crear un array de tres dimensiones: prueba[10][10][10], en esta instancia se han creado 1000 elementos, usted podra visualizar esto como un cubo, es decir, el primer corchete ([]) podria interpretarlo como las filas, el segundo como las columnas y el tercero como la profundidad, solo sera un concepto propio de visualizacion, o para que usted tenga una idea de como "moverse" a travs del arrays, pues usted debe recordar que la memoria de los arrays es lineal, no existen dimensiones. Ahora bien, si usted desea crear arrays de ms dimensiones simplemente debe agregar otro corchete con su correspondiente valor. En este instante se proceder a explicar el uso de los strings. char palabra[11]; Esto indica que puede almacenar una palabra (cadena de caracteres) de 10 letras (un carcter por cada posicin (0-9) mas el hueco 10 para guardar el caracter '\0' final) Ejemplo: #include<stdio.h> void main(){ char palabra[11]; printf("Escribe una palabra de 10 letras: "); scanf("%s",&palabra); printf("\n\nLa palabra que escribio fue: %s",palabra); fflush(stdin); getchar(); } Para continuar y finalizar este punto del temario se explicarn unas cuantas funciones bsicas para el uso de strings. Para poder usarlas se debe incluir la libreria string.h

12

#include<string.h> La funcin ms sencilla es strlen. Esta funcin devuelve un entero, en el cual viene dada la longitud de la cadena de caracteres, esta funcin se le pasa como paramtro una cadena. Un ejemplo aclarar lo antes descrito: x=strlen("hola"); Se le enva la cadena hola, y como tiene 4 letras, el valor de x es 4. Otra funcin de la libreria string.h es strcmp. Esta funcin sirve para comparar cadenas. Devuelve un valor 0 si las cadenas comparadas son iguales o distinto de 0 si las cadenas comparadas son distintas. x=strcmp("hola","hola"); En el ejemplo anterior el valor asignado a la variable x es 0, debido a que ambas cadenas son iguales. Se colocar un ejemplo de cdigo fuente, en donde se notar el uso de la funcin strcmp. #include<stdio.h> #include<string.h>

void main(){ int x = 0; char palabra[20]; printf("El password es contra. Hasta que no metas el password te lo pedirem do{ printf("\n\nMete el password: "); scanf("%s",&palabra); x = strcmp(palabra,"contra"); }while(x != 0); printf("\n\nMetiste el password correctamente!."); fflush(stdin); getchar(); } La funcin strcat se encarga de concantenar dos cadenas. La sintaxis de esta funcin es la siguiente: strcat(destino,fuente); Ejemplo de uso de la funcin strcat: #include <stdio.h> #include <string.h> void main(){ int x = 0; char palabra[20]; printf("Escriba una palabra: "); scanf("%s",&palabra); strcat(palabra,".txt"); printf("%s",palabra); fflush(stdin); getchar(); } Para finalizar se proceder a explicar la funcin strcpy. Esta funcin copia una cadena en otra. Su sintaxis es strcpy(destino,fuente); Ejemplo: #include<stdio.h> #include<string.h>

13

void main(){ int x = 0; char palabra[20]; char palabra2[20]; printf("Escriba una palabra: "); scanf("%s",&palabra); fflush(stdin); printf("Escriba una segunda palabra: "); scanf("%s",&palabra2); strcpy(palabra,palabra2); printf("Ahora la primera palabra es: %s",palabra); fflush(stdin); getchar(); } Estas son las funciones bsicas del uso de strings. Ejercicios: 1. Realice un programa que le solicite un nmero entre 0 y 100, este nmero indicar la cantidad de entradas que se realizarn (Por ejemplo: Si se introduce 4, el programa deber solicitar 4 nmeros). Usted debe almacenar estos nmeros en las distintas posiciones de un vector y haga que luego se impriman en pantalla. 2. Realice un programa que solicite una palabra, que el usuario la introduzca y el programa le indicar el nmero de letras (no vale usar ninguna funcion tipo strlen). Recuerde que el final de cadena lo indica el caracter '\0' 3. Haga un programa que le solicite un nombre de usuario y un password. Una vez almacenados estos dos campos en el programa, que ste solicite de nuevo el nombre de usuario y el password anteriormente introducidos para continuar, el programa deber solcitar estos dos campos mientras el usuario no introduzca los datos correctamente. 4. Realice un programa que le pida dos cadenas, las concatene y luego que las imprima en pantalla. Posteriormente se publicar la solucion de estos ejercicios.

Funciones Las funciones, son mdulos de cdigo independientes que pueden recibir valores de otras funciones, cuando se les haga una llamada y pueden devolver valores a quien les ha llamado. (No es obligatorio ni que reciban ni que envien) La funcin principal es main, es donde comienzan los programas. Su utilizacin es igual que el resto de funciones, pero con la diferencia, que al enviarle valores ser desde el sistema operativo, y tambin los valores, los devolver al sistema operativo. Las funciones deben ser declaradas en general, despus de los include's, a esto se le llama el prototipo de la funcin. La declaracion de funciones se realiza de manera similar a la siguiente: datos_a_devolver nombre_de_la_funcion(parametros a recibir) Si la funcin no va a devolver datos, se usa la palabra reservada void. Lo mismo si no va a recibir parmetros. Ejemplo: void Funcion(void); Si por el contrario, se desea que la funcin reciba como parmetro el tipo de dato entero y devuelva otro entero, la sintaxis que debe seguirse es la siguiente: int funcion(int a); As, el entero que se le sea pasado como parmetro a la funcion desde el main, se llamar a en la

14

funcion y si esta funcin devuelve un entero, al llamarla llevar a la izquierda un igual y la variable que este a la izquierda coger el valor devuelto. Se puede usar todo tipo de datos para enviar/recibir a/de las funciones Esa es la declaracin de funciones. Luego habrn debern hacerse las llamadas a las funciones desde el main. Es importante hacer notar, que la sentencia para devolver valores es return. return variable; En el main, el return, se utiliza mas que nada para saber si el programa se ejecuto correctamente. Generalmente, un programador hace que devuelva 0 si su programa se ejecuto correctamente y otro numero si tuvo algun problema (el numero sera identificativo del problema) Ejemplo: return 0; Devolveria 0 en una funcion. En este instante, se proceder a colocar un cdigo fuente con el ejemplo del uso de una funcion. #include <stdio.h> int suma(int a,int b); void main(){ int sumando1, sumando2, resultado; printf("Mete el primer sumando: "); scanf("%d",&sumando1); printf("\nMete el segundo sumando: "); scanf("%d",&sumando2); fflush(stdin); //borra el buffer del teclado ;) resultado = suma(sumando1,sumando2); printf("\nEl resultado fue: %d",resultado); getchar(); } int suma(int a, int b){ int c; c = a + b; return c; } Como dato curioso, para enviar parmetros desde el sistema operativo (Por ejemplo, cuando se escribe en el prompt ping 127.0.0.1, la IP, es un parmetro), para tal efecto se debe declarar el main de la siguiente forma: int main(int argc, char * argv[]) argc ser el nmero total de argumentos. argv[0] ser el nombre del ejecutable (*.exe) argv[1] ser el nombre del primer parmetro etc... Ejercicios: 1. Haz una funcion que sea llamada desde el main y que le envies dos enteros y te devuelva el entero que sea mayor que el otro y lo imprima por pantalla. 2. Haz una funcion que sea llamda desde el main, que se le pase una cadena de caracteres introducida por teclado y cuente el numero de letras de la cadena y lo imprima en pantalla. (Sin usar strlen y recordando que el caracter '\0' indica final de cadena) 3. Haz un programa que le envies los parametros desde la linea de comandos,indicandole

15

primero la accion a realizar (puede hacer suma'-s', resta'-r', multiplicacion'-m' y division'-d') Los siguientes dos parametros a recoger desde la linea de comandos son los dos numeros. El programa debera imprimir por pantalla la solucion a la operacion. Es obligatorio que cada operacion tenga una funcion propia.

Salida y entrada mediante ficheros En esta instancia se hablar de la entrada/salida de ficheros. Solo se tratarn ficheros ASCII en esta entrega. Para poder usar ficheros, primero ha de declararse un puntero de tipo FILE. Ejemplo: FILE *fichero; Una vez declarado el puntero se debe indicar, con una cadena, la ruta del fichero a abrir y usar la funcin fopen. La sintaxis es punterofichero=fopen(archivo, modo); Esta funcin devuelve un puntero al "flujo" que se abri si el archivo pudo ser accesado, si ocurre un error, la funcin devuelve un puntero NULL. Ejemplo: fichero = fopen("prueba.txt", "w"); Bien, ahora se detallarn los modos de apertura para ficheros ascii. El archivo debe existir. r Sirve para abrir un fichero para solo lectura. w Abre un fichero y lo deja en blanco.Si no existe, lo crea. a Abre un fichero y empieza a escribir en el final del mismo. Si no existe, lo crea. r+ Sirve para abrir un fichero para solo lectura y tambien escribirlo dejandolo en blanco. w+ Abre un fichero y lo deja en blanco y tambien lo puede leer.Si no existe, lo crea. a+ Abre un fichero para lectura, y empieza a escribir en el final del mismo. Si no existe, lo crea. Ejemplo : FILE *fichero; fichero = fopen("prueba.txt","w"); if(fichero == NULL){ printf("Error al abrir el fichero"); } Una vez abierto, se podr usar las funciones de lectura/escritura La lectura de un fichero abierto con r, es lineal. Para saber cuando acaba, se debe usar la funcion feof(puntero) (como dato adicional, eof significa End Of File) Ejemplo: if(feof(fichero)){ printf("Se llego al final del fichero"); } La funcin principal de lectura es fscanf . Sus argumentos son fscanf(puntero,"tipodedatos",&variable) Ejemplo : fscanf(fichero,"%d",&numero); La funcion principal de escritura es fprintf. Sus argumentos son fprintf(puntero,"datos a imprimir");

16

Ejemplo : fprintf(fichero,"hola tengo %d aos",edad); Cuando se ha acabado de usar un fichero, se debe cerrar correctamente para evitar problemas. Comprobar que al salir un programa (en todas sus posibles salidas) siempre cierre los ficheros abiertos. La funcion para cerrar es fclose(), cuyo nico parmetro es el puntero que devuelve la funcin fopen() Ejemplo : fclose(fichero); Ahora se adjuntar un programa de cdigo fuente con el uso de ficheros. Este programa copiar el archivo prueba.txt en prueba2.txt Sera necesario que prueba.txt este creado previamente, sea ascii y este en el directorio donde compiles este fuente. Este cdigo fuente lo "copiara". #include<stdio.h> void main(){ FILE *fichero; FILE *fichero2; char copia; fichero = fopen("prueba.txt", "r"); fichero2 = fopen("prueba2.txt", "w"); while(!feof(fichero)){ fscanf(fichero,"%c",&copia); if(feof(fichero)){ break; } fprintf(fichero2,"%c",copia); } fclose(fichero); fclose(fichero2); } Ejercicios 1. Haz un programa que mediante una cadena, le indiques la ruta de un fichero aSCII y lo muestre en pantalla. 2. Haz un programa que te pida el nombre de un fichero ascii a crear, luego el contenido del fichero(una frase, parrafo, ect..) y lo cree.

Memoria Dinmica Primero se explicar el concepto de puntero. Un puntero es una variable que lo nico que contiene es una direccin de memoria. Este en si no contiene nada, pero lo que se escribe o lee en el, es el contenido de esa porcin de memoria. Los punteros se representan por * (para nosotros asterisco, en ingles significa pointer) Ejemplo int *puntero; char *puntero2; Los punteros pueden contener el contenido de una variable o tambien apuntar a otros punteros guardando su direccin de memoria. (esto nos servir para las listas, que veremos mas adelante) Para usar un puntero como vector, ha de reservarse su espacio en memoria. Por ejemplo, para usar un char y guardar una cadena, no se haria como con memoria estatica, sino que se declararia

17

char *puntero; y luego se usara la orden malloc para reservar espacio en memoria.Para usar malloc debeis incluir la libreria stdlib.h La sintaxis de malloc es puntero = (tipo de datos *) malloc(numero de espacio a reservar); Ejemplo: char *cadena; cadena = (char *) malloc(10*(sizeof(char)); Esto reservara 10 posiciones de memoria (10, por el tamao del tipo de datos,aqui * signifca la operacion "multiplicacion") y podra ser usado como un array. Una vez acabado de usar un puntero, el espacio en memoria que usa puede liberarse usando la orden free (tambien requiere stdlib.h) La sintaxis es free(puntero); Ejemplo: free(cadena); Ejercicios 1. Declara un entero, reservas espacio en memoria por ejemplo, de 15 posiciones,y usa ese vector para que en cada posicion se almacene un valor que metas por teclado, y luego los muestre en pantalla. 2. Haz una funcin que le envies un puntero de tipo char, te reserve memoria, te pida una palabra, la almacene y despus te la imprima.

Soluciones: Expresiones Lgicas y Aritmticas


Suponiendo que x = 3, y = 6 , z = 12 Pregunta Respuesta (x == y) Falso (x != y) Verdadero ((x * 2) == y) Verdadero ((z - y )== y) Verdadero ((x * y) >= z) Verdadero ((z / x) >= y) Falso ((z - y) > x) Verdadero (z > x) && (y > z) Falso (z >= x) || (y >= z) Verdadero !(z == x) Verdadero

Include, Define, Variables (Globales y Locales) y Tipos de Datos


1. 2. 3. 4. #include <stdio.h> #define Numero 11 Para diferenciar variable local y global repasa la teoria Declare estos tipos de variables: Entero corto sin signo unsigned short int buenas;

18

Variable que almacene un caracter char hola; Decimal largo long float adios;

Salida por Pantalla, Entrada por Teclado y Condicionales


Cree un programa que le pida un nmero por teclado y que si el nmero es menor que 10, lo muestre por pantalla y si es mayor o igual a 10 que muestre un mensaje de error por pantalla. #include <stdio.h> void main(){ int x = 0; printf("Escribe un Numero: "); scanf("%d",&x); if(x < 10){ printf("\nUsted escribio %d\n",x); } else{ printf("\nSe ha producido un error"); } fflush(stdin); getchar(); } Realice un programa que le solicite dos decimales por teclado. Despus que aparezcan por pantalla las distintas opciones aritmticas (sumar, restar, multiplicar y dividir) y le pida un entero para seleccionar esas opciones. Si el entero no es ninguno de las 4 opciones mostrar por pantalla un mensaje de error. Si el entero introducido es alguna de las 4 opciones, realizar la operacin correspondiente y mostrar el resultado por pantalla. #include <stdio.h> void main(){ float x = 0, y = 0, resultado = 0; int opcion = 0; printf("Introduce un numero: "); scanf("%f",&x); printf("Introduce otro numero: "); scanf("%f",&y); printf("\nPara sumar escribe 1.\n"); printf("Para restar escribe 2.\n"); printf("Para multiplicar escribe 3.\n"); printf("Para dividir escribe 4.\n"); printf("Opcion: "); scanf("%d",&opcion); if(opcion == 1){ resultado = x + y; printf("\nEl resultado de la suma es %f.\n", resultado); } if(opcion == 2){ resultado = x - y; printf("\nEl resultado de la resta es %f.\n",resultado); } if(opcion == 3){ resultado = x * y; printf("\nEl resultado de la multiplicacion es %f.\n",resultado); } if(opcion == 4){

19

if(y != 0){ resultado = x / y; printf("\nEl resultado de la division es %f",resultado); } else printf("\nERROR: Se produjo una division entre cero.\n"); } if(opcion > 4 || opcion < 1){ printf("\nNo introdujiste una opcion correcta"); } fflush(stdin); getchar(); }

Bucles
Cree un programa que pida un nmero. Mientras ese nmero sea menor que 5, que vuelva a pedir otro nmero. Y si el nmero es mayor que 5, que le muestre de dos en dos (0, 2, 4, etc..) todos los nmeros desde 0 hasta el nmero indicado. Si el nmero no es par, no importa que el nmero escrito no se muestre. #include <stdio.h> void main(){ int numero = 0, vueltas = 0; printf("Introduce un numero mayor o igual a 5: "); scanf("%d",&numero); while(numero < 5){ printf("Introduce un numero mayor o igual a 5: "); scanf("%d",&numero); } printf("\n"); for(vueltas = 0; vueltas <= numero; vueltas = vueltas + 2){ printf("%d\n",vueltas); } fflush(stdin); getchar(); } Cree un programa que solicite un nmero e imprima desde 0 de uno en uno hasta ese nmero. Realice este procedimiento a travs del uso del while, ese programa solo deber ejecutar 3 veces la accin. #include<stdio.h> void main(){ int veces = 0, numero = 0, vueltas = 0; while(veces != 3){ printf("Introduzca un numero: "); scanf("%d",&numero); printf("\n"); for(vueltas = 0; vueltas <= numero; vueltas++){ //vueltas++ equivale a vueltas = vueltas + 1 printf("%d\n",vueltas); } veces++; //Esto seria el equivalente a x = x + 1; } fflush(stdin); getchar(); }

20

Estructuras
Realice utilizando estructuras un programa tipo agenda que almacene los siguientes datos: Nmero de telfono, Nmero de mvil, ao de nacimiento. Haz que despus imprima esos datos en pantalla y tras ello, los vuelva a pedir hasta que en los 3 datos se meta 0 (eso signifca que el usuario quiere dejar de usar el programa). #include<stdio.h> void main(){ struct datos{ int telefono; int movil; int nacimiento; }; struct datos registro; do{ printf("\nIntroduzca su numero de telefono: "); scanf("%d",&registro.telefono); fflush(stdin); printf("\nIntroduzca su numero de movil: "); scanf("%d",&registro.movil); fflush(stdin); printf("\nIntroduzca su ao de nacimiento: "); scanf("%d",&registro.nacimiento); fflush(stdin);

printf("\n\nTu numero de movil es %d, tu telefono %d, naciste en el ao %d.\n",registro.movil,registro.telefono,regis }while(registro.telefono !=0 && registro.movil !=0 && registro.nacimiento !=0 );

printf("\n\nUsted introdujo en todos los campos 0, por lo que eligio salir" fflush(stdin); getchar(); }//Este codigo fuente es una posible solucion a el ejercicio propuesto

Arrays (Unidimensionales y Bidimensionales), Strings


Realice un programa que le solicite un nmero entre 0 y 100, este nmero indicar la cantidad de entradas que se realizarn (Por ejemplo: Si se introduce 4, el programa deber solicitar 4 nmeros). Usted debe almacenar estos nmeros en las distintas posiciones de un vector y haga que luego se impriman en pantalla. #include<stdio.h> void main(){ int posiciones[100], recorrido = 0, i=0; printf("Indique la cantidad de numeros a introducir: "); scanf("%d",&recorrido); for(i = 0; i < recorrido; i++){ printf("\nIntroduzca un numero: "); scanf("%d",&posiciones[i]); }

21

printf("\nUsted introdujo los siguientes numeros:\n"); for(i=0; i < recorrido; i++){ printf("\n%d",posiciones[i]); } fflush(stdin); getchar(); } Realice un programa que solicite una palabra, que el usuario la introduzca y el programa le indicar el nmero de letras (no vale usar ninguna funcion tipo strlen). Recuerde que el final de cadena lo indica el caracter '\0' #include<stdio.h> void main(){ char palabra[100]; int i = 0; printf("Introduzca una palabra: "); scanf("%s",&palabra); for(i = 0; i < 100 && palabra[i]!='\0'; i++); printf("\nLa palabra %s tiene %d letras", palabra, i); fflush(stdin); getchar(); } Haga un programa que le solicite un nombre de usuario y un password. Una vez almacenados estos dos campos en el programa, que ste solicite de nuevo el nombre de usuario y el password anteriormente introducidos para continuar, el programa deber solicitar estos dos campos mientras el usuario no introduzca los datos correctamente. #include<stdio.h> #include<string.h> void main(){ char login[30], login2[30]; charpass[30], pass2[30]; int logintrue, passtrue; printf("Mete el login: "); scanf("%s",&login); printf("Mete el pass: "); scanf("%s",&pass); printf("\nAhora te pediremos el login y pass anterior"); do{ fflush(stdin); printf("\nMete el login: "); scanf("%s",&login2); printf("Mete el pass: "); fflush(stdin); scanf("%s",&pass2); logintrue=strcmp(login,login2); passtrue=strcmp(pass,pass2); }while(logintrue != 0 || passtrue != 0); } Realice un programa que le pida dos cadenas, las concatene y luego que las imprima en pantalla. #include<stdio.h> #include <string.h> void main(){ char cadena1[30], cadena2[10]; printf("Mete la cadena 1: ");

22

scanf("%s",&cadena1); printf("\nMete la cadena 2: "); scanf("%s",&cadena2); fflush(stdin); strcat(cadena1,cadena2); printf("\nEl resultado es : %s",cadena1); getchar(); }

Funciones
Haz una funcion que sea llamada desde el main y que le envies dos enteros y te devuelva el entero que sea mayor que el otro y lo imprima por pantalla. #include<stdio.h> int devolvermayor(int, int); //prototipo de la funcion void main(){ int numero1, numero2, resultado; printf("Introduce un numero: "); scanf("%d",&numero1); printf("Introduce otro numero: "); scanf("%d",&numero2); if(numero1 != numero2){ resultado=devolvermayor(numero1,numero2); printf("\nEl mayor es %d",resultado); } else printf("\nSon iguales ambos numeros"); fflush(stdin); getchar(); } int devolvermayor( int a, int b){ if(a > b){ return a; } else{ return b; } } Haz una funcion que sea llamada desde el main, que se le pase una cadena de caracteres introducida por teclado y cuente el numero de letras de la cadena y lo imprima en pantalla. (Sin usar strlen y recordando que el caracter '\0' indica final de cadena) #include<stdio.h> int devolverletras(char []); //Prototipo de la funcion void main(){ char nombre[30]; int resultado; printf("Mete una palabra (sin espacios): "); scanf("%s",&nombre); resultado=devolverletras(nombre);

23

printf("\nLa palabra tiene %d letras", resultado); fflush(stdin); getchar(); } int devolverletras(char cadena[30]){ int x = 0; for(x ; x < 30; x++){ if(cadena[x] == '\0'){ return x; } } } Haz un programa que le envies los parametros desde la linea de comandos, indicndole primero la accion a realizar (puede hacer suma '-s', resta '-r', multiplicacion '-m' y division '-d') Los siguientes dos parametros a recoger desde la linea de comandos son los dos numeros. El programa deber imprimir por pantalla la solucion a la operacion. Es obligatorio que cada operacion tenga una funcion propia. /*En este ejercicio no se tuvo en cuenta que lo que te devuelve argv son chars. Por lo cual para hacerlo habria que usar la funcion atoi que convierte chars en enteros. Esta funcion se le pasa una cadena y devuelve un entero. Esta incluida en stdlib.h*/ #include<stdio.h> #include<stdlib.h> #include <string.h> void main(int argc, char * argv[]){ int x, y, resultado; if(argc != 4){ printf("Error al meter los parametros"); getchar(); return; } x=atoi(argv[2]); y=atoi(argv[3]); if(strcmp(argv[1],"-d") == 0){ if(y != 0){ resultado = x / y; printf("El resultado es %d",resultado); getchar(); } else{ printf("ERROR: Se produjo una division entre cero."); getchar(); } } else if(strcmp(argv[1],"-s") == 0){ resultado = x + y; printf("El resultado es %d", resultado); getchar(); } else if(strcmp(argv[1],"-m") == 0){ resultado = x * y; printf("El resultado es %d",resultado); getchar(); } else if(strcmp(argv[1],"-r") == 0){ resultado = x + y; printf("El resultado es %d",resultado); getchar(); } else{ printf("Error al meter los parametros");

24

getchar(); } }

Salida y entrada mediante ficheros


Haz un programa que mediante una cadena, le indiques la ruta de un fichero aSCII y lo muestre en pantalla. #include<stdio.h> void main(){ FILE *in; char cadena[30]; char temp; scanf("%s",&cadena); in = fopen(cadena,"r"); if(in == NULL){ printf("Error al abrir el fichero"); fflush(stdin); getchar(); fclose(in); return; } fscanf(in,"%c",&temp); do{ printf("%c",temp); fscanf(in,"%c",&temp); }while(!feof(in)); fflush(stdin); getchar(); fclose(in); } Haz un programa que te pida el nombre de un fichero ascii a crear, luego el contenido del fichero(una frase, parrafo, ect..) y lo cree. #include<stdio.h> void main(){ FILE *in; char cadena[30], frase[30]; char temp; scanf("%s",&cadena); in = fopen(cadena,"w"); if(in == NULL){ printf("Error al abrir el fichero"); fflush(stdin); getchar(); fclose(in); return; } printf("Mete una frase sin espacios:\n"); scanf("%s",&frase); fprintf(in,"%s",frase); fflush(stdin); getchar(); fclose(in); }

Memoria Dinmica
Declara un entero, reservas espacio en memoria por ejemplo, de 15 posiciones,y usa ese vector para que en cada posicion se almacene un valor que metas por teclado, y luego los muestre en pantalla.

25

#include<stdio.h> #include <stdlib.h> void main(){ int *puntero, x = 0; puntero = (int *)malloc (15*(sizeof(int))); for(x = 0; x < 15; x++) scanf("%d",&puntero[x]); fflush(stdin); for(x = 0; x < 15; x++) printf("%d\n",puntero[x]); fflush(stdin); getchar(); } Haz una funcin que le envies un puntero de tipo char, te reserve memoria, te pida una palabra, la almacene y despus te la imprima. #include<stdio.h> #include<stdlib.h> void main(){ char *puntero; puntero = (char *)malloc (15*(sizeof(char))); scanf("%s",puntero); printf("%s",puntero); fflush(stdin); getchar(); }

Autor del texto: HQH Modificacin y ampliacin del contenido bajo permiso del Autor: Milton R. Mazzarri S

26

También podría gustarte