Anda di halaman 1dari 11

Unidad 10 1

RESPUESTAS Actividades
Sito de la cátedra: http://cursosfich.dyndns.org

Ejercicios
Ejercicio 10.1.
Realice un programa para leer un arreglo lineal de N elementos conteniendo palabras de hasta 12 caracteres.
Luego el programa deberá informar separadamente:
a) El primero de la lista de acuerdo a un orden alfabético.
b) Los elementos del arreglo que ocupan las posiciones pares.
c) Las palabras que comienzan con la sílaba ‘mar’ .

//© Fundamentos de Programacion - F.I.C.H. - U.N.L.


//Autor: Profesor Gerardo Sas. gsas@fich.unl.edu.ar
//sitio web: cursosfich.dyndns.org
//------------------------------------------------
#include<iostream.h>
#include <string.h>
#include <stdio.h>
using namespace std;
void main(void)
{//Defino una matriz de 100 x 12 caracteres
char A [100][12], menor [12]="zzz";//inicializo menor
int n,c;
cout<<"Ingrese la cantidad de Palabras: ";
cin>>n; //Contiene la cantidad de palabras
for (c=0;c<n;c++)//c cuenta desde 0 hasta n
{cout<<"\nIngrese palabra "<<c<<" = ";
gets(A[c]);//Observa que no utilizo cin porque corta en el espacio
strcpy(A[c],strupr(A[c]));//pasa a Mayusculas y copia en A[c]
if (strcmp(A[c],menor)<0) //Si da negativo es menor
strcpy(menor,A[c]);//copia lA[c] en menor
};
cout<<"\na) El primero de la lista de acuerdo a un orden alfabético.\n";
puts(menor);
cout<<"\nb) Los elementos del arreglo que ocupan las posiciones pares.\n";
for (int i=2; i<n; i+=2)
puts( A[i] ); //muestra las posiciones pares
cout<<"\nc) Las palabras que comienzan con la sílaba 'MAR' .\n";
for (c=0;c<n;c++)
{if (strncmp(A[c],"MAR",3)==0)
puts( A[c] );//muestra las palabras que comienzan con mar
};
cout<<endl<<"Pulse cualquier tecla para continuar";

Facultad de Ingeniería y Ciencias Hídricas de la UNL


Ingeniería Informática – Fundamentos de Programación
Unidad 10 2

Ejercicio 10.2.
Escriba un programa que permita al usuario leer interactivamente un dato tipo cstring y exhiba un menú con
las opciones: 1. Pasar a Mayúsculas 2. Pasar a Minúsculas. 3. Solo la inicial con mayúsculas.
El programa debe resolver la opción seleccionada por el usuario.

//© Fundamentos de Programacion - F.I.C.H. - U.N.L.


//Autor: Profesor Gerardo Sas.
//sitio web: cursosfich.dyndns.org
#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
using namespace std;

void main(void)
{ char palabra[20];
int op;
cout<<"Ingrese una palabra= ";
gets(palabra);
cout<<"\n\n *** Menu de Opciones ***";
cout<<"\n\n1. Pasar a Mayúsculas\n";
cout<<"2. Pasar a Minúsculas.\n";
cout<<"3. Solo la inicial con mayúsculas\n";
cout<<"4. Salir.\n\n";
while (true){
cin>>op;
switch (op) {
case 1: puts(strupr(palabra));//muestra en mayusculas
break;
case 2: puts (strlwr(palabra));//muestra en minusculas
break;
case 3: {char letra= toupper(palabra[0]);
palabra[0]= letra;
puts (palabra);//muestra la inicial con mayúsculas
};
break;
case 4: abort();//sale del programa
};
};
}

Facultad de Ingeniería y Ciencias Hídricas de la UNL


Ingeniería Informática – Fundamentos de Programación
Unidad 10 3

Ejercicio 10.3.
Escriba un programa a partir del cual un usuario pueda ingresar una frase cualquiera y determine a través de
funciones: a) La cantidad de vocales de la frase; b) La cantidad de consonantes; c) La cantidad de letras.

//© Fundamentos de Programacion - F.I.C.H. - U.N.L.


//Profesor Gerardo Sas.
//sitio web: cursosfich.dyndns.org
#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
using namespace std;
void main(void)
{ char frase[50];
int largo,c,vocal=0,consonante=0,letras=0;
cout<<"Ingrese una frase= ";
gets(frase);
strcpy(frase,strupr(frase));//pasa todo a mayusculas
largo=strlen(frase);//calcula la cantidad de caracteres
//item (a)
for (c=0;c<largo; c++)
if ((frase[c]=='A')||(frase[c]=='E')||(frase[c]=='I')||(frase[c]=='O')||(frase[c]=='U'))
vocal++;//contador de vocales
cout<<"\na) La cantidad de vocales de la frase es: "<<vocal;
//item (b y c)
for (c=0;c<largo; c++)
if ((frase[c]>='A')&&(frase[c]<='Z'))
{letras++;//contador de letras, Item ( c )
if ((frase[c]!='A')&&(frase[c]!='E')&&(frase[c]!='I')&&(frase[c]!='O')&&(frase[c]!
='U'))
{consonante++;//contador de consonantes, Item (b)
}}
cout<<"\na) La cantidad de consonantes de la frase es: "<<consonante;
cout<<"\nc) La cantidad de letras de la frase es: "<<letras<<endl;
}

Ejercicio 10.4.
Escriba un programa que permita ingresar una lista de apellidos y nombres de 10 personas (apellido y
nombre se asignan a una sola variable). Utilice para cada persona una variable de tipo cstring. El programa
debe informar un listado con los 10 apellidos y luego un listado con los 10 nombres. Considere apellidos
formados por una única palabra (la presencia del primer espacio en blanco indica el fin del apellido).

Facultad de Ingeniería y Ciencias Hídricas de la UNL


Ingeniería Informática – Fundamentos de Programación
Unidad 10 4

//© Fundamentos de Programacion - F.I.C.H. - U.N.L.


//Autor: Profesor Gerardo Sas.
//sitio web: cursosfich.dyndns.org

#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
using namespace std;

void main(void)
{// Inicializo el arreglo para no ingresarlo por teclado;
char apeynomb[10][50]={"Apellido1 Nombre1","Apellido2 Nombre2","Apellido3 Nombre3","Apellido4
Nombre4","Apellido5 Nombre5","Apellido6 Nombre6","Apellido7 Nombre7","Apellido8 Nombre8","Apellido9
Nombre9","Apellido10 Nombre10"};
char apellido[10][25],nombre[25];
int c;
//Estas lineas estan para cumplir con el enunciado original del ejercicio
// for (c=0;c<10;c++)
// {cout<<"Ingrese el apellido y nombre ("<<c<<"): ";
// gets(apeynomb[c]);};

for (c=0;c<10;c++)
{ strcpy(nombre, strchr(apeynomb[c],' '));
cout<<"\nNombre: "<<nombre;

strncpy(apellido[c],apeynomb[c],strlen(apeynomb[c])-strlen(nombre));

apellido[c][strlen(apeynomb[c])-strlen(nombre) ]='\0';//fin de linea

};
cout<<endl<<endl;

for (c=0;c<10;c++)
cout<<"Apellido: "<<apellido[c]<<endl;
}

Ejercicio 10.5.
Escriba un programa que permita ingresar una lista de apellidos y nombres de N personas (apellido y nombre
se asignan a una sola variable). Utilice para cada persona una variable de tipo cstring. El programa debe
informar un listado con los N apellidos y luego un listado con los N nombres. Considere apellidos formados por
una única palabra (la presencia del primer espacio en blanco indica el fin del apellido).

Idem al anterior pero para N datos

Ejercicio 10.6. (Ejercicio de parcial)


Escriba un programa que permita ingresar una lista de apellidos y nombres de N profesores de la FICH-UNL
(apellido y nombre se asignan a una sola variable). El programa debe mostrar las direcciones de correo

Facultad de Ingeniería y Ciencias Hídricas de la UNL


Ingeniería Informática – Fundamentos de Programación
Unidad 10 5

electrónicos (e-mails) de ellos. El dominio asignado a la Facultad para el e-mail es: fich.unl.edu.ar, y el nombre
de usuario se forma con la inicial del nombre y el apellido.
Ejemplo: Si el dato es Marelli Jorge, debe obtenerse: jmarelli@fich.unl.edu.ar

//© Fundamentos de Programacion - F.I.C.H. - U.N.L.


//Autor: Profesor Gerardo Sas.
//sitio web: cursosfich.dyndns.org

#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
using namespace std;

void main(void)
//Para agilizar la ejecución del programa inicializo la matriz
{char apeynomb[10][50]={"AAA Ape1","BBB Ape2","CCC Ape3","DDD Ape4","EEE
Ape5","FFF Ape6","GGG Ape7","HHH Ape8","III Ape9","JJJ Ape10"};
char email[10][25],apellido[25];
int c,x;
//Estas lineas son para cumplir con el enunciado original del problema
// for (c=0;c<10;c++)
// {cout<<"Ingrese el apellido y nombre ("<<c<<"): ";
// gets(apeynomb[c]);};

for (c=0;c<10;c++)
email[c][0]='\0'; //inicializo el arreglo con cadenas nulas el /0 se pone siempre
al finalizar las cadenas en un

for (c=0;c<10;c++)
{ strlwr(apeynomb[c]);//paso a minusculas
strncat(email[c],apeynomb[c],1);//copio la primer letra del nombre
strcpy(apellido, strchr(apeynomb[c],' '));//extraigo el apellido
for ( x=0; x < (strlen(apellido)-1); x++)//le saco el espacio.
apellido[x]=apellido[x+1];
apellido[x]='\0';//coloco la marca de fin de linea
strcat(email[c],apellido);//agrego el apellido al email
strcat(email[c],"@fich.unl.edu.ar");//agrego el dominio al email
cout<<"\ne-mail: "<<email[c]<<endl;//muestro en pantalla
};
cout<<endl<<endl<<"Pulsa una tecla para continuar";
}

Ejercicio 10.7.

Facultad de Ingeniería y Ciencias Hídricas de la UNL


Ingeniería Informática – Fundamentos de Programación
Unidad 10 6

Se ingresan las direcciones de correo electrónicos de un grupo de usuarios de Facultades de la UNL. Se debe
determinar el número de usuarios de las Facultades de Ing. y Ciencias Hídricas (fich) y de Ing. Química (fiq).
Las direcciones tienen la denominación de la facultad a continuación del símbolo @. Ejemplos:
jperez@fiq.unl.edu.ar (Ing. Química), agarcia@fce.unl.edu.ar (Cs Económicas), jprodo@fich.unl.edu.ar (Ing.
y Cs Hídricas), etc.

//© Fundamentos de Programacion - F.I.C.H. - U.N.L.


//Autor: Profesor Gerardo Sas.
//sitio web: cursosfich.dyndns.org
#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
using namespace std;
void main(void)
{ int fich=0, fiq=0, x;//Para agilizar la ejecución del programa inicializo la matriz.
char email[4][30]={"jperez@fiq.unl.edu.ar", "agarcia@fce.unl.edu.ar",
"jprodo@fich.unl.edu.ar", "hloyarte@fich.unl.edu.ar"};
//muestro la matriz
for (x=0; x<4; x++)
puts(email[x]);
//Cuento por facultad
for (x=0; x<4; x++)
{ if (strstr(email[x],"fich")!= NULL)
fich++;
if (strstr(email[x],"fiq")!= NULL)
fiq++;
};
//Muestro resultados
cout<<endl<<"El numero de usuarios de las Facultades de: ";
cout<<endl<<"Ing. y Ciencias Hidricas (fich): "<<fich;
cout<<endl<<"Ingenieria Quimica (fiq): "<<fiq;
cout<<endl<<endl<<"Pulsa una tecla para continuar";
}

Ejercicio 10.8.

Facultad de Ingeniería y Ciencias Hídricas de la UNL


Ingeniería Informática – Fundamentos de Programación
Unidad 10 7

Escriba una función entera llamada quita_ceros( ) que reciba un arreglo de enteros como parámetro y
su longitud y elimine los ceros del mismo. Debe devolver la cantidad de elementos eliminada. b) Escriba
una sobrecarga de la función anterior que reciba solo un c_string de parámetro y elimine sus espacios en
blanco.

//© Fundamentos de Programacion - F.I.C.H. - U.N.L.


//Autor: Profesor Gerardo Sas.
//sitio web: cursosfich.dyndns.org
#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
using namespace std;

//Prototipos de las funciones


int quita_ceros(int *, int &);//Observación: solo coloco el tipo de dato como
parametro
void quita_ceros(char *);

//Cuerpo principal del Programa


void main(void)
{char cadena[50];
int vector[100],n,x, eliminados;
cout<<"Ingrese la cantidad de Numeros (n): ";
cin>>n;
for (x=0; x<n; x++)
{ cout<<"\nIngrese un N°: ";
cin>>vector[x];
}
cout<<"\n\nIngrese una frase: ";
gets(cadena);
//llamada a la funcion quita_ceros con sobrecarga
eliminados= quita_ceros(vector,n);
quita_ceros(cadena);
//Informa resultados
cout<<"\nCantidad de elementos eliminados: "<<eliminados<<endl;
cout<<"El vector sin los 0 es:"<<endl;
for (x=0; x<n; x++)
cout<<vector[x]<<'-';
cout<<"\nFrase sin espacios: "<<cadena;

cout<<endl<<endl<<"Pulsa una tecla para continuar";


}
// Funciones
Facultad de Ingeniería y Ciencias Hídricas de la UNL
Ingeniería Informática – Fundamentos de Programación
Unidad 10 8

int quita_ceros(int v[], int &largo)


{int quita=0;
for (int x=0; x<largo; x++)
if (v[x]==0){
for (int y=x; y<(largo-1); y++)
v[y]= v[y+1];
largo--;
quita++;
}
return quita;
};
//--------------------------------------------------------
void quita_ceros(char c[])
{int largo= strlen(c);
for (int x=0; x<largo; x++)
if (c[x]==' '){
for (int y=x; y<(largo-1); y++)
c[y]= c[y+1];
largo--;
}
c[largo]='\0'; //Marca de fin de texto.
};

Ejercicio 10.9.
Calcule el promedio de N datos numéricos (correspondientes a calificaciones de un curso de N estudiantes.
Ingrese los datos numéricos empleando cstrings y valide la entrada, solicitando de nuevo el dato si este fuera
no válido (si por error no se ha ingresado un número).

//© Fundamentos de Programacion - F.I.C.H. - U.N.L.


//Autor: Profesor Gerardo Sas.
//sitio web: cursosfich.dyndns.org

#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

using namespace std;

void main(void)
{char nota[10];
int N,x,calificacion;

Facultad de Ingeniería y Ciencias Hídricas de la UNL


Ingeniería Informática – Fundamentos de Programación
Unidad 10 9

double c;
float promedio=0;
cout<<"Ingrese la cantidad de Estudiantes (N):";
cin>>N;
cout<<"\nEl formato debe ser numero con decimales (##.##) Ej: 80.31"<<endl;
for (x=0; x<N; x++)
{ cout<<"\nIngrese la nota para el alumno N° "<<x+1<<": ";
cin.getline(nota,10,'.'); //lee el cstring
gets(nota);
calificacion = atoi( nota ); //lo convierte en entero
while (calificacion==0) //si dio 0 hay error
{cout<<"\nUd. debe ingresar un número para la nota: ";
cin.getline(nota,10,'.');
int calificacion= atoi(nota);
}
promedio += calificacion;
}
promedio /= N;
cout<<"\nEl Promedio de las notas es: "<<promedio<<endl;
cout<<endl<<endl<<"Pulsa una tecla para continuar";
}

Ejercicio 10.10
Se analizan los datos de un grupo de personas residentes en la ciudad de Santa Fe.
Se ingresan por cada persona los datos siguientes: Apellido, Nombres, Calle y Número.
a) Informe los nombres de cada calle donde vivan 2 o más personas de la lista.
b) A continuación la lista de personas de esa calle. No muestre aquellas personas que sean únicas en su
calle.

//© Fundamentos de Programacion - F.I.C.H. - U.N.L.


//Autor: Profesor Gerardo Sas.
//sitio web: cursosfich.dyndns.org

#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <iomanip.h>

using namespace std;

Facultad de Ingeniería y Ciencias Hídricas de la UNL


Ingeniería Informática – Fundamentos de Programación
Unidad 10 10

void main(void)
{ char apellido[5][15]={"Perez","Lopez","Loyarte","Caballoro","Ceballos"};
char nombre[5][15]={"Juan","Pedro","Horacio","Raul","Victor"};
char calle[5][15]={"Rioja","San Martin","Rioja","Rioja","San Martin"};
int numero[5]={100,111,222,333,444};
char personas[5][50];//Aqui almaceno los datos para la respuesta al item (b)
int c,x,cont,cp;
char auxcalle[15];
//muestro los datos por pantalla
for (c=0;c<5;c++)
cout <<setw(10) <<nombre[c] <<setw(15) <<apellido[c] <<setw(15) <<calle[c]
<<setw(10) <<numero[c] <<endl;
cout<<"\n\n";

cp=0;//contador de personas que viven en la misma calle


for (c=0;c<5;c++)
{ cont=1;//comienzo contando 1 persona
//item (b) copio los datos de la persona
if (strcmp(calle[c],"\0")!=0){ //Si no esta vacia
strcpy(personas[cp],calle[c]);//copio calle
strcat(personas[cp],"= \0");
strcat(personas[cp],apellido[c]);//copio apellido
strcat(personas[cp]," - \0");
};
//Recorro desde la pos. actual hasta el final buscando coincidencias
for (x= c+1; x<5 ;x++)
{ //Si coinciden las cadenas y no estan vacias
if ((strcmp(calle[c],calle[x])==0)&&(strcmp(calle[c],"\0")!=0))
{ cont++;//cuento 1 persona mas
strcpy(calle[x],"\0");//Elimino la calle para no repetir
//item (b) agrego la persona a la lista
strcat(personas[cp],apellido[x]);//copio apellido
strcat(personas[cp]," - \0");
};//del if
}//del for x
if (cont>=2)//si supera las dos personas informo
{cout<<"\nEn la calle "<<calle[c]<<" viven "<<cont<<" personas.\n";
cp++;//cuenta el contador de mas de dos personas que viven en esa calle
};//del if
};//del for

cout<<"\n\n\n\n";

Facultad de Ingeniería y Ciencias Hídricas de la UNL


Ingeniería Informática – Fundamentos de Programación
Unidad 10 11

for (c=0;c<cp;c++)//muestro las personas que viven en esa calle


puts(personas[c]);

cout<<endl<<endl<<"Pulsa una tecla para continuar";


}

Facultad de Ingeniería y Ciencias Hídricas de la UNL


Ingeniería Informática – Fundamentos de Programación