0% found this document useful (0 votes)
75 views24 pages

GEE 303 Computer Programming: (Lenguaje C)

This document provides an introduction and theoretical framework for a computer programming course in C language at Newport International University in Bogota. It discusses the history of C including its creators Dennis Ritchie and Ken Thompson. It covers the structure of C programs and the pros and cons of the language. It also lists several performance requirements and exercises for students to complete including writing functions to calculate trigonometric functions and convert between uppercase and lowercase.

Uploaded by

gava19473903
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
75 views24 pages

GEE 303 Computer Programming: (Lenguaje C)

This document provides an introduction and theoretical framework for a computer programming course in C language at Newport International University in Bogota. It discusses the history of C including its creators Dennis Ritchie and Ken Thompson. It covers the structure of C programs and the pros and cons of the language. It also lists several performance requirements and exercises for students to complete including writing functions to calculate trigonometric functions and convert between uppercase and lowercase.

Uploaded by

gava19473903
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 24

GEE 303 Computer Programming

NEWPORT INTERNATIONAL UNIVERSITY Bogot, Septiembre de 2011

RICARDO TRIANA

(Lenguaje C)

INDICE INTRODUCCION (1) MARCO TEORICO (2) Historia (2.1) El C de Kernighan y Ritchie (2.2) Quien es Deniss Ritchie? (2.3) Quien es Ken Thompson? (2.4) Filosofia de Programacin (2.5) Estructura de un programa en C (2.6) Pros del lenguaje C (2.7) Contras del lenguaje C (2.8) PERFORMANCE REQUIREMENTS (3) (3.1) *Write getfloat, the floating-point analog of getint. What type does getfloat return as its function value? (3.2) *Write a function escape(s,t) that converts characters like newline and tab into visible escape sequences like \n and \t as it copies the string t to s . Use a switch . Write a function for the other direction as well, converting escape sequences into the real characters. (3.3) *Write a program that converts upper case to lower or lower case to upper, depending on the name it is invoked with, as found in argv[0]. (3.4) *A function called abs_val that returns int and takes an int argument. It returns the absolute value of its argument, by negating it if it is negative. A function called output that takes a single character argument and sends it to the program output with putchar. It will remember the current line number and column number reached on the output devicethe only values passed to the function are guaranteed to be alphanumeric, punctuation, space and newline characters. (3.5) *Construct a program to test output, where that function is in a separate file from the functions that are used to test it. In the same file as output will be two functions called current_line and current_column which return the values of the line and column counters. Ensure that those counters are made accessible only from the file that contains them. (3.6) *Write and test a recursive function that performs the admittedly dull task of printing a list of numbers from 100 down to 1. On entry to the function it increments a static variable. If the variable has a value below 100, it calls itself again.

(3.7) Then it prints the value of the variable, decrements it and returns. Check that it works. (3.8) *Write functions to calculate the sine and cosine of their input. Choose appropriate types for both argument and return value. The series (given below) can be used to approximate the answer. The function should return when the value of the final term is less than 0.000001 of the current value of the function. CONCLUSIONES (4) BIBLIOGRAFIA (5)

INTRODUCCION (1) A continuacin se presentar el desarrollo del trabajo acadmico para la asignatura CSE 303 de Newport University. Al inicio de este trabajo se presentar un muy "pequeno" marco teorico, donde se explicara de una manera breve que es el lenguaje de programacion C, su historia, se presentarn tambien unas pequenas notas sobre su desarrollo, la historia de sus creadores, estructura, filosofia, y sus pros y contras. Seguidamente se identifican los ejercicios para resolver y sus respectivas soluciones debidamente comentadas. Finalmente, en la bibliografa, se identificarn los diferentes recursos tanto digitales como fisicos utilizados para el desarrollo de este trabajo.

MARCO TEORICO (2)


A continuacin se presenta el marco terico de este trabajo,donde se tocan los siguientes puntos: Historia de C, Kernighan y Ritchie,Quien es Deniss Ritchie?,Quien es Ken Thompson?,Filosofia,Estructura de un programa en C, Pros y Contras. inciamos esta parte del trabajo con la historia de C. 2.1 Historia Desarrollo inicial Supuestamente,el desarrollo incial de C se dio en los laboratirios Bell de la compania AT&T. Segn Dennis Ritchie, uno de sus creadores,se le dio el nombre de C ya que era una nueva versin,una evolucin,del programa B. Dos historias interesantes,y hasta cierto punto,leyendas,sobre la creacin del lenguaje de programacin C. Dos de estas "leyendas" son: El desarrollo de C fue el resultado del deseo de los programadores de jugar con Space Travel. Haban estado jugando en el mainframe de su compaa,pero debido a su poca capacidad de proceso y al tener que soportar 100 usuarios,Thompson y Ritchie no tenan suficiente control sobre la nave para evitar colisiones con los asteroides. Por ese motivo decidieron portar el juego a un PDP-7 de la oficina que no se utilizaba; pero esa mquina no tena sistema operativo,as que decidieron escribir uno. Finalmente decidieron portar el sistema operativo del PDP-11 que haba en su oficina,pero era muy costoso,pues todo el cdigo estaba escrito en lenguaje ensamblador. Entonces decidieron usar un lenguaje de alto nivel y porttil para que el sistema operativo se pudiera portar fcilmente de un ordenador a otro. Consideraron usar B,pero careca de las funcionalidades necesarias para aprovechar algunas caractersticas avanzadas del PDP-11. Entonces empezaron a crear un nuevo lenguaje,C. La justificacin para obtener el ordenador original que se us para desarrollar Unix fue crear un sistema que automatizase el archivo de patentes. La versin original de Unix se desarroll en lenguaje ensamblador. Ms tarde,el lenguaje C se desarroll para poder reescribir el sistema operativo. En 1973,el lenguaje C se haba vuelto tan potente que la mayor parte del kernel Unix,fue reescrita en C. ste fue uno de los primeros ncleos de sistema operativo implementados en un lenguaje distinto al ensamblador. Algunos casos anteriores son el sistema Multics,escrito en PL/I,y Master Control Program para el B5000 de Burroughs, escrito en ALGOL en 1961. 2.2. El C de Kernighan y Ritchie En 1978 Dennis Ritchie y Brian Kernighan publican El lenguaje de programacin C en su primera edicin,tambin conocido como La biblia de C,que durante aos fue la especificacin informal del lenguaje de programacon C. "El C de Kernighan y Ritchie" es el nombre que se le da al lenguaje descrito en este libro,varios programadores se refieren tambien a este lenguaje como simplemente "K&R C". En El lenguaje de programacin C se introdujeron las siguientes caractersticas al lenguaje: *El ti po de datos struct.

MARCO TEORICO (2)


*El ti po de datos long int. *El ti po de datos unsigned int. *Los operadores =+ y =- fueron sustituidos por += y -= para eliminar la ambigedad sintctica de expre siones como i=-10,que se podra interpretar bien como i =- 10 o bien como i = -10. *"K&R C es el subconjunto ms bsico del lenguaje que un compilador debe de soportar. Incluso luego de la introduccin del ANSI C,fue considerado como "el mnimo comn denominador" en el que los programadores deban programar cuando deseaban que sus programas fueran transportables,ya que no todos los compiladores,en ese momento,soportaban completamente ANSI,y el cdigo razonablemente bien escrito en K&R C es tambin cdigo ANSI C vlido." (*The C Book,second edition by Mike Banahan) En las primeras versiones de C,las nicas funciones que necesitaban declaracion, si eran utilizadas antes de la definicin de la funcin eran las que devolvan valores no enteros. Es decir,se asuma que una funcin que se usaba sin declaracin previa devolvera un entero. Ejemplo de llamada que requiere declaracin previa: long int cierta_funcion(); int llamando_funcion() { long int ret; ret = cierta_funcion(); } Ejemplo de llamada que no requiere declaracin previa: int llamando_funcion() { int ret; ret = alguna_otra_funcion(); } int alguna_otra_funcion() { return 0; } Ya que el "K&R C" no llevaba informacin alguna sobre los argumentos de las funciones,no se realizaba una comprobacin de ti pos en los parmetros de las funciones,aunque algunos compiladores devuelven mensajes de advertencia si se llamaba a una funcin con un nmero incorrecto de argumentos. A su vez,para indicar los parmetros que se utilizaban en una funcin,estos se declaraban de la siguiente manera: int main() { return callme(1, "c");

MARCO TEORICO (2)


int i; char *s; { /*....*/ } } int callme(i, s) A travs de los anos se aadieron al lenguaje muchas caractersticas "no oficiales",que eran soportadas por los compiladores de AT&T,adems de otras caractersticas que no eran includas en los registros oficiales del lenguaje. Algunas de estas caractersticas eran: *Funciones void y el ti po de datos void*. *Funciones que retornaban ti pos de datos struct o union. *Asignacin de ti pos de datos struct. *Calificador const, que hace que un objeto sea de slo lectura. *Una biblioteca estndar,que incorporaba la mayora de las funcionalidades implementadas por varios desarrolladores de compiladores. *Enumeraciones. 2.3 Quien es Deniss Ritchie? (*Fuente: http://es.wiki pedia.org/wiki/Dennis_M._Ritchie) Nacido el 9 de septiembre de 1941, Dennis Ritchie, es un ingeniero NorteAmericano. Ritchie colabor en el diseo y desarrollo de los sistemas operativos Multics y Unix,as como el desarrollo de varios lenguajes de programacin como el C,sobre el cual escribi un clebre clsico de la Ingeniera de Sistemas,al cual me refer anteriormente,con Brian Wilson Kernighan: El Lenguaje de Programacin C. Ritchie recibi el Premio Turing de 1983 por su desarrollo de la teora de sistemas operativos genricos y su implementacin en la forma del sistema Unix. En 1998 le fue concedida la Medalla Nacional de Tecnologa de los Estados Unidos de Amrica. El ao 2007 se jubil,siendo el jefe del departamento de Investigacin en software de sistemas de Alcatel-Lucent. 2.. Quien es Ken Thompson? (*Fuente: http://es.wiki pedia.org/wiki/Ken_Thompson) 4 En 1965 Ken Thompson se grada en ciencias de la universidad y en 1966 consigue un Master en Ingeniera Elctrica y ciencias de la computacin,en UCLA. En los aos 60, Thompson y Ritchie desarrollaron el sistema operativo Multics. Mientras desarrollaba Multics,Thompson cre el lenguaje "Bon",al que llamo as por su esposa, Bonnie. Thompson y Ritchie abandonaron el desarrollo de Multics por su creciente complejidad,y en 1969 desarrollaron el sistema operativo UNIX. Thompson tambin dise el lenguaje de programacin B,que como anteriormen se mencion,es un precursor a C. En el 2 de septiembre de 1992,inventa junto a Rob Pike el cdigo de caracteres UTF-8,pero no fue presentado oficialmente hasta enero de 1993. Junto con Joseph Condon,cre el hardware y el software para Belle,un ordenador de ajedrez. Ms adelante,con la ayuda del experto ajedrecista John Roycroft,Thompson distribuy sus primeros resultados en CD-ROM. El estilo de programacin de Thompson ha influenciado notablemente a otros programadores. A finales de 2000,Thompson se retir de los laboratorios de Bell,para trabajar en Entrisphere donde estuvo hasta 2006. Actualmente trabaja para Google.

MARCO TEORICO (2)


2.5 Filosofia de Programacin "*Uno de los objetivos de diseo de C es que slo sean necesarias unas pocas instrucciones en lenguaje mquina para traducir cada elemento del lenguaje,sin que haga falta un soporte en tiempo de ejecucin. Es muy posible escribir C a bajo nivel de abstraccin; de hecho,C se us como intermediario entre diferentes lenguajes."(*The C Book,second edition by Mike Banahan) "*En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto de caractersticas,se pueden desarrollar compiladores de C fcilmente. En consecuencia,el lenguaje C est disponible en un amplio rango de plataformas (seguramente ms que cualquier otro lenguaje). Adems,a pesar de su naturaleza de bajo nivel,el lenguaje se desarroll para incentivar la programacin independiente de la mquina. Un programa escrito cumpliendo los estndares e intentando que sea porttil puede compilarse en muchos computadores."(*The C Book, second edition by Mike Banahan)

2.6 Estructura de un programa en C La sentencia ms sencilla que se puede escribir en C es la siguiente: main( ) { } Esta sentencia no tiene una funcionalidad especifica,pero contiene la parte ms importante de un programa C, adems es la sentencia ms pequea que se puede escribir y compilar correctamente. En esta sentencia se define la funcin main,que es la que ejecuta el sistema operativo al llamar a un programa C. (*Fuente: The Development of the C Language*. Dennis M. Ritchie. Bell Labs/Lucent Technologies. Murray Hill,NJ 07974 USA) El nombre de una funcin C siempre va seguida de parntesis,tanto si tiene argumentos como si no. La definicin de la funcin est formada por un bloque de sentencias,que esta encerrado entre llaves {}. Un ejemplo de una sentencia ms especfica: #include <stdio.h> main( ) { printf("Hello World!\n"); } Con esta sentencia se puede ver la frase Hello World!. En la primera lnea indica que se tengan en cuenta las funciones y ti pos definidos en la librera stdio (standard input/output). Estas definiciones se encuentran en el fichero header stdio.h. Ahora,en la funcin main se incluye una nica sentencia que llama a la funcin printf. Esta toma como argumento una cadena de caracteres,que se imprimen van encerradas entre dobles comillas " ". El smbolo \n indica un cambio de lnea. (*Fuente: The Development of the C Language*. Dennis M. Ritchie. Bell Labs/Lucent Technologies. Murray Hill,NJ 07974 USA)

2.7 Pros del lenguaje C

MARCO TEORICO (2)


Estas son algunos de las pros que puede tener este lenguaje de programacin,debido a la poca experiencia manejando C,se decidi poner los pros definidos en los diferentes foros de programadores expertos en el lenguaje,asi como en otras fuentes en internet. *C tiene un ncleo de lenguaje muy simple,con funcionalidades aadidas importantes,como funciones matemticas y de manejo de archivos,proporcionadas por bibliotecas. *Es un lenguaje flexible que permite al programador verstatilidad de estilos. Uno de los estilos ms emplea dos es el estructurado "no llevado al extremo". *El lenguaje C impide operaciones sin sentido. *C utiliza un lenguaje de preprocesado,el preprocesador de C,para tareas como definir macros e incluir mlti ples archivos de cdigo fuente. *C tiene acceso a memoria de bajo nivel mediante el uso de punteros. *C tiene Interrupciones al procesador con uniones. *Un conjunto reducido de palabras clave o keywords. *Por defecto, en C, el paso de parmetros a una funcin se realiza por valor. El paso por referencia se da pasando explcitamente a las funciones las direcciones de memoria de los parmetros con los uqe se esta trabajando. *Ti pos de datos agregados (struct) que permiten que los datos relacionados (como por ejemplo si un empleado,que tiene un id,un nombre y un salario) se combinen y se puedan mani pular como un todo (en una nica variable "empleado").

2.8 Contras del lenguaje C Estas son algunas de las contras que puede tener este lenguaje de programacin,debido a la poca experiencia manejando C,se decidi poner las contras definidas en los diferentes foros de programadores expertos en el lenguaje,asi como en otras fuentes en internet. *Soporte para programacin orientada a objetos,aunque la implementacin original de C++ fue un preproc esador que traduca cdigo fuente de C++ a C. *Encapsulacin. *Funciones anidadas,aunque GCC tiene esta caracterstica como extensin. *Polimorfismo en tiempo de cdigo en forma de sobrecarga,sobrecarga de operadores y slo dispone de un soporte rudimentario para la programacin genrica. *Soporte nativo para programacin multihilo y redes de computadores. *Recoleccin de basura nativa,sin embargo se encuentran a tal efecto bibliotecas como la "libgc" desarrol lada por Sun Microsystems,o el Recolector de basura de Boehm.

PERFORMANCE REQUIEREMENTS (3)


-Ejercicio 1. Write getfloat,the floating-point analog of getint. What type does getfloat return as its function value? /*Ejercicio 1*/ #include <ctype.h> #include <stdio.h> int getch(void); void ungetch(int); /* getint: siguiente integer del input/ int getint(int *pn) { int c, sign; while (isspace(c = getch())) ; if (!isdigit(c) && c != EOF && c != '+' && c != '-') { ungetch(c); return 0; } sign = (c == '-') ? -1 : 1; if (c == '+' || c == '-') c = getch(); for (*pn = 0; isdigit(c); c = getch()) *pn = 10 * *pn + (c - '0'); *pn *= sign; if (c != EOF) ungetch(c); return c;

#include <stdio.h> #define BUFSIZE 100 char buf[BUFSIZE]; int bufp = 0; /* buffer para ungetch */ /* siguiente posicion libre en el buffer*/

PERFORMANCE REQUIEREMENTS (3)


int getch(void) /* Caracter*/ { return (bufp > 0) ? buf[--bufp] : getchar(); } void ungetch(int c) { if (bufp >= BUFSIZE) printf("ungetch: Demasiados caracteres\n"); else buf[bufp++] = c; } #include <ctype.h> #include <math.h> int getfloat(float *fp) { int ch; int sign; int fraction; int digits; while (isspace(ch = getch())) /*Aca se habla de skip white*/ ; if (!isdigit(ch) && ch != EOF && ch != '+' && ch != '-' && ch != '.') { ungetch(ch); return 0; } sign = (ch == '-') ? -1 : 1; if (ch == '+' || ch == '-') { ch = getch(); if (!isdigit(ch) && ch != '.') { if (ch == EOF) { return EOF; } else { ungetch(ch); return 0; } } } *fp = 0; fraction = 0;

PERFORMANCE REQUIEREMENTS (3)


digits = 0; for ( ; isdigit(ch) || ch == '.' ; ch = getch()) { if (ch == '.') { fraction = 1; } else { if (!fraction) { *fp = 10 * *fp + (ch - '0'); } else { *fp = *fp + ((ch - '0') / pow(10, fraction)); fraction++; } digits++; } } *fp *= sign; if (ch == EOF) { return EOF; } else { ungetch(ch); return (digits) ? ch : 0; }

} #include <stdio.h> int main(void) { int ret; do { float f;

fputs("Introduzca un numero: ", stdout); fflush(stdout); ret = getfloat(&f); if (ret > 0) { printf("Ud introdujo: %f\n", f); } } while (ret > 0); if (ret == EOF) { puts("Stopped by EOF."); } else { puts("Stopped by bad input."); } return 0;

PERFORMANCE REQUIEREMENTS (3)


-Ejercicio 2 Write a function escape(s,t) that converts characters like newline and tab into visible escape sequences like \n and \t as it copies the string t to s . Use a switch . Write a function for the other direction as well,converting escape sequences into the real characters. /*Ejercicio 2*/ #include <stdio.h>/*Un include*/ void escape(char * s, char * t); void unescape(char * s, char * t); int main(void) { char text1[50] = "\aHello,\n\tWorld! Mistakee\b was \"Extra 'e'\"!\n"; char text2[51]; printf("Original string:\n%s\n", text1); escape(text2, text1); printf("Escaped string:\n%s\n", text2); unescape(text1, text2); printf("Unescaped string:\n%s\n", text1); } return 0;

/* TRADUCCION LITERAL: Se copia el string tal string s, conviertiendo caracteres especiales a su secuencia de escape apropiada. La secuencia complete de escape caraters que se usa en el capitulo 2 se utiliza aca, a excepcion de: \? \' \ooo \xhh Se obvivaron porque se pueden escribir directamente en el codigo fuente. */ void escape(char * s, char * t) { int i, j; i = j = 0; while ( t[i] ) {

PERFORMANCE REQUIEREMENTS (3)


/* Traduccion del caracter especial, si es que existe */

switch( t[i] ) { case '\n': s[j++] = '\\'; s[j] = 'n'; break; case '\t': s[j++] = '\\'; s[j] = 't'; break; case '\a': s[j++] = '\\'; s[j] = 'a'; break; case '\b': s[j++] = '\\'; s[j] = 'b'; break; case '\f': s[j++] = '\\'; s[j] = 'f'; break; case '\r': s[j++] = '\\'; s[j] = 'r'; break; case '\v': s[j++] = '\\'; s[j] = 'v'; break; case '\\': s[j++] = '\\'; s[j] = '\\'; break; case '\"': s[j++] = '\\'; s[j] = '\"'; break;

PERFORMANCE REQUIEREMENTS (3)


default: /* No es una secuencia de escape (escape sequence) asi que solo copiamos los caracteres */ } ++i; ++j; s[j] = t[i];

} s[j] = t[i];

/*

El caracter null

*/

-Ejercicio 3 Write a program that converts upper case to lower or lower case to upper,depending on the name it is invoked with,as found in argv[0]. #include <stdio.h>?*Estos son varios de los includes*/ #include <stdlib.h> #include <ctype.h> int main(int argc, char **argv) { int (*convcase[2])(int) = {toupper, tolower}; int func; int result = EXIT_SUCCESS; int ch; if(argc > 0) { if(toupper((unsigned char)argv[0][0]) == 'U') { func = 0; } else { func = 1; } while((ch = getchar()) != EOF) { ch = (*convcase[func])((unsigned char)ch); putchar(ch); }

} else { fprintf(stderr, "Nombre desconocido. No se puede decidir que hacer.\n");

PERFORMANCE REQUIEREMENTS (3)


} } result = EXIT_FAILURE;

return result;

Esta es otra posibilidad de solucion que vi en internet, mi version, manteniendo los creditos del autor, es esta. /* Write a program that converts upper case to lower case or lower case to upper, depending on the name it is invoked with, as found in argv[0]. Assumptions: The program should read from stdin, until EOF, converting the output to stdout appropriately. The correct outputs should be: Program Name lower upper Output stdin with all caps converted to lower case stdin with all lowercase characters converted to uppercase [anything else] helpful message explaining how to use this

Author : Bryan Williams */ #include <stdio.h>/* Estos son los incliudes*/ #include <stdlib.h> #include <ctype.h> #define SUCCESS #define NO_ARGV0 #define BAD_NAME 0 1 2

int main(int argc, char *argv[]) { int ErrorStatus = SUCCESS; int (*convert)(int c) = NULL; int c = 0; /*Chekear que hayan arguments*/ if(SUCCESS == ErrorStatus)

PERFORMANCE REQUIEREMENTS (3)


if(0 >= argc) { printf("Su ambiente no ha dado un solo argumento para el nombre del programa.\n"); ErrorStatus = NO_ARGV0; } } /* Chekear por nombres validos en el argv[0] string */ if(SUCCESS == ErrorStatus) { if(0 == strcmp(argv[0], "lower")) { convert = tolower; } else if(0 == strcmp(argv[0], "upper")) { convert = toupper; } else { printf("Este programa realiza dos funciones.\n"); printf("si el ejecutable se nombra lower entonces convierte todo el input en stdin a bajas.\n"); printf("Si el ejecutable se nombra upper entonces convierte todo el input en stdin a altas.\n"); printf("Si se nombro a porcentajes entonces aparecera este mensaje.\n", argv[0]); ErrorStatus = BAD_NAME; } } /* ok so far, keep looping until EOF is encountered */ if(SUCCESS == ErrorStatus) { while(EOF != (c = getchar())) { putchar((*convert)(c)); } } /* and return what happened */ return SUCCESS == ErrorStatus ? EXIT_SUCCESS : EXIT_FAILURE; } -Ejercicio 4 A function called abs_val that returns int and takes an int argument. It returns the absolute value of its argument, by negating it if it is negative. #include <stdio.h> {

PERFORMANCE REQUIEREMENTS (3)


#include <stdlib.h> main(){ int i, abs_val(int);; for(i = -10; i <= 10; i++) printf("abs of %d is %d\n", i, abs_val(i)); exit(EXIT_SUCCESS);

int abs_val(int x){ if(x < 0) return(-x); return(x);

-Ejercicio 5 A function called output that takes a single character argument and sends it to the program output with putchar. It will remember the current line number and column number reached on the output devicethe only values passed to the function are guaranteed to be alphanumeric,punctuation,space and newline characters. #include <stdio.h>/*includes para stdio.h y stdlib*/ #include <stdlib.h> int curr_line(void), curr_col(void); void output(char); main(){ printf("line %d\n", curr_line()); printf("column %d\n", curr_col()); output('a'); printf("column %d\n", curr_col()); output('\n'); printf("line %d\n", curr_line()); printf("column %d\n", curr_col()); exit(EXIT_SUCCESS);

Ejercicio 6

PERFORMANCE REQUIEREMENTS (3)


Construct a program to test output,where that function is in a separate file from the functions that are used to test it. In the same file as output will be two functions called current_line and current_column which return the values of the line and column counters. Ensure that those counters are made accessible only from the file that contains them. #include <stdio.h> int curr_line(void), curr_col(void); void output(char); static int lineno=1, colno=1; int curr_line(void){ return(lineno); } int curr_col(void){ return(colno); } void output(char a){ putchar(a); colno++; if(a == '\n'){ colno = 1; lineno++; } }

Ejercicio 7 Write and test a recursive function that performs the admittedly dull task of printing a list of numbers from 100 down to 1. On entry to the function it increments a static variable. If the variable has a value below 100,it calls itself again. Then it prints the value of the variable,decrements it and returns. Check that it works. #include <stdio.h> #include <stdlib.h> void recur(void); main(){ recur();

PERFORMANCE REQUIEREMENTS (3)


} exit(EXIT_SUCCESS);

void recur(void){ static ntimes; ntimes++; if(ntimes < 100) recur(); printf("%d\n", ntimes); ntimes--;

Ejercicio 8 Write functions to calculate the sine and cosine of their input. Choose appropriate types for both argument and return value. The series (given below) can be used to approximate the answer. The function should return when the value of the final term is less than 0.000001 of the current value of the function. sin x = x - pow(x,3)/fact(3) + pow(x,5)/fact(5)... cos x = 1 - pow(x,2)/fact(2) + pow(x,4)/fact(4)... #include <stdio.h>/*includes*/ #include <stdlib.h> #define PI 3.141592 #define INCREMENT (PI/20) #define DELTA .0001 double sine(double), cosine(double); static unsigned int fact(unsigned int n); static double pow(double x, unsigned int n); main(){ double arg = 0; for(arg = 0; arg <= PI; arg += INCREMENT){ printf("value %f\tsine %f\tcosine %f\n", arg, sine(arg), cosine(arg)); } exit(EXIT_SUCCESS);

static unsigned int fact(unsigned int n){ unsigned int answer; answer = 1;

PERFORMANCE REQUIEREMENTS (3)


while(n > 1) answer *= n--; } return(answer);

static double pow(double x, unsigned int n){ double answer; answer = 1; while(n){ answer *= x; n--; } return(answer);

double sine(double x){ double difference, thisval, lastval; unsigned int term; int sign; sign = -1; term = 3; thisval = x; do{ lastval = thisval; thisval = lastval + pow(x, term)/fact(term) * sign; term += 2; sign = -sign; difference = thisval - lastval; if(difference < 0) difference = -difference; }while(difference > DELTA && term < 16); } return(thisval);

double cosine(double x){ double difference, thisval, lastval; unsigned int term; int sign; sign = -1; term = 2;

PERFORMANCE REQUIEREMENTS (3)


thisval = 1; do{ lastval = thisval; thisval = lastval + pow(x, term)/fact(term) term += 2; sign = -sign; difference = thisval - lastval; if(difference < 0) difference = -difference; }while(difference > DELTA && term < 16); } return(thisval);

* sign;

CONCLUSIONES (4)
Estas son algunas de las conclusiones definitivas para este trabajo acadmico,cabe recalcar que debido a la poca experiencia manejando C,las conclusiones careceran de peso en cuanto a la parte puramente ejecucional del lenguaje. 1. Es un lenguaje flexible que permite al programador verstatilidad de estilos. Uno de los estilos ms empleados es el estructurado "no llevado al extremo". 2. Un conjunto reducido de palabras clave o keywords. Esto es muy importante ya que permite una mani pulacion efectiva del lenguaje de una manera mas rapida y depurada,a comparacin de otros lenguajes de programacin que requieren una biblioteca de palabras clave extensa. 3. Ti pos de datos agregados (struct) que permiten que los datos relacionados (como por ejemplo si un empleado,que tiene un id,un nombre y un salario) se combinen y se puedan mani pular como un todo (en una nica variable "empleado"). 4. Es un lenguaje ligeramente antiguo,a comparacion de otros lenguajes que utilizan integracion directa con ambientes web,utilizandio bibliotecas especificas para cumplir diferentes funciones. 5. Uns falencia de C es no tener un mtodo de encapsulacin.Existen mtodos de encapsulacin con C pero no son nativos del lenguaje. 6. C es un lenguaje utilizado con exito para desarrolo de sistemas operativos. 7. C es un lenguaje muy bsico pero que cumple con las expetativas. 8. Para sintetizar "C es un lenguaje de programacin de propsito general que ofrece una sintaxis muy breve,un control de flujo y estructuras sencillas y un buen conjunto de operadores. C es un lenguaje pequeo,sencillo y no est especializado en ningn ti po de aplicacin. C es un lenguaje relativamente potente,que tiene un campo de aplicacin ilimitado y que puede ser aprendido en un tiempo muy corto."

BIBLIOGRAFIA (5)
1. The C Book,second edition by Mike Banahan,Declan Brady and Mark Doran,originally published by Addison Wesley in 1991. 2. Curso de Lenguaje "C". Angel Sabas. Centro de Calculo universidad de Zaragoza. Ener0 1991. http://www.monografias.com/trabajos4/lenguajec/lenguajec.shtml 3. Introduccion a la Programacion en C. Marco A. Pena Basurto,Jose M Cela Espin. Primera edicion Septiembre de 2000. Edisions de la Universitat Politecnica de Catalunya,SL. 4. Estndar Internacional ISO/IEC 9899:TC3 http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf 5. Curso Onlinde de Lenguaje C. http://www.carlospes.com/curso_de_lenguaje_c/

You might also like