Chuleta Lenguaje C (2017)

Resumen Español
Universidad Universidad Politécnica de Cataluña (UPC)
Grado Ingeniería de Sistemas de Telecomunicación - 2º curso
Asignatura Sistemes Operatius
Año del apunte 2017
Páginas 2
Fecha de subida 19/06/2017
Descargas 3
Subido por

Vista previa del texto

typedef struct { int oc; char nombre [30]; int puntos; } TEntrada; typedef TEntrada TablaJugadores [100]; void Inicializar (TablaJugadores tabla) { int i; for (i=0; i<100; i++) tabla[i].oc=0; } int PonJugador (TablaJugadores tabla, char nombre[30], int puntos) {int encontrado =0; int i=0; while ((i<100) && !encontrado) {if (tabla[i].oc==0) encontrado = 1; else i=i+1; } if (!encontrado) return -1; else { tabla[i].puntos = puntos; strcpy (tabla[i].nombre, nombre); tabla[i].oc=1; return i; } } void DameNombres (TablaJugadores tabla, int puntos, char resultado[100]) { int i; for (i=0; i<100;i++) if (tabla[i].oc==1) sprintf (resultado, "%s%s,",resultado, tabla[i].nombre); } int main(int argc, char *argv[]) { TablaJugadores miTabla; Inicializar(miTabla); int puntos; char nombre[30]; printf ("Escribe los datos de un jugador separados por un blanco\n"); scanf ("%s %d", nombre, &puntos); int id= PonJugador (miTabla, nombre, puntos); printf ("Puesto\n"); char nombres[100]; DameNombres (miTabla, 10, nombres); printf ("00: %s\n", nombres); char *p; p=strtok (nombres, ","); printf ("11\n"); while (p != NULL) { strcpy (nombre, p); p=strtok (NULL, ","); } } typedef struct {char nombre[20];int votos;} Partido; typedef struct { Partido partidos [100]; int num; } ListaPartidos; void AcumularVotos (ListaPartidos *lista, char nombre[20], int votos) {int encontrado =0; int i=0; // Buscamos el partido en la lista while ((i< lista->num) && (encontrado ==0)) if (strcmp(lista->partidos [i].nombre, nombre)==0) encontrado =1; else i=i+1; if (encontrado ==1) // El partido ya está lista->partidos [i].votos = lista->partidos[i].votos + votos; else // el partido no esta y hay que añadirlo al final de la lista {strcpy(lista->partidos [lista->num].nombre, nombre); lista->partidos [lista->num].votos= votos; lista->num = lista->num+1; }} int DameVotos (ListaPartidos *lista, char nombre[20]) {int encontrado =0; int i=0; // Buscamos el partido en la lista while ((i< lista->num) && (encontrado ==0)) if (strcmp(lista->partidos [i].nombre, nombre)==0) encontrado =1; else i=i+1; if (encontrado ==1) // El partido está return lista->partidos [i].votos; else // El partido no está return -1; } char* DameGanador (ListaPartidos *lista) {char ganador[20]; strcpy (ganador, lista->partidos[0].nombre); int votos= lista->partidos[0].votos; int i=1; while (i< lista->num) {if (lista->partidos[i].votos > votos) {strcpy (ganador, lista->partidos[i].nombre); votos= lista->partidos[i].votos; } i=i+1; } return ganador; } void EscribirLista (ListaPartidos *lista) {int i; printf ("**************************\n"); for (i=0; i<lista->num;i++) printf ("Partido: %s, Votos: %d\n", lista->partidos[i].nombre, lista->partidos[i].votos); printf ("**************************\n"); } int main(int argc, char *argv[]) {ListaPartidos miLista; char nombre[20]; int votos; miLista.num=0; int i; for (i=0; i<5; i++) {printf ("Escribe el nombre y los votos del partido\n"); scanf ("%s %d", nombre, &votos); AcumularVotos (&miLista, nombre, votos); } EscribirLista (&miLista); printf ("Escribe el nombre de un partido\n"); scanf ("%s", nombre); votos = DameVotos (&miLista, nombre); if (votos != -1) printf ("Los votos de %s son %d\n", nombre, votos); else printf ("El partido no existe\n"); strcpy (nombre, DameGanador (&miLista)); printf ("El partido ganador es: %s\n", nombre); } typedef char Nombre [20]; typedef struct { int num; Nombre usuarios [100]; } Tlista; int PonNombre (Tlista *l, Nombre usuario) {if (l->num < 100) {strcpy(l->usuarios[l->num], usuario); l->num=l->num+1; return 0; } else return -1; } char *DameAnterior (Tlista *l, Nombre usuario) {Nombre anterior; int encontrado = 0; int i=0; while ((i<l->num) && encontrado ==0) {if (strcmp (l->usuarios[i], usuario) ==0) encontrado=1; else i=i+1; } if ((encontrado ==1)&& (i>0)) strcpy(anterior,l->usuarios[i-1]); else if ((encontrado ==1)&& (i==0)) strcpy( anterior, “Es el primero”); else strcpy( anterior, “No est£”); return anterior; } int main(int argc, char *argv[]) {Tlista miLista; miLista.num=0; Nombre nom; int I; for (i=0; i<5; i++) {printf (“Escribe un nombre\n”); scanf (“%s”,nom); PonNombre (&miLista,nom); } printf (“Dame el nombre para buscar su anterior\n”); scanf (“%s”,nom); Nombre anterior; strcpy (anterior, DameAnterior (&miLista, nom)); printf (“Resultado: %s\n”, anterior); } CADENAS int reemplazar (char mensaje[80]) /* reemplaza cada caracter blanco que aparezca en el mens por un * y retorna el número de caracteres reemplazados */ {int i=0; int cont=0; while (i< strlen (mensaje)) {if (mensaje [i]== ' ') {mensaje [i]= '*'; cont = cont+1; } i=i+1; } return cont; } void prepara_mensaje (char nombre[10], int codigo, char mensaje [80]) /* Prepara un mensaje que contiene: "1/nombre codigo", siendo nombre y código los valores recibidos {sprintf (mensaje,"1/%s %d",nombre,codigo); } void descompon_mensaje (char mensaje[80], char nombre[10], int *codigo) /* El mensaje que recibe como parámetro contiene "1/nombre codigo".
* El procedimiento obtiene del mensaje el nombre y el código los deja en * variables que recibe como parámetro {int n; sscanf (mensaje, "1/%s %d", nombre, &n); *codigo =n; // codigo alternativo: // sscanf (mensaje, "1/%s %d", nombre, codigo); } void construye_lista (char mensaje[80]) /* Construye un mensaje que contiene "2/" seguido de una serie de parejas * codigo nombre (separados por *). Las parejas están separadas por ','.
* Por ejemplo: "2/24*Luis,14*Marcos,51*Pedro," * Todos los datos se leen del teclado.
{strcpy (mensaje, "2/"); int n; int i, codigo; char nombre [10]; printf ("¿cuantas parejas (codigo, nombre) vas a introducir?\n"); scanf ("%d", &n); i=0; while (i<n) {printf ("Introduce la siguiente pareja codigo nomnbre, separados por blancos\n"); scanf ("%s %d", nombre, &codigo); sprintf (mensaje, "%s%d*%s,", mensaje, codigo,nombre); i=i+1; } } void descompon_lista (char mensaje [80]) /* Escribe en pantalla las parejas nombre codigo que extrae de la lista que recibe en el mensaje, que tiene el mismo formato que el usado en la función construye_lista {char lista [80]; char nombre [10]; int codigo; char *p; sscanf (mensaje, "2/%s", lista); //Eliminamos cabecera del mensaje /* la función strtok va muy bien para separar un número desconocido de datos en una cadena de caracteres. Se recomienda estudiar buscar información sobre su funcionamiento (que es un poco raro)*/ p = strtok( lista, ","); /*strtok ha buscado en la lista la coma y la sustituye por fin de cadena.
Ahora p apunta a una cadena que contiene "codigo*nombre" sscanf (p,"%d*%s", &codigo,nombre); //separamos codigo y nombre printf ("Primera pareja: %s, %d\n", nombre, codigo); /* ahora buscamos la siguiente aparición de la coma en la frase y el proceso se repite */ p = strtok( NULL, ","); while ( p != NULL ) { sscanf (p,"%d*%s", &codigo,nombre); printf ("Siguiente pareja: %s, %d\n", nombre, codigo); p = strtok( NULL, ","); } } int main(void) { setvbuf (stdout, NULL, _IONBF, 0); char frase [80] = "Este es el mensaje de ejemplo"; int cont; char nombre [10]; int codigo; cont = reemplazar (frase); printf ("La frase ha quedado así: %s\n", frase); printf ("El número de blancos reemplazados es: %d\n", cont); scanf ("%*c"); prepara_mensaje ("Luis",24,frase); printf ("El mensaje construido es: %s\n",frase); scanf ("%*c"); descompon_mensaje (frase, nombre, &codigo); printf ("El nombre es:%s y el código es: %d\n", nombre, codigo); scanf ("%*c"); construye_lista (frase); printf ("La lista construida es: %s\n", frase); scanf ("%*c"); descompon_lista (frase); scanf ("%*c"); } +++++++++++++++++++++++++++++++++ int contar (char frase [80]) //devuelve el número de veces que aparece la letra 'a' en la frase { int i=0; int cont=0; while (i< strlen (frase)) {if (frase[i]=='a') cont = cont+1; i=i+1; } return cont; void extraer_texto (char mensaje [80]) /* Recibe un mensaje con el formato: 3/Nombre:Texto {char texto [80]; char nombre [10]; char *p; char m[80]; strcpy (m, mensaje); p= strtok (m,":"); sscanf (p,"3/%s",nombre); printf ("%s\n",nombre); p=strtok (NULL, ":"); sscanf (p,"%s",texto); printf ("%s ha enviado el siguiente mensaje: ",nombre); puts (p); } void construir_mensaje (char mensaje [80]) /* Lee del teclado un nomnbre y un texto y construye el mensaje: * 3/Nombre:Texto {char nombre [10]; char texto[80]; printf ("Escribe el nombre y el texto : \n"); scanf ("%s", nombre); gets (texto); //Aqui lee toda la frase hasta el final sprintf (mensaje, "3/%s:", nombre); strcat (mensaje, texto); } int contar_palabras (char texto [80]) /* Devuelve el número de palabras que hay en el texto con más d 3 caract {int cont=0; char *p; char t[80]; strcpy (t,texto); p=strtok (t," "); while (p!=NULL) {if (strlen (p) >3) cont=cont+1; p=strtok (NULL," "); } return cont; } int main(void) { setvbuf (stdout, NULL, _IONBF,0); int c = contar ("Frase aprueba"); printf ("Numero de repeticiones de la letra 'a': %d\n",c); scanf ("%*c"); extraer_texto ("3/Miguel:Esta es la frase"); construir_mensaje (frase); printf ("La frase construida es:"); puts (frase); int pal = contar_palabras ("Frase de otra prueba"); printf ("Numero de palabras con mas de tres letras: %d\n",pal); return EXIT_SUCCESS; } LISTAS #define MAX 100 typedef struct { int codigo; char nombre [10]; } Tusuario; typedef struct { int num; // numero de usuarios en la lista Tusuario usuarios [MAX]; } Tlista; void inicializa_lista (Tlista *l) // Pone a 0 el numero de usuarios de la lista {l->num=0; } void leer_usuario (Tusuario *t) {printf ("Escribe el codigo y el nombre: \n"); scanf ("%d %s", &t->codigo, t->nombre); fflush (stdin); } int pon_usuario (Tlista *l, Tusuario u) /* Añade el usuario u al final de la lista.
{if (l->num==MAX) return -1; else {l->usuarios[l->num]=u; l->num=l->num+1; return 0; } } void escribir_lista (Tlista l) // Escribe en pantalla todos los usuarios de la lista { printf ("Lista de usuarios:\n"); int i=0; while (i<l.num) {printf ("Nombre: %s, codigo %d\n", l.usuarios[i].nombre, l.usuarios[i].codigo); i=i+1; } printf ("\n\n"); } int eliminar (int i, Tlista *l) /* Elimina de la lista el usuario que ocupa la posición i * Devuelve 0 si ok y -1 si no hay usuario en la posición i {int j; if (i>= MAX) return -1; else { j=i; while (j< l->num-1) {l->usuarios[j]= l-> usuarios[j+1]; j=j+1; } l->num=l->num-1; return 0; } } int buscar (char nombre[10], Tlista l) /* Devuelve la posición que ocupa en la lista el usuario cuyo nombre se recibe * como parámetro. Si el usuario no está en la lista devuelve un -1 {int encontrado = 0; int i=0; while ((i<l.num) &&(!encontrado)) {if (strcmp (l.usuarios[i].nombre, nombre)==0) encontrado = 1; if (!encontrado) i=i+1; } if (encontrado) return i; else return -1; } void construir_lista (Tlista l, char mensaje[80]) /* Construye un mensaje de texto con los nombre de los usuarios que hay en la lista l, separados por una coma */ { int i=1; strcpy (mensaje, l.usuarios[0].nombre); while (i<l.num) {sprintf (mensaje, "%s,%s",mensaje,l.usuarios[i].nombre); i=i+1; } } int main(void) { setvbuf (stdout, NULL, _IONBF,0); Tlista mi_lista; Tusuario t; char mensaje [80]; inicializa_lista (&mi_lista); leer_usuario (&t); pon_usuario (&mi_lista,t); leer_usuario (&t); pon_usuario (&mi_lista,t); leer_usuario (&t); pon_usuario (&mi_lista,t); escribir_lista (mi_lista); eliminar (1, &mi_lista); escribir_lista (mi_lista); int p= buscar ("Miguel", mi_lista); printf ("Miguel está en la posición %d\n",p); construir_lista (mi_lista, mensaje); printf ("La lista es: %s\n",mensaje); return EXIT_SUCCESS; } TABLAS #define MAX 100 typedef struct { int id; // si vale -1 es que este elemento de la tabla está libre char nombre [10]; } Telemento; typedef Telemento Ttabla [MAX]; void leer_elemento (Telemento *e) /* Lee del teclado los datos de un elemento y los deja en e {printf ("\n\n"); printf (" Escribe el nombre:\n"); scanf ("%s", e->nombre); printf (" Escribe el identificador: \n"); scanf ("%d", &e->id); } void inicializa (Ttabla t) /* Pone la marca de libre a todas las posiciones de la tabla * Observar que siendo la tabla un vector, C la pasa automáticamente * por referencia (no hace falta poner * ni & ni -> ) {int i; for ( i=0; i<MAX; i++) t[i].id = -1; } void escribir_tabla (Ttabla t) /* Escribe en pantalla los datos de los elementos de la tabla {int i; printf ("Contenido de la tabla:\n"); for (i=0; i<MAX; i++) if (t[i].id !=-1) printf ("Nombre: %s, Id: %d\n", t[i].nombre, t[i].id); } int pon_elemento (Ttabla t, Telemento e) /* Busca un sitio libre en la tabla y coloca allí el elemento * Retorna 0 si oK y -1 si la lista está llena {int encontrado = 0; int i=0; while ((i<MAX) && ! encontrado) {if (t[i].id == -1) encontrado = 1; if (!encontrado) i=i+1;} if (encontrado) {t[i]=e; return 0; } else return -1; } int eliminar (Ttabla t, char nombre [10]) {int encontrado = 0; int i=0; while ((i<MAX) && ! encontrado) {if (strcmp (t[i].nombre,nombre) == 0) encontrado = 1; ...

Comprar Previsualizar