partado 2.5.1: Crear un programa que pida al usuario que teclee cuatro letras y las muestre en pantalla juntas, pero en orden inverso, y entre comillas dobles. Por ejemplo si las letras que se teclean son a, l, o, h, escribiría "hola".
/*-------------------------*/ /* /* /*
Solucion al ejercicio propuesto 2.5.1 s020501.c
/*
*/ */ */ */
/*
Pedir al usuario 4
*/
/*
letras, mostrarlas en
*/
/*
orden inverso y entre
*/
/*
comillas
*/
/* /* /*
*/ Curso de C, Nacho Cabanes
*/ */
/*-------------------------*/ #include int main int main() () { char letra1 char letra1, , letra2 letra2, , letra3 letra3, , letra4; printf( printf ("Introduce la primera letra: ") "); scanf( scanf ("%c%c" "%c%c", , &letra1 letra1) ); printf( printf ("Introduce la segunda letra: ") "); scanf( scanf ("%c%c" "%c%c", , &letra2 letra2) ); printf( printf ("Introduce la tercera letra: ") "); scanf( scanf ("%c%c" "%c%c", , &letra3 letra3) ); printf( printf ("Introduce la cuarta letra: ") "); scanf( scanf ("%c%c" "%c%c", , &letra4 letra4) ); printf( printf ("Al reves quedan como \"%c%c%c%c\"", letra4, letra4 , letra3 letra3, , letra2 letra2, , letra1 );
return 0;
}
Apartado 3.1.1a: Crear un programa que pida al usuario un número entero y diga si es par (pista: habrá que comprobar si el resto que se obtiene al dividir entre dos es cero: if (x % 2 == 0) ...
/*-------------------------*/ /* /* /*
Solucion al ejercicio propuesto 3.1.1a s030101a.c
/*
*/ */ */ */
/*
Ver si un numero es
*/
/*
par
*/
/* /* /*
*/ Curso de C, Nacho Cabanes
*/ */
/*-------------------------*/ #include int main int main() () { int x; int x; printf( printf ("Escribe un numero: ") "); scanf( scanf ("%d" "%d", , &x); if (x%2 == 0)
printf( printf ("Es un numero par.") par.");
if (x%2 != 0)
printf( printf ("Es un numero impar.") impar."); return 0;
}
Apartado 3.1.1b: Crear un programa que pida al usuario dos números enteros y diga cual es el mayor de ellos.
/* Queda propuesto, por ser muy parecido a otros ya resueltos */
Apartado 3.1.1c: Crear un programa que pida al usuario dos números enteros y diga si el primero es múltiplo del segundo (pista: igual que antes, habrá que ver si el resto de la división es cero: a % b == 0).
/* Queda propuesto, por ser muy parecido a otros ya resueltos */
Apartado 3.1.3a: Crear un programa que multiplique dos números enteros de la siguiente forma: pedirá al usuario un primer número entero. Si el número que se que teclee es 0, escribirá en pantalla "El producto de 0 por cualquier número es 0". Si se ha tecleado un número distinto de cero, se pedirá al usuario un segundo número y se mostrará el producto de ambos.
/* Queda propuesto, por ser muy parecido a otros ya resueltos */
Apartado 3.1.3b: Crear un programa que pida al usuario dos números reales. Si el segundo no es cero, mostrará el resultado de dividir entre el primero y el segundo. Por el contrario, si el segundo número es cero, escribirá "Error: No se puede dividir entre cero".
/*-------------------------*/ /*
Solucion al ejercicio
/* /*
propuesto 3.1.3b s030103b.c
/*
*/ */ */ */
/*
Dividir... solo si es
*/
/*
posible
*/
/* /*
*/ Curso de C,
/*
Nacho Cabanes
*/ */
/*-------------------------*/ #include int main int main() () { float x float x, , y; printf( printf ("Escribe un numero: ") "); scanf( scanf ("%f" "%f", , &x); printf( printf ("Escribe otro numero: ") "); scanf( scanf ("%f" "%f", , &y); ==0 0) if (y== printf( printf ("Error: No se puede dividir entre cero.") cero." ); !=0 0) if (y!= printf( printf ("El resultado de su division es %f", %f", x/y);
return 0;
}
Apartado 3.1.4a: Crear un programa que multiplique dos números enteros de la siguiente forma: pedirá al usuario un primer número entero. Si el número que se que teclee es 0, escribirá en pantalla "El producto de 0 por cualquier número es 0". Si se ha tecleado un número distinto de cero, se pedirá al usuario un segundo número y se mostrará el producto de ambos. (Variante con "else")
/* Queda propuesto, por ser muy parecido a otros ya resueltos */
Apartado 3.1.4b: Crear un programa que pida al usuario dos números reales. Si el segundo no es cero, mostrará el resultado de dividir entre el primero y el segundo. Por el contrario, si el segundo número es cero, escribirá "Error: No se puede dividir entre cero". (Variante con "else")
/*-------------------------*/ /* /* /*
Solucion al ejercicio propuesto 3.1.4b s030104b.c
/*
*/ */ */ */
/*
Dividir... solo si es
*/
/*
posible (usa "else")
*/
/* /* /*
*/ Curso de C, Nacho Cabanes
*/ */
/*-------------------------*/ #include int main int main() ()
{ float x float x, , y; printf( printf ("Escribe un numero: ") "); scanf( scanf ("%f" "%f", , &x); printf( printf ("Escribe otro numero: ") "); scanf( scanf ("%f" "%f", , &y); ==0 0) if (y== printf( printf ("Error: No se puede dividir entre cero.") cero." ); else
printf( printf ("El resultado de su division es %f", %f", x/y); return 0;
}
Apartado 3.1.5a: Crear un programa que pida una letra al usuario y diga si se trata de una vocal.
/*-------------------------*/ /* /* /*
Solucion al ejercicio propuesto 3.1.5a s030105a.c
/*
*/ */ */ */
/*
Ver si una letra es
*/
/*
una vocal
*/
/* /* /*
*/ Curso de C, Nacho Cabanes
*/ */
/*-------------------------*/
#include int main int main() () { char x; char x; printf( printf ("Introduce una letra en minusculas: ") "); x = getchar getchar() (); ; =='a' 'a') ) || (x== =='e' 'e') ) || (x== =='i' 'i') ) if ( (x== || (x== =='o' 'o') ) || (x== =='u' 'u') ) ) printf( printf ("Es una vocal.") vocal."); else
printf( printf ("No es una vocal.") vocal."); return 0;
}
Apartado 3.1.5b: Crear un programa que pida al usuario dos números enteros y diga "Uno de los números es positivo", "Los dos números son positivos" o bien "Ninguno de los números es positivo", según corresponda.
/* Queda propuesto, por ser muy parecido a otros ya resueltos */
Apartado 3.1.5c: Crear un programa que pida al usuario tres números reales y muestre cuál es el mayor de los tres.
/* Queda propuesto, por ser muy parecido a otros ya resueltos */
Apartado 3.1.5d: Crear un programa que pida al usuario dos números enteros cortos y diga si son iguales o, en caso contrario, cuál es el mayor de ellos.
/* Queda propuesto, por ser muy parecido a otros ya resueltos */
Apartado 3.1.9a: Crear un programa que use el operador condicional para mostrar un el valor absoluto de un número de la siguiente forma: si el número es positivo, se mostrará tal cual; si es negativo, se mostrará cambiado de signo.
/* Queda propuesto, por ser muy parecido a otros ya resueltos */
Apartado 3.1.9b: Crear un programa que use el operador condicional para dar a una variable llamada "iguales" (entera) el valor 1 si los dos números que ha tecleado el usuario son iguales, o el valor 0 si son distintos.
/* Queda propuesto, por ser muy parecido a otros ya resueltos */
Apartado 3.1.9c: Usar el operador condicional para calcular el mayor de dos números.
/*-------------------------*/ /* /* /* /*
Solucion al ejercicio propuesto 3.1.9c s030109c.c
*/ */ */ */
/*
Mayor de dos numeros
*/
/*
con operador condic.
*/
/* /* /*
*/ Curso de C, Nacho Cabanes
*/ */
/*-------------------------*/ #include int main int main() () { int a int a, , b b, , mayor; printf( printf ("Escribe un numero: ") "); scanf( scanf ("%d" "%d", , &a); printf( printf ("Escribe otro numero: ") "); scanf( scanf ("%d" "%d", , &b); mayor = (a>b) ? a : b; printf( printf ("El mayor es %d", %d", mayor mayor) ); return 0;
}
Apartado 3.2.1a: Crear un programa que pida al usuario su contraseña (numérica). Deberá terminar cuando introduzca como contraseña el número 4567, pero volvérsela a pedir tantas veces como sea necesario.
/* Ejercicio sin resolver por ahora */
Apartado 3.2.1b: Crea un programa que escriba en pantalla los números del 1 al 10, usando "while".
/* Ejercicio sin resolver por ahora */
Apartado 3.2.1c: Crea un programa que escriba en pantalla los números pares del 26 al 10 (descendiendo), usando "while".
/* Ejercicio sin resolver por ahora */
Apartado 3.2.1d: Crear un programa calcule cuantas cifras tiene un número entero positivo (pista: se puede hacer dividiendo varias veces entre 10).
/*-------------------------*/ /* /* /*
Solucion al ejercicio propuesto 3.2.1d s030201d.c
/*
*/ */ */ */
/*
Cantidad de cifras de
*/
/*
un entero
*/
/* /* /*
*/ Curso de C, Nacho Cabanes
*/ */
/*-------------------------*/ #include int main int main() () { int numero; int numero; int cifras int cifras = 1;
printf( printf ("Introduce un numero: ") "); scanf( scanf ("%d" "%d", , &numero numero) ); 10) ) while(numero >= 10 { numero /= 10 10; ; cifras ++; } printf( printf ("El numero tiene %d cifras\n", cifras cifras) ); return 0;
} Apartado 5.1.3b: Crear un programa que pida al usuario 10 números y luego los muestre en orden inverso (del último al primero).
/*-------------------------*/ /* /* /*
Solucion al ejercicio propuesto 5.1.4b s050104b.c
/*
*/ */ */ */
/*
Pedir 10 datos reales
*/
/*
y mostrarlos al reves
*/
/* /* /*
*/ Curso de C, Nacho Cabanes
*/ */
/*-------------------------*/ #include int main int main() () { float datos float datos[ [10 10] ]; int i; int i;
/* Pido los datos */ printf( printf (" Introduzca los 10 datos \n"); i<10 10; ; i++ i++) ) for (i=0; i< scanf( scanf ("%f" "%f", , &datos datos[ [i]) ]); ; /* Y muestro los datos al reves */ printf( printf ("Los numeros introducidos, al reves, son: ") "); i>=0 0; i-i--) ) for (i=9; i>= printf( printf ("%f
", datos ", datos[ [i]) ]); ;
return 0;
}
Apartado 5.2.3a: Un programa que te pida tu nombre y lo muestre en pantalla separando cada letra de la siguiente con un espacio. Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla "J u a n".
/*-------------------------*/ /* /* /*
Solucion al ejercicio propuesto 5.2.3a s050203a.c
/*
*/ */ */ */
/*
Espacios entre las
*/
/*
letras de una cadena
*/
/*
*/
/*
Aportado por:
*/
/*
Pablo Rampa
*/
/* /* /*
*/ Curso de C, Nacho Cabanes
*/ */
/*-------------------------*/ #include
#include int main int main() () { int i; int i; char nombre char nombre[ [30 30] ]; printf( printf ("Escriba su nombre
");
scanf( scanf ("%s" "%s", , nombre nombre) ); i
}
Apartado 5.2.3b: Un programa que te pida tu nombre y lo muestre en pantalla separando al revés. Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla "nauJ".
/* Queda propuesto, por ser muy parecido a otros ya resueltos */
Apartado 5.2.4a: Un programa que te pida una frase y la muestre en pantalla sin espacios. Por ejemplo, si la frase es "Hola, como estás", debería aparecer en pantalla "Hola,comoestás".
/*-------------------------*/ /* /* /* /*
Solucion al ejercicio propuesto 5.2.4a s050204a.c
*/ */ */ */
/*
Cadena sin espacios
/* /*
*/ */
Curso de C,
/*
Nacho Cabanes
*/ */
/*-------------------------*/ #include #include int main int main() () { char frase char frase[ [80 80] ]; int
i;
printf( printf ("Escriba una frase
");
gets( gets (frase frase) ); strlen( (frase frase) ); i++ i++) ) for(i=0; i < strlen frase[ [i] != ' ') ') if (frase printf( printf ("%c" "%c", ,frase frase[ [i]) ]); ; return 0;
}
Apartado 5.2.4b: Un programa que te pida tu nombre (usando "gets") y una cifra numérica, y escriba tu nombre tantas veces como indique esa cifra numérica.
/*-------------------------*/ /* /* /*
Solucion al ejercicio propuesto 5.2.4b s050204b.c
/* /*
*/ */ */ */
Cadena repetida, gets
*/
/* /*
*/ Curso de C,
/*
Nacho Cabanes
*/ */
/*-------------------------*/ #include #include int main int main() () { char frase char frase[ [80 80] ]; int int cantidad; int
i;
printf( printf ("Dime tu nombre: ") "); gets( gets (frase frase) ); printf( printf ("Cuantas veces lo escribimos? ") "); scanf( scanf ("%d" "%d", , &cantidad cantidad) ); i++) ) for(i=0; i < cantidad; i++ printf( printf ("%s\n",frase frase) ); return 0;
}
Apartado 5.2.4c: Un programa similar al anterior, pero que pida en primer lugar la cifra numérica y después tu nombre (con "gets"), y luego escriba el nombre tantas veces como indique esa cifra numérica.
/*-------------------------*/ /* /*
Solucion al ejercicio propuesto 5.2.4c
*/ */
/*
s050204c.c
/*
*/ */
/*
Cadena repetida (2),
*/
/*
con gets
*/
/* /*
*/ Curso de C,
/*
Nacho Cabanes
*/ */
/*-------------------------*/ #include #include int main int main() () { char frase char frase[ [80 80] ]; int int cantidad; int
i;
printf( printf ("Cuantas veces escribimos el texto? ") "); scanf( scanf ("%d" "%d", , &cantidad cantidad) ); getchar() getchar (); ; /* Para absorber el \n */ printf( printf ("Dime el texto: ") "); gets( gets (frase frase) ); i++) ) for(i=0; i < cantidad; i++ printf( printf ("%s\n",frase frase) ); return 0;
}
Apartado 5.2.5: Un programa que te pida una palabra, y la almacene en la variable llamada "texto". Luego deberá pedir una segunda palabra, y añadirla al
final de "texto". Finalmente, deberá pedir una tercera palabra, y guardarla en la variable "texto" y en otra variable llamada "texto2".
/* Ejercicio sin resolver por ahora */
Apartado 5.2.6a: Crear un programa que pida al usuario su contraseña. Deberá terminar cuando introduzca como contraseña la palabra "clave", pero volvérsela a pedir tantas veces como sea necesario.
/*-------------------------*/ /*
Solucion al ejercicio
/*
propuesto 5.2.6a
/*
s050206a.c
/*
*/ */ */ */
/*
Pedir clave de acceso
*/
/*
de forma repetitiva
*/
/*
*/
/*
Aportado por:
*/
/*
Pablo Rampa
*/
/*
*/
/*
Curso de C,
/*
Nacho Cabanes
*/ */
/*-------------------------*/ #include #include int main int main() () { char intento char intento[ [10 10] ]; char palabraClave char palabraClave[] []= ="clave" "clave"; ; do
{
printf( printf ("Escriba su clave: ") "); gets( gets (intento intento) ); } strcmp( (intento intento, , palabraClave palabraClave) ) != 0); while (strcmp printf( printf ("Acceso concedido... Sea Ud. bienvenido!") bienvenido!"); return 0;
}
Apartado 5.4a: Un programa que pida 10 nombres y los memorice. Después deberá pedir que se teclee un nombre y dirá si se encuentra o no entre los 10 que se han tecleado antes. Volverá a pedir otro nombre y a decir si se encuentra entre ellos, y así sucesivamente hasta que se teclee "fin".
/*-------------------------*/ /* /* /*
Solucion al ejercicio propuesto 5.4a s0504a.c
/*
*/ */ */ */
/*
Buscar nombre en un
*/
/*
array
*/
/* /* /*
*/ Curso de C, Nacho Cabanes
*/ */
/*-------------------------*/ #include #include int main int main() () { int i; int i; char nombres char nombres[ [10 10][ ][80 80] ];
char nombreBuscar char nombreBuscar[ [80 80] ]; int encontrado; int encontrado; printf( printf ("\n Escriba 10 nombres: \n"); i<10 10; ; i++ i++) ) for (i=0; i< gets( gets (nombres nombres[ [i]) ]); ; do
{ printf( printf ("Escriba nombre a buscar, o \"fin\" para terminar: ") "); gets( gets (nombreBuscar nombreBuscar) ); encontrado = 0; strcmp( (nombreBuscar nombreBuscar, , "fin" "fin") ) != 0) if (strcmp { i<10 10; ; i++ i++) ) for (i=0; i< { strcmp( (nombreBuscar nombreBuscar, , nombres nombres[ [i]) if (strcmp == 0) encontrado = 1; } if (encontrado == 1)
printf( printf ("Este nombre se encuentra en la lista\n"); else
printf( printf ("Este nombre no se encuentra en la lista\n"); } } strcmp( (nombreBuscar nombreBuscar, , "fin" "fin") ) != 0); while (strcmp return 0;
} Apartado 5.5.2b: Un programa que permita guardar datos de "imágenes" (ficheros de ordenador que contengan fotografías o cualquier otro tipo de información gráfica). De cada imagen se debe guardar: nombre (texto), ancho en píxeles (por ejemplo 2000), alto en píxeles (por ejemplo, 3000), tamaño en Kb (por ejemplo 145,6). El programa debe ser capaz de almacenar hasta 700 imágenes (deberá avisar cuando su capacidad esté llena). Debe permitir las opciones: añadir una ficha nueva, ver todas las fichas (número y nombre de cada imagen), buscar la ficha que tenga un cierto nombre.
/*-------------------------*/ /*
Solucion al ejercicio
/* /*
propuesto 5.5.2b s050502b.c
/*
*/ */ */ */
/*
Guardar hasta 700
*/
/*
imagenes
*/
/*
*/
/*
Aportado por:
*/
/*
Pablo Rampa
*/
/* /*
*/ Curso de C,
/*
Nacho Cabanes
*/ */
/*-------------------------*/ #include #include struct { char nombre char nombre[ [40 40] ]; int ancho; int ancho; int alto; int alto; float tamanyoKB; float tamanyoKB; } imagen imagen[ [700 700] ];
int main int main() () { int numeroFichas int numeroFichas= =0;
/* Número de fichas que ya
tenemos */ int opcion; int opcion;
/* La opcion del menu que elija
el usuario */ int i; int i;
/* Para bucles */
char textoTempor textoTemporal al[ [80 80] ];
/* Para busquedas */
int encontrado; int encontrado; do
{ /* Menu principal */ puts( puts ("Escoja una opción:") opción:"); puts( puts ("1.- Añadir datos de una imagen") imagen"); puts( puts ("2.- Ver nombres de todas las imagenes") imagenes"); puts( puts ("3.- Buscar imagen por nombre") nombre"); puts( puts ("0.- Salir") Salir"); scanf( scanf ("%d" "%d", , &opcion opcion) ); getchar() getchar (); ;
/* Para absorver el \n */
opcion) ) switch(opcion { case 1: /* Añadir un dato nuevo */
700) ) if (numeroFichas < 700
/* Si queda hueco
*/ { printf( printf ("Nombre de la imagen: ") "); gets( gets (imagen imagen[ [numeroFichas numeroFichas] ].nombre nombre) ); printf( printf ("Anchura de la imagen en Pixeles: "); scanf( scanf ("%d" "%d", , &imagen imagen[ [numeroFichas numeroFichas] ].ancho ancho) ); printf( printf ("Altura de la imagen en Pixeles: ") ");
scanf( scanf ("%d" "%d", , &imagen imagen[ [numeroFichas numeroFichas] ].alto alto) ); printf( printf ("Tamanyo en KB: ") "); scanf( scanf ("%f" "%f", , &imagen imagen[ [numeroFichas numeroFichas] ].tamanyoKB tamanyoKB) ); /* Y ya tenemos una ficha más */ numeroFichas++; } else
/* Si no hay hueco para más fichas,
avisamos */ printf( printf ("Máximo de fichas alcanzado (700)!\n"); break; case 2: /* Mostrar todos */
i
printf( printf ("Nombre a buscar? ") "); gets( gets (textoTemporal textoTemporal) ); encontrado = 0; i
}
} while (opcion != 0);
/* Si la opcion es 5,
terminamos */ return 0;
}
He estado haciendo un programa en C que me ida ingresar 'n' elementos en un arreglo, posteriormentee buscar un elemento posteriorment elemento dentro de él, borrar borrar un elemento dentro de él, y agregar agregar un elemento al final del arreglo. El problema que tengo es con la última acción, la cual es agregar un elemento al final del arreglo. Lo que ocurre es que, al agregar el elemento al arreglo, el elemento anterior a ese es completamente completam ente diferente al que inicialmente estaba. Espero puedan ayudarme. #include void buscarElemento(int void buscarElemento( int a[], a[], int int size_busca, size_busca, int int element_Busqueda); element_Busqueda); void borrarElemento( void borrarElemento(int int b[], b[], int int size_borra, size_borra, int int element_Borrar); element_Borrar); void agregarElemento( void agregarElemento(int int c[], c[], int int size_agrega, size_agrega, int int element_Agregar); element_Agregar); int main() int main() { int n; int n; // Variable que determinará el número de elementos del arreglo. int i; int i; // Variable para recorrer el arreglo. int elemento_Bus; int elemento_Bus; int elemento_Borr; int elemento_Borr; int elemento_Agre; int elemento_Agre; printf("Ingresa el numero de elementos del arreglo: "); printf("Ingresa " ); scanf("%d" scanf( "%d",&n); ,&n); int array[n]; int array[n]; // Creamos un arreglo de enteros, el número de elementos del arreglo // será el número asignado a la variable 'n'. for (i=0 (i=0; i
buscarElemento(array, n, elemento_Bus); printf("Ingresa el elemento a borrar en el arreglo: "); printf("Ingresa " ); scanf("%d" scanf( "%d",&elemento_Borr); ,&elemento_Borr); borrarElemento(array, n, elemento_Borr); printf("\n" printf( "\n"); ); printf("Ingresa el elemento a agregar en el arreglo: "); printf("Ingresa " ); scanf("%d" scanf( "%d",&elemento_Agre); ,&elemento_Agre); agregarElemento(array, n, elemento_Agre); printf("\n" printf( "\n"); ); system("pause"); system("pause" ); return 0; } void buscarElemento(int void buscarElemento( int a[], a[], int int size_busca, size_busca, int int element_Busqueda) element_Busqueda) { int j; int j; int b int b = 0; int hold1,hold2; int hold1,hold2; int cont int cont = -1 -1;
for (j=0 (j=0; j
if (b==1 (b==1) { printf("El printf( "El elemento encontrado es %d y se encuentra en la posicion %d.\n" ,hold1,hold2); } else { printf("Elemento printf( "Elemento no encontrado.\n"); encontrado.\n" ); } } void borrarElemento(int void borrarElemento( int b[], b[], int int size_borra, size_borra, int int element_Borrar) element_Borrar) { int j; int j; int c int c = 0; for (j=0 (j=0; j
{ if (element_Borrar (element_Borrar == b[j]) { b[j] = b[j+1 b[j+1]; for (j=j+1 (j=j+1; j #include int main(int argc, char *argv[]) { int indice,x; char frase[50]; printf("Introduzca una frase: "); printf("Introduzca gets(frase);
for(x = 0;x < 50;x++) { if (frase[x]=='\0') { indice=x; break; } } printf("La frase al reves es: \n\n"); for(x = indice-1;x >=0;x--) { printf("%c",frase[x]); } printf("\n\n"); system("PAUSE"); return 0; }