Sunteți pe pagina 1din 17

LABORATORIO INFORMATICA I – INF-100 ELECTROMEDICINA

DOCENTE: Lic. Cristian Alfredo Rodriguez Mendoza


ARRAYS, CARACTERES Y FUNCIONES
ARRAYS (vectores y matrices)
Resumen-Teoría: Un array es un conjunto ordenado de datos del mismo tipo. Si queremos un programa que almacene y haga operaciones
con un conjunto de mil números (por ejemplo las alturas de mil personas, etc.), no creamos mil variables distintas sino que creamos un
array de mil elementos.
Los arrays también se llaman: arreglos, vectores, matrices de una dimensión... y más incorrectamente listas y tablas.
Declaración e inicialización
int edades[200];
(declaración de un array de 200 números enteros)
float alturas[40];
(declaración de un array de 40 números decimales)
int mis_tres_numeros[3]={3,5,7};
(declaración de un array de 3 números enteros inicializados con los valores 3, 5 y 7)
Acceso a una posición concreta
mis_tres_mumeros[0] = 9; // escribe 9 en la primera posición del array
mis_tres_mumeros[1] = 10; // escribe 10 en la segunda posición del array
mis_tres_mumeros[2] = 11; // escribe 9 en la tercera y última posición del array.
Bucles para recorrer arrays
for(i=0; i<N;i++) scanf(“%d”, &miarray[i]);
Lee del teclado N números y los asigna al array “miarray”.
for(i=0; i<3;i++) printf(“%d”, mis_tres_numeros[i]);
Presenta por pantalla un array de tres números.
CADENAS DE CARACTERES. UN ARRAY ESPECIAL
Una cadena de caracteres es un array de caracteres que contiene el ‘\0’ (el carácter nulo, o carácter fin de cadena). Como se verá
posteriormente, existen numerosas funciones preparadas para trabajar con cadenas de caracteres, esto es, funciones que procesan un array
de caracteres, hasta que se encuentran con el carácter nulo o carácter fin de cadena. Algunos ejemplos son: “puts(cadena)” (imprime
cadenas), “gets(cadena)” lee cadena del teclado, “strcat(cadena1, cadena2)” (concatena cadenas), “strcpy” (copia cadenas), “strcmp”
(compara cadenas), etc.
Ejemplos:
char micadena1[10]={‘h’,’o’,’l’,’a’,’\0’};
char micadena2[50]=”que tal”;
puts(micadena1); //imprime : hola
puts(micadena2); //imprime : que tal
puts(“Introduzca su nombre por favor:”);
gets(micadena1);
srcat(micadena2,”estás? ”);
srcat(micadena2, micadena1);
puts(micadena2);
Matrices, arrays multidimensionales.
En ocasiones es interesante tener los datos de un array ordenados en distintas dimensiones, para esto existen los arrays multidimensionales
o matrices. Una matríz es básicamente un array de arrays.
int matriz1[5][3];//matriz de cinco filas y tres columnas de números enteros.
int arraydematrices[7][5][3];//array de 7 matrices de las anteriores, que también puede pensarse como una matriz de tres dimensiones.
EJERCICIOS:
Ejercicio 1: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int array[10]={1,3,5,7,9,2,3,4,6,8,10},i;
for(i=0; i<10; i++){
printf(“>>> %d\n”, array[i]);
}
Ejercicio 2: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int array[10]={1,3,5,7,9,2,3,4,6,8,10},i;
for(i=1; i<10; i++){
printf(“>>> %d\n”, array[i]);
}
Ejercicio 3: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int array[10],i;
for(i=0; i<10; i++){
array[i]=i*i;
}
for(i=0; i<10; i++){
printf(“%d”,array[i]);
}
Ejercicio 4: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int array[10],i=0;
while(i<10){
array[i]=i*i;
i++;
}
do{
printf(“%d”,array[--i]);
} while(i>=0);
Ejercicio 5: Media, mayor y menor de un conjunto fijo.
Realizar un programa que pida las notas de 40 alumnos por pantalla y muestre un menú de opciones: 1. Listar notas, 2.Calcular la media,
3.Calcular el menor, 4.Calcular el mayor.

#include <stdio.h>
#include <stdlib.h>

struct alumno {
char nombre[50];
float nota;
};

int main(int argc, char *argv[])


{
struct alumno alum,alumnos[5];

int x,opcion=1;
float sum=0,cont=0,mejor,peor;

for (x=0;x<5;x++)
{
printf("Introduzca nombre alumno:");
gets(alumnos[x].nombre);
gets(alumnos[x].nombre);
printf("Introduzca nota:");
scanf("%f",&alumnos[x].nota);
}

while ((opcion==1 || opcion==2 ||


opcion==3 || opcion==4 ||
opcion==5 || opcion==6) && (opcion!=7))
{

printf("1- Buscar un alumno\n");


printf("2- Modificar nota\n");
printf("3- Media de todas las notas\n");
printf("4- Media de todas las notas inferiores a 5\n");
printf("5- Alumno con mejores notas\n");
printf("6- Alumno con peores notas\n");
printf("7- Salir\n");
printf("Introduzca una opción: ");
scanf("%d",&opcion);

if (opcion==1)
{
printf("Introduzca un nombre: ");
gets(alum.nombre);
gets(alum.nombre);

for(x = 0; x < 5;x++)


{
if (strcmp(alumnos[x].nombre,alum.nombre)==0)
{
printf("\nNombre: %s\n",alumnos[x].nombre);
printf("Nota: %f\n",alumnos[x].nota);
}
}
printf("\n\n");
}
else if (opcion==2)
{
printf("Introduzca un nombre: ");
gets(alum.nombre);
gets(alum.nombre);

for(x = 0; x < 5;x++)


{
if (strcmp(alumnos[x].nombre,alum.nombre)==0)
{
printf("Introduzca una nota: ");
scanf("%f",&alumnos[x].nota);
printf("\nNota modificada.");
}
}
printf("\n\n");
}
else if (opcion==3)
{
sum=0;
for(x = 0; x < 5;x++)
{
sum=sum+alumnos[x].nota;
}
printf("\nLa media de las notas es de: %f \n",(sum/5));
}
else if (opcion==4)
{
sum=0;
cont=0;
for(x = 0; x < 5;x++)
{
if (alumnos[x].nota<5)
{
sum=sum+alumnos[x].nota;
cont++;
}
}
printf("\nLa media de las notas inferiores a 5 es: %f \n",sum/cont);
}
else if (opcion==5)
{
mejor=0;
for(x = 0; x < 5;x++)
{
if (alumnos[x].nota>mejor)
{
mejor=alumnos[x].nota;
alum.nota=alumnos[x].nota;
strcpy(alum.nombre,alumnos[x].nombre);
}
}
printf("\nEl alumno con mejores notas es: %s \n",alum.nombre);
}
else if (opcion==6)
{
peor=10;
for(x = 0; x < 5;x++)
{
if (alumnos[x].nota<peor)
{
peor=alumnos[x].nota;
alum.nota=alumnos[x].nota;
strcpy(alum.nombre,alumnos[x].nombre);
}
}
printf("\nEl alumno con peores notas es: %s \n",alum.nombre);
}
}

system("PAUSE");
return 0;
}

Ejercicio 6: Media, mayor y menor de un conjunto prefijado.


Igual que el apartado anterior pero en vez de 20 alumnos ahora el número de alumnos se le preguntará al usuario al iniciar el programa,
este número no podrá superar los 100 alumnos (controlar que el usuario introduzca un número menor que 100).

Ejercicio 7: Media, mayor y menor. De un conjunto variable.


Igual que el apartado anterior pero ahora el número de alumnos empieza desde cero y se añade al menú la opción 5.Agregar nota, con la
que el usuario puede ir agregando las notas de una en una.
Ejercicio 8: Arrays multidimensionales. Edificio1.
Se quiere controlar el número de habitantes de un edificio con 6 pisos y 4 puertas (A, B, C, y D) en cada piso. Realizar un programa que
pida al usuario que introduzca el número de habitantes de cada puerta del edificio. El programa debe decir la vivienda (piso y puerta) que
más habitantes tiene del edificio.
Ejercicio 9: Arrays multidimensionales. Edificio2.
Se quiere controlar el número de habitantes de un edificio con 6 pisos y 4 puertas (A, B, C, y D) en cada piso. Realizar un programa que
pida al usuario que introduzca el número de habitantes de cada puerta del edificio. El programa debe decir el piso que más habitantes tiene
de todo el edificio.
Ejercicio 10: Arrays multidimensionales. Edificio3.
Se quiere controlar el número de habitantes de un edificio con 6 pisos y 4 puertas (A, B, C, y D) en cada piso. Realizar un programa que
pida al usuario que introduzca el número de habitantes de cada puerta del edificio. El programa debe decir la puerta que más habitantes
tiene de todo el edificio.
Ejercicio 11: Arrays multidimensionales. Edificio3.
Se quiere controlar el número de habitantes de un edificio con 6 pisos y 4 puertas (A, B, C, y D) en cada piso. Realizar un programa que
pida al usuario que introduzca el número de habitantes de cada puerta del edificio. El programa debe mostrar la media de habitantes de
cada piso.
Ejercicio 12: Arrays multidimensionales. Rectas en el plano.
Se quiere representar rectas en un plano de números enteros. El plano será un array de 100x100 caracteres. El programa pedirá que se
introduzcan los tres coeficientes (números enteros) de una recta de la forma ax+by+c=0, representará los puntos de la recta como
asteriscos en la matriz, y presentará por pantalla dicha matriz.

FUNCIONES
Resumen-Teoría: Los programas sencillos, como los ejemplo planteados hasta ahora, normalmente no necesitan un nivel de
estructuración elevado, es decir, pueden escribirse todo seguido como una lista de órdenes sencilla (a pesar de los bucles). Pero cuando los
programas crecen un poco, es necesario estructurarlos adecuadamente para mantenerlos legibles, facilitar su mantenimiento y para poder
reutilizar ciertas porciones de código. El mecanismo de C que nos permite esto son las funciones. Con los compiladores, los fabricantes
nos proporcionan un conjunto importante de funciones de librería.
Declaración, definición y llamada
En la declaración declaramos una función, es decir, le decimos al compilador qué tipo de valor devuelve la función, cuántos datos hay
que proporcionarle y de qué tipos. Por ejemplo:
float funcionprueba (int exponente, float base);
En este ejemplo, la function “funcionprueba” devuelve un valor float, y recibe un int y un float.
Cuando una función no devuelve ningún valor hay que poner “void” como tipo retornado. Del mismo modo, si no recibe ningún
parámetro, hay que poner también “void” entre los paréntesis:
void funcion (void); // declaración de una función que no recibe ni devuelve nada.
En la definición se establece qué hace una función, es decir, se define la función. Por ejemplo:
float funcionprueba (int exponente, float base {
int i;
float resultado;
if(exponente=0) {
resultado=1;
}
else{ resultado = base;
for(i=0;i++;i<exponente)
{
resultado = base * resultado;
}//fin de for
}//fin de else
return resultado; }
En este ejemplo, la function “funcionprueba” multiplica por sí misma la base tantas veces como indica el exponente, es decir, calcula la
potencia. La definición de la función puede estar antes o después que el main. Cuando se pone antes que el main hace las veces de
declaración.
Ámbito de las variables
Al igual que al comienzo del main, en las funciones también se pueden declarar variables (como el caso de “i” y de “resultado” del
ejemplo anterior), estas variables se pueden usar únicamente dentro de la función en la que están declaradas. A esto se le llama el ámbito
de una función. En C los ámbitos se crear abriendo llave “{” y se cierran cerrando llave “}”. Al cerrar un ámbito se destruyen todas las
variables en él declaradas.
Si se declara una variable fuera de todos los ámbitos (fuera del main), se dice que es una “variable global”, ya que se podrá utilizar dentro
de cualquier función.
Los parámetros que recibe una función son variables locales de dicha función que se inicializan en la llamada a la función y, al igual que
todas las variables locales, se destruyen al terminar la función. La única excepción a esta regla son los arrays: cuando el argumento que se
pasa a la función es un array, este dato no es una variable local, sino que sigue perteneciendo al entorno desde el que se hizo la llamada y
los valores modificados se conservarán al terminar la función. Veamos un ejemplo:
void datos(int array[])
{ x[0]=7; x[1]=8; x[2]=9;
}
void main(void){
int x[3]={1,2,3};
for(i=0;i<3;i++)printf(“%d,”,x[i]);// qué imprimirá??
}
Imprimirá: 7,8,9.
EJERCICIOS
Ejercicio 1: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(void)
{ return 3+2;
}
void main(void){
printf(“La function devuelde %d”,mi_funcion());
}
Ejercicio 2: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{return x*x;
}
void main(void){
printf(“La function devuelde %d”,mi_funcion(5));
}
Ejercicio 3: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{ int y;
y=2+x*3;
return y;
}
void main(void){
printf(“La function devuelde %d”,mi_funcion(5+2));
}
Ejercicio 4: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{ return x*x;
}
void main(void){
int x=3;
mi_funcion(x);
printf(“La function devuelde %d”, mi_funcion(x));
printf(“La variable vale %d”, x);
}
Ejercicio 5: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{ x=x*5;
return x;
}
void main(void){
int x=3;
mi_funcion(x);
printf(“La function devuelde %d”, mi_funcion(x));
printf(“La variable vale %d”, x);
}
Ejercicio 6: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{ x=x*5;
return x;
}
void main(void){
int x=3;
x=mi_funcion(x);
printf(“La function devuelde %d”, mi_funcion(x));
printf(“La variable vale %d”, x);
}
Ejercicio 7: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{ x=x*5;
return x; }
void main(void){
int y=3, x=4;
printf(“La function devuelde %d”, mi_funcion(y));
printf(“La variable vale %d”, x); }
Ejercicio 8: Función cuadrado.
Escribir el código de la función que devuelve el cuadrado de un número que recibe como argumento. Comprobar que funciona utilizando
un programa de prueba como el siguiente:
int cuadrado(int x)
{ /*código a escribir*/
}
void main(void){
int y=4;
printf(“Introduzca un numero:”);
scanf(“%d”,&x);
printf(“Su factorial es %d”, cuadrado(x));
}
Ejercicio 9: Función factorial.
Escribir el código de la función que devuelva el factorial de un número que recibe como argumento. Comprobar que funciona utilizando
un programa de prueba como el siguiente:
int factorial(int x)
{ /*código a escribir*/
}
void main(void){
int y=4;
printf(“Introduzca un numero:”);
scanf(“%d”,&x);
printf(“Su factorial es %d”, factorial(x));
}
Ejercicio 10: Función elmayor.
Escribir el código de la función que devuelva el número mayor de un número que recibe como argumento. Comprobar que funciona
utilizando un programa de prueba como el siguiente:
int elmayor(int x, int y)
{ /*código a escribir*/
}
void main(void){
int y,x;
printf(“Introduzca un numero:”);
scanf(“%d”,&x);
printf(“Introduzca otro numero:”);
scanf(“%d”,&y);
printf(“El mayor es %d”, elmayor(x,y));
}
Ejercicio 11: Función escribe_asteriscos.
Escribir el código de la función que imprima por pantalla tantos asteriscos como indique el número que recibe como argumento.
Comprobar que funciona utilizando un programa de prueba como el siguiente:
void escribe_asteriscos(int x)
{ /*código a escribir*/
}
void main(void){
int y,x;
printf(“Introduzca un numero:”);
scanf(“%d”,&x);
escribe_asteriscos (x);
}
Ejercicio 12: Función divisores.
Escribir el código de la función que imprima por pantalla todos los divisores del número que recibe como argumento. Comprobar que
funciona utilizando un programa de prueba como el siguiente:
void divisores(int x)
{ /*código a escribir*/
}
void main(void){
int x;
printf(“Introduzca un numero:”);
scanf(“%d”,&x);
divisores(x);
}
Ejercicio 13: Función divisores comunes.
Escribir el código de la función que imprima por pantalla todos los divisores comunes de dos números que recibe como argumento.
Ejercicio 14: Función máximo divisor comunes.
Escribir el código de la función que retorne el máximo común divisor de dos números que recibe como argumento.

OTRAS RECOMENDACIONES PARA USO DE MATRICES


A)Ejemplo de cómo se rellena un vector de tipo char.
/* Vector de tipo char. */
#include <stdio.h>
main() /* Rellenamos un vector char */
{ char cadena[20];
int i;
for (i=0;i<19 && cadena[i-1]!=13;i++)
cadena[i]=getche( );
if (i==19) cadena[i]='\0';
else cadena[i-1]='\0';
printf("\n%s",cadena);
}
B)En el ejemplo puedes ver como se rellena y visualiza una matriz bidimensional. Se necesitan dos bucles para cada una de las
operaciones. Un bucle controla las filas y otro las columnas.
Ejemplo:
/* Matriz bidimensional. */
#include <stdio.h>
main() /* Rellenamos una matriz */
{ int x,i,numeros[3][4];
/* rellenamos la matriz */
for (x=0;x<3;x++)
for (i=0;i<4;i++)
scanf("%d",&numeros[x][i]);
/* visualizamos la matriz */
for (x=0;x<3;x++)
for (i=0;i<4;i++)
printf("%d",numeros[x][i]);
}
C)Si al declarar una matriz también queremos inicializarla, habrá que tener en cuenta el orden en el que los valores son asignados a los
elementos de la matriz.
Ejemplos:
int numeros[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
quedarían asignados de la siguiente manera:
numeros[0][0]=1 numeros[0][1]=2 numeros[0][2]=3 numeros[0][3]=4
numeros[1][0]=5 numeros[1][1]=6 numeros[1][2]=7 numeros[1][3]=8
numeros[2][0]=9 numeros[2][1]=10 numeros[2][2]=11 numeros[2][3]=12
D) También se pueden inicializar cadenas de texto:
char dias[7][10]={"lunes","martes","miércoles","jueves","viernes","sábado","domingo"};
E)Para referirnos a cada palabra bastaría con el primer índice:
printf("%s",dias[i]);
Orientación.
Los vectores y matrices son uno de los medios principales para el almacenamiento de los datos en un programa. En esta práctica veremos
todos los conceptos relativos a la creación y manejo en C de vectores, matrices y cadenas de caracteres.
Conceptos nuevos.
1. Definición y manejo de vectores o arrays unidimensionales.
2. Definición y manejo de matrices o tablas.
3. Definición y manejo de cadenas de caracteres.
Ejercicios
1) Escribir un programa que pida 10 números enteros por teclado y que imprima por pantalla:
a) Cuántos de esos números son pares.
b) Cuál es el valor del número máximo.
c) Cuál es el valor del número mínimo.
2) Escribir un programa que lea un vector de 10 elementos. Deberá imprimir el mismo vector por pantalla pero invertido. Ejemplo: dado
el vector 1 2 3 4 5 6 7 8 9 10 el programa debería imprimir 10 9 8 7 6 5 4 3 2 1.

#include <stdio.h>
#include <stdlib.h>
int main (){
int tabla [10];
int i;
for(i=0;i<10;i++){
printf("Introduce un valor de fila %d: ", i+1);
scanf("%d",&tabla);};
for(i=10;i>0;i--){
printf("El inverso de la tabla anterior es: %d n",tabla);};
system("pause");
}

3) Escribir un programa que lea 10 números por teclado. Luego lea dos más e indique si éstos están entre los anteriores.
4) Escribir un programa que lea una matriz de 3 filas y 3 columnas de valores enteros. A continuación, el programa debe pedir el número
de una fila. El programa deberá devolver el máximo de esa fila.
5) Escribir un programa que lea un matriz de enteros de 2 filas y 4 columnas y muestre por pantalla la traspuesta a dicha matriz.
Ejemplo: Entrada: 2 3 4 5 Salida 2 7
7654 36
45
54
6) Escribir un programa que lea una matriz de números enteros y que devuelva la suma de los elementos positivos de la matriz y la suma
de los elementos negativos.

7) Escribir un programa que lea una matriz de enteros de 4 filas y 4 columnas y a continuación intercambie la fila i con la fila j, siendo i
y j dos valores introducidos por teclado.

#include "iostream"
#include "conio.h"
using namespace std;
int main()
{
int mat[6][6];
int n,i,j,f1,f2,aux;
cout<<"\n \t \t Intercambia Valores entre las filas i y j \n";
for (i=1;i<=4;i++)
{
for (j=1;j<=4;j++)
{
do
{
cout<<"\t \t \tValor en la posicion ("<<i<<" , "<<j<<") \t";
cin>>mat[i][j];
}
while(mat[i][j]<0);
}
}
// IMPRIME MATRIZ
cout<<"\n La matriz es: \n";
for (i=1;i<=4;i++)
{
cout<<"\n \t \t \t";
for (j=1;j<=4;j++)
{
cout<<mat[i][j]<<"\t";
}
}
cout<<" \n \n\t \t \t Para Intercambiar las filas";
cout<<" \n \n Ingrese el numero de la 1ra. fila: ";cin>>f1;
cout<<" \n Ingrese el numero de la 2da. fila: ";cin>>f2;

//Intercambiando
for (j=1;j<=4;j++)
{ aux=mat[f1][j];
mat[f1][j]=mat[f2][j];
mat[f2][j]=aux;
};

//La nueva matriz


for (i=1;i<=4;i++)
{
cout<<"\n \t \t \t";
for (j=1;j<=4;j++)
{
cout<<mat[i][j];
cout<<"\t";
}
}
getch();
}

8) Escribir un programa que lea una matriz de 4 filas y 3 columnas, la visualice por pantalla y a continuación encuentre el mayor y el
menor elemento de la matriz y sus posiciones.

#include <stdio.h>
#include<stdlib.h>

int main(){
int tabla[4][3];
int f,c,f_mayor,c_mayor, f_menor,c_menor;
int mayor=0,menor=tabla[0][0];

for(f=0;f<4;f++){
for(c=0;c<3;c++){
printf("introduzca el numero de la fila %d y columna %d \n",f+1,c+1);
scanf("%d",&tabla[f][c]);
}}

for(f=0;f<4;f++){
for(c=0;c<3;c++){
printf("%d \n",tabla[f][c]);
if (mayor<tabla[f][c]){
mayor=tabla[f][c];
f_mayor=f;
c_mayor=c;
}
if(menor>tabla[f][c]){
menor=tabla[f][c];
f_menor=f;
c_menor=c;
}
}}
printf("el numero mayor %d \n", mayor);
printf("su posicion es fila: %d, columna %d \n", f_mayor+1,c_mayor+1); /*Editado me faltó ese detalle*/
printf("el numero menor %d \n ",menor );
printf("su posicion es fila: %d, columna %d \n", f_menor+1,c_menor+1); /*Editado me faltó ese detalle*/

system("pause");
}
9) Escribir un programa que lea una frase y determine la frecuencia de aparición de cada vocal con respecto al total de caracteres de la
frase.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

int sum=0,x;
char frase[50];

printf("Introduzca una frase: ");


gets(frase);

for(x = 0;x < 50;x++)


{
switch (frase[x])
{
case 'a':
sum++;
break;
case 'e':
sum++;
break;
case 'i':
sum++;
break;
case 'o':
sum++;
break;
case 'u':
sum++;
break;
default:
break;
}

printf("\n\nEn la frase hay %d vocales\n\n",sum);

printf("\n\n");

system("PAUSE");
return 0;
}

10) Escribe un programa que lea del teclado una cadena y muestre en la pantalla la cantidad de consonantes y de vocales que contiene.
11) Escribe un programa que lea del teclado una cadena y construya y muestre en la pantalla otra cadena en la que cada vocal haya sido
reemplazada por un punto.

Ejercicios propuestos de un nivel de dificultad mayor


12) Escribir un programa que lea una frase y a continuación visualice cada palabra de la frase una debajo de otra, seguida cada palabra del
número de letras que compone cada palabra.
#include<stdio.h>

#include<conio.h>

/*39) Crear un programa que lea una frase y

a continuación visualice cada palabra de la frase una debajo de otra,

seguida cada palabra del número de letras que compone cada palabra.*/

void cont(int y,char x[][50]){

printf("\n Ingrese la frase: \n \n");

for(int i = 0;i < y;i++){

scanf("%s",&x[i]);

for(int i = 0;i < y;i++){

int lon;

char *palabra = NULL;

palabra = strtok(x[i]," ");

while(palabra != NULL){

lon = strlen(palabra);

printf("\n %s: tiene %d caracteres.", palabra, lon);

palabra = strtok(NULL," ");

int main(){

char cad[50][50];

int y;

printf("\n Cuantas palabras tiene la frase: \n \n");

scanf("%d",&y);

cont(y,cad);

getch();

13) Escribir un programa que lea una frase y sustituya todas las secuencias de dos o más blancos por un solo blanco y visualice la frase.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
char frase[100], salida[100];
int i, c = 0, contBlancos = 0;

printf("Escriba la frase: \n");


gets(frase);

for(i = 0; i < strlen(frase); i++)


if(frase[i] != ' ') {
salida[c++] = frase[i];
contBlancos = 0;
}
else
if(contBlancos == 0) {
salida[c++] = frase[i];
contBlancos = 1;
}

salida[c] = '\0';
printf("\n%s\n", salida);
system("pause");
return 0;
}

14) Una palabra es palíndroma si se puede leer igual de izquierda a derecha que de derecha a izquierda, por ejemplo: reconocer es
palíndroma. Construye un programa que pida una palabra por teclado e imprima por pantalla si es o no palíndroma.

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>

char cadena[80];
int palíndromo(void);
void quitar_blancos(void);
void main()
{clrscr();
printf("ingrese una cadena:");
gets(cadena);
quitar_blancos();
if(palíndromo())
printf("la cadena es un palíndromo");
else
printf("la cadena no es un palíndromo");

getch();
}
void quitar_blancos()
{
int c,i;
char a[80];
for(i=0;i<strlen(cadena);i++)
{
if(!isspace(cadena[i]))
{
a[c]=cadena[i];
c++;
}
a[c]='';
strcpy(cadena,a);
}
}

15) Un cuadrado mágico 3 x 3 es una matriz 3 x 3 formada por números del 1 al 9 donde la suma de sus filas, sus columnas y sus
diagonales son idénticas. Crear un programa que permita introducir un cuadrado por teclado y determine si este cuadrado es mágico o
no. El programa deberá comprobar que los números introducidos son correctos, es decir, están entre el 1 y el 9.

#include<stdio.h>
#include<conio.h>

void main()
{
int i,j,k,l,A[3][3],aux,f1=0,c1=0,dp=0;
int f2=0,c2=0,f3=0,c3=0,ds=0,sw=0;

for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
do
{
printf("\nIngrese valor entre 1 y 9... ");
scanf("%d",&aux);
if ((aux<1)||(aux>9))
printf("\nNumero no permitido!");
}
while ((aux<1)||(aux>9));

k=0;
l=0;
sw=0;
while ((k<3)&&(sw==0))
{
l=0;
while ((l<3)&&(sw==0))
{
if (aux==A[k][l])
sw=1;
l++;
}
k++;
}
if (sw==0)
A[i][j]=aux;
else
{
printf("\nEl valor esta repetido!");
j--;
}
}
}

getch();
clrscr();
printf("\nLos elementos ingresados son:\n\n");

for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",A[i][j]);
printf("\n");
}

for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
if (i==0)
f1= f1+A[i][j];
else
if (i==1)
f2= f2+A[i][j];
else
f3= f3+A[i][j];

if(j==0)
c1= c1+A[i][j];
else
if (j==1)
c2= c2+A[i][j];
else
c3= c3+A[i][j];

if (i==j)
dp= dp+A[i][j];

if ((i+j)==2)
ds= ds+A[i][j];
}
}

printf("\nSuma de la fila 1 es %d",f1);


printf("\nSuma de la fila 2 es %d",f2);
printf("\nSuma de la fila 3 es %d",f3);
printf("\nSuma de la columna 1 es %d",c1);
printf("\nSuma de la columna 2 es %d",c2);
printf("\nSuma de la columna 3 es %d",c3);
printf("\nSuma de la diagonal principal es %d",dp);
printf("\nSuma de la diagonal secundaria es %d",ds);

aux=0;
if (f1==f2)
aux++;
if (f1==f3)
aux++;
if (f1==c1)
aux++;
if (f1==c2)
aux++;
if (f1==c3)
aux++;
if (f1==dp)
aux++;
if (f1==ds)
aux++;

if (aux==7)
printf("\nEl cuadrado si es magico");
else
printf("\nEl cuadrado no es magico");

getch();
}

16) Se dice que una matriz tiene un punto de silla si alguna posición de la matriz es el menor valor de su fila y a la vez el mayor de su
columna. Escribir un programa que tenga como entrada una matriz de números enteros y calcule la posición de un punto de silla (si es
que existe).

#include <stdio.h>
#define N 3
#define M 4

int puntoSilla(int mat[N][M], int posFila, int posColumna);


void escribeMat(int mat[N][M]);

int main()
{
int mat[N][M] = {
3, 4, 5, 3,
2, 3, 2, 2,
1, 2, 0, 1 };
int posFila=2, posColumna=1;

printf("\n");

escribeMat(mat);

// comparo todas las posiciones del array para ver si son punto de silla
for (posFila = 0; posFila < N; posFila++)
for (posColumna = 0; posColumna < M; posColumna++)
if(puntoSilla(mat, posFila, posColumna)==1)
printf("Tiene punto de silla en la posicion %d-%d\n", posFila, posColumna);
else
printf("No hay punto de silla en la posicion %d-%d\n", posFila, posColumna);

return 0;
}

int puntoSilla(int mat[N][M], int posFila, int posColumna)


{
int i, j, noenc=1;

for(i=0; i<N && noenc; i++)


{
for(j=0; j<M && noenc; j++)
{
if(mat[posFila][posColumna]>mat[posFila][j] || mat[posFila][posColumna]<mat[i][posColumna]) {
noenc=0;
}
}
}

return noenc;
}

void escribeMat(int mat[N][M])


{
int i, j;
for(i=0; i<N; i++)
{
for(j=0; j<M; j++) {
printf("%4d", mat[i][j]);
}
printf("\n");
}
}

La Frase.
“Pregunta sin reparos lo que quieras saber: más que ignorar, es malo no querer aprender”
Marco Porcio Catón (234-149 a.C.)

S-ar putea să vă placă și