resumen programacion c

50
Programación I 1 RESUMEN PROGRAMACIÓN I TIPOS DE DATOS.......................................... 3 DATOS SIMPLES.................................................................3 DATOS COMPLEJOS (ESTRUCTURA DE DATOS).........................................3 OPERADORES....................................................................3 ESTRUCTURAS DE CONTROL.................................. 4 ESTRUCTURAS DE DECISIÓN O CONDICIONALES.......................................4 ESTRUCTURAS DE CICLOS.........................................................4 VECTORES................................................ 5 OPERACIONES TÍPICAS CON VECTORES..............................................6 MANEJO DE CADENAS...................................... 13 FUNCIONES ESTÁNDAR PARA MANEJAR CADENAS......................................14 PUNTEROS.....................................................................17 FUNCIONES.............................................. 18 A) PROTOTIPADO DE FUNCIONES.................................................18 B) DECLARACIÓN DE FUNCIONES.................................................18 C) INVOCACIÓN DE FUNCIONES..................................................18 D) PASO DE PARÁMETROS.......................................................19 E) FUNCIONES VOID........................................................... 19 F) ALOCACIÓN DINÁMICA DE MEMORIA............................................19 MÉTODOS DE ORDENAMIENTO................................21 1) SELECCIÓN................................................................21 2) BURBUJA..................................................................21 ALEATORIEDAD........................................... 24 RAND()........................................................................24 SRAND().......................................................................24 ESTRUCTURAS............................................ 25 DECLARACIÓN DE ESTRUCTURAS...................................................25 PASO DE ESTRUCTURAS A FUNCIONES..............................................25 LISTAS................................................. 29 DEFINICIÓN...................................................................29 FUNCIONES BÁSICAS SOBRE LISTAS...............................................30 Alexis Giorgi / Lucía González Clavijo

Upload: mauro-rodriguez

Post on 06-Nov-2015

243 views

Category:

Documents


3 download

DESCRIPTION

Resumen de Concepto Programación en C

TRANSCRIPT

Programacin I 1RESUMEN PROGRAMACIN ITIPOS DE DATOS3DATOS SIMPLES3DATOS COMPLEJOS (ESTRUCTURA DE DATOS)3OPERADORES3ESTRUCTURAS DE CONTROL4ESTRUCTURAS DE DECISIN O CONDICIONALES4ESTRUCTURAS DE CICLOS4VECTORES5OPERACIONES TPICAS CON VECTORES6MANEJO DE CADENAS13FUNCIONES ESTNDAR PARA MANEJAR CADENAS14PUNTEROS17FUNCIONES18a)PROTOTIPADO DE FUNCIONES18b)DECLARACIN DE FUNCIONES18c)INVOCACIN DE FUNCIONES18d)PASO DE PARMETROS19e)FUNCIONES VOID19f)ALOCACIN DINMICA DE MEMORIA19MTODOS DE ORDENAMIENTO211)SELECCIN212)BURBUJA21ALEATORIEDAD24rand()24srand()24ESTRUCTURAS25DECLARACIN DE ESTRUCTURAS25PASO DE ESTRUCTURAS A FUNCIONES25LISTAS29DEFINICIN29FUNCIONES BSICAS SOBRE LISTAS30

http://www.algoritmia.nethttp://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Chttp://www.fismat.umich.mx/mn1/manual/manual.htmlhttp://profeblog.es/blog/alfredo/curso-de-programacion-en-c/

TIPOS DE DATOS

DATOS SIMPLES: predefinidos por el lenguajeTipo de datoEspecificadoresde formatoComentario

Int%dEntero con signo

Float%fReal con signo

Char%ccaracter

Char [n]%sCadena de caracteres

DATOS COMPLEJOS (ESTRUCTURA DE DATOS):Las estructuras de datos pueden ser de dos tipos: Estticas: son aqullas que ocupan un espacio determinado en la memoria del ordenador. Este espacio es invariable y lo especifica el programador durante la escritura del cdigo fuente. Dinmicas: sin aqullas cuyo espacio ocupado en la memoria puede modificarse durante la ejecucin del programa.

OPERADORESNombre del OperadorSmbolo o representacinOrden de agrupacin

Operador de miembro de estructuranombre.miembro nombre->miembroizquierda -> derecha

incremento, decremento, positivo, negativo, NOT lgico, NOT de bits, derreferenciacin, direccin, cast, tamao++, --, +, -, !, ~, *'puntero, &nombre, (tipo)valor, sizeof(variable)derecha -> izquierda

Multiplicacin, Divisin, Mdulo*, /, %izquierda -> derecha

Suma y resta+, -izquierda -> derecha

Desplazamiento de bits izquierda y derechaizquierda -> derecha

Comparaciones: Mayor que, Mayor o igual que, Menor que, Menor o igual que>, >=, derecha

AND para bits&izquierda -> derecha

XOR para bits^izquierda -> derecha

OR para bits|izquierda -> derecha

AND para comparacin&&izquierda -> derecha

OR para comparacion||izquierda -> derecha

Expresiones de condicionesexpr1 ? expr2 : expr3derecha -> izquierda

Incrementar c en n, Decrementar c en n, Multiplicar c por n, Dividir c entre nc+=n, c-=n, c*=n, c/=n, ...derecha -> izquierda

ESTRUCTURAS DE CONTROLSe clasifican en estructuras de decisin y estructuras de ciclos

ESTRUCTURAS DE DECISIN O CONDICIONALESLas estructuras de decisin o condicionales realizan una comparacin y en base al resultado de esa comparacin, se sigue un curso de accin dentro del programa.

IFif (Condicin){Sentencia V;}else{Sentencia F;}

ESTRUCTURAS DE CICLOSSe utilizan para repetir una sentencia o un grupo de sentencias. La cantidad de veces que se repite puede ser conocida de antemano o no.

WHILEwhile (Condicin){sentencia 1;sentencia 2;sentencia N;}FORfor (pre ejecucin; condicin; pos ejecucin){sentencia 1;sentencia 2;sentencia N;}

VECTORESUn array (arreglo) es una agrupacin de varios datos individuales del mismo tipo bajo el mismo nombre. Cada dato individual de un array es accesible mediante un ndice.

El caso ms simple de array es el array unidimensional, tambin llamado vector. Por ejemplo, un vector de nmeros enteros es una coleccin de varios nmeros enteros a los que les adjudicamos un nico identificador.

La declaracin de un vector en C se hace as:tipo_de_datos nombre_vector[nmero_de_elementos];

Por ejemplo: int serie[5];La variableserieser un vector que contendr 5 nmeros enteros. Se puede acceder a cada uno de los nmeros que forman el vector escribiendo a continuacin del nombre un nmero entre corchetes. Ese nmero se denominandice. Ejemplo:int serie[5];serie[2] = 20;serie[3] = 15;serie[4] = serie[2] + serie[3];printf("%i", serie[4]);El vectorseriepuede almacenar hasta 5 nmeros enteros. En su posicin 2 se almacena el nmero 20, y en su posicin 3, el 15. Luego se suman ambos valores, y el resultado se almacena en la posicin 4. Finalmente, se imprime en la pantalla el resultado de la suma, es decir, 35.Es muy til representar los vectores de forma grfica para entenderlos mejor. El vector serie del ejemplo anterior se puede representar as:Posiciones01234

Valores??201535

Es importante observar queel primer elemento del vector tiene el ndice 0, es decir, el primer elemento es serie[0]. Como este vector tiene 5 elementos, el ltimo ser serie[4], no serie[5]. Observar tambin que los elementos 0 y 1 no han sido utilizados y, por lo tanto, tienen un valor desconocido, exactamente lo mismo que ocurre con cualquier variable de tipo simple que no se inicialice.Se pueden construir vectores cuyos elementos sean de cualquier otro tipo simple, con la nica restriccin de que todos los elementos sean del mismo tipo. Tambin es posible construir vectores cuyos elementos sean de un tipo complejo. As, podemos tener vectores de vectores o de cualquier otro tipo.OPERACIONES TPICAS CON VECTORES

1) Manipulacin de elementos individualesLos vectores en C deben manipularseelemento a elemento. Para asignar valores a los elementos de un vector el mecanismo es este:int serie[5];serie[0] = 5;serie[1] = 3;serie[2] = 7;...etc...

La inicializacin de los valores de un vector tambin puede hacerse conjuntamente en el momento de declararlo:int serie[5] = {5, 3, 7, 9, 14};

Cada elemento del vector es una variable que puede usarse independientemente de los dems elementos. As, por ejemplo, un elemento del vector serie puede usarse en una instruccin de salida igual que cualquier variable simple de tipo int:int serie[5];serie[0] = 21;printf("%i", serie[0]);

Del mismo modo, pueden usarse elementos de vector en una instruccin de entrada. Por ejemplo:int serie[5];scanf("%i", &serie[0]);serie[1] = serie[0] + 15;printf("%i", serie[1]);

2) Recorrido de un vectorUna forma habitual de manipular un vector es accediendo secuencialmente a todos sus elementos, uno tras otro. Para ello, se utiliza un bucle con contador, de modo que la variable contador nos sirve como ndice para acceder a cada uno de los elementos del vector.

Supongamos, por ejemplo, que tenemos un vector de 10 nmeros enteros declarado como int v[10]; y una variable entera declarada como int i; Por medio de un bucle podemos realizar todas estas operaciones:a) Inicializar todos los elementos a un valor cualquiera(por ejemplo, 0):for (i = 0; i dato);nodoAUX->sig = NULL;return nodoAUX;}

3) Insertar nodo desordenado:NODO *InsertarNodoDesordenado(NODO *l,NODO *n){ n->sig=l; return n;}

4) Insertar nodo ordenado:

NODO *InsertarNodoOrdenado(NODO *l,NODO *n){ NODO *aux;if (n->dato < l->dato){n->sig = l;return n;}else{aux = l;while (aux->sig != NULL && aux->sig->dato < n->dato )aux = aux->sig;

if (aux->sig == NULL)aux->sig = n;//llego al final de la listaelse{n->sig=aux->sig;aux->sig=n;}return l;}}

5) Mostrar lista en pantalla:

void MostrarLista(NODO *l){printf("\n****************** display de la lista ******************\n\n");while (l->sig != NULL){printf ("| %d ", l->dato);l = l->sig;}printf ("| %d | \n", l->dato);printf("\n****************** display de la lista ******************\n");}

6) Buscar un elemento en una listaint BuscarElementoEnLista (NODO *l,int n){ int rdo=0; if(l->sig==NULL) { if(l->dato==n) rdo=1; } while(l->sig!=NULL) { if(l->dato==n) rdo=1; l=l->sig; } return rdo;}

7) Eliminar elementos de una lista:a) Eliminar el primer nodo: t_nodo *segundo;if (primero != NULL) { // Comprobamos que la lista no est vacasegundo = primero->siguiente; // Guardamos la referencia al segundo elementofree(primero); // Eliminamos el primero (es importante liberar la memoria)primero = segundo; // El que era segundo se convierte en primero}b) Eliminar un nodo cualquiera: Suponiendo que queremos eliminar el nodo siguiente a aqul que contiene en dato 7:t_nodo *anterior, *aux;

// Primera parte: buscar el nodo anterior al que vamos a borrar (contendr el dato 7)anterior = primero;while ((anterior->dato != 7) && (anterior != NULL)) anterior = anterior->siguiente;// Segunda parte: borrar el nodo siguiente y reasignar los punterosif (anterior != NULL) { // Comprobamos que hemos encontrado el punto de eliminacin aux = anterior->siguiente; // aux es el nodo que queremos eliminar anterior->siguiente = aux->siguiente; // Reasignamos los enlaces free(aux); // Eliminamos el nodo}c) Eliminar todos los nodos de una lista:Para eliminar una lista completa hay que recorrer todos los nodos e ir liberando la memoria de cada uno, hasta que alcancemos el ltimo nodo (que reconoceremos porque estar apuntando a NULL).Otra manera de hacerlo es eliminar el primer elemento de la lista repetidamente, segn el algoritmo que hemos visto antes, hasta que el primer elemento sea NULL. Eso significar que la lista se ha quedado vaca./* ============================================================================ Name : listasSimples.c Author : German Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */

#include #include #include

struct nodo{int dato;struct nodo *sig;};typedef struct nodo NODO;

NODO *CrearNodo();void MostrarLista(NODO *l);NODO * InsertarNodoOrdenado(NODO *l, NODO *n);NODO * InsertarNodoDesOrdenado(NODO *l, NODO *n);int main(void) {NODO *raiz;NODO *nodoAux;NODO *newNodo;int cantNodos;int i;system("clear");printf("Ingrese la cantidad de nodos a crear: ");scanf("%d", &cantNodos);if (cantNodos < 1){printf("la cantidad de nodos debe ser mayor a 1 \n");return (0);}

raiz = CrearNodo();nodoAux = raiz;for (i = 1; i < cantNodos; i++){newNodo= CrearNodo();nodoAux = InsertarNodoDesOrdenado(nodoAux, newNodo);

MostrarLista(nodoAux);}raiz = nodoAux;MostrarLista(raiz);}

NODO * CrearNodo(){NODO *nodoAux;nodoAux = (NODO *) malloc(sizeof(NODO));printf("ingrese un valor para el nodo \n");fflush(stdin);scanf("%d", &nodoAux->dato);nodoAux->sig = NULL;return nodoAux;}void MostrarLista(NODO *l){printf("\n****************** display de la lista ******************\n\n");while (l->sig != NULL){printf ("| %d ", l->dato);l = l->sig;}printf ("| %d | \n", l->dato);printf("\n****************** display de la lista ******************\n");}NODO * InsertarNodoOrdenado(NODO *l, NODO *n){NODO *aux;if (n->dato < l->dato){n->sig = l;return (n);}else{aux = l;while (aux->sig != NULL && aux->sig->dato < n->dato )aux = aux->sig;

if (aux->sig == NULL)aux->sig = n;//llego al final de la listaelse{n->sig=aux->sig;aux->sig=n;}return (l);}

}

NODO * InsertarNodoDesOrdenado(NODO *l, NODO *n){n->sig = l;return (n);}

Alexis Giorgi / Luca Gonzlez Clavijo