Vous êtes sur la page 1sur 11

Unidad 10 1

Fundamentos de Programación 2008

UNIDAD 10
CStrings en C++

Respuestas a los ejercicios de la Guía Nº 10

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: http:\\fich2.unl.edu.ar:81\moodle\
//------------------------------------------------
#include<iostream.h>
#include <string.h>
#include <stdio.h>
using namespace std;
int 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 A[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";

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


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

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";
}

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: http:\\fich2.unl.edu.ar:81\moodle\
#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
using namespace std;

int 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: http:\\fich2.unl.edu.ar:81\moodle\
#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
using namespace std;
int 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;
}

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


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

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).

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


//Autor: Profesor Gerardo Sas.
//sitio web: http:\\fich2.unl.edu.ar:81\moodle\

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

int 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

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


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

Ejercicio 10.6.
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
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: http:\\fich2.unl.edu.ar:81\moodle\

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

int 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

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";
Facultad de Ingeniería y Ciencias Hídricas de la UNL
Ingeniería Informática – Fundamentos de Programación
Unidad 10 6

Ejercicio 10.7.
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: http:\\fich2.unl.edu.ar:81\moodle\
#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
using namespace std;
int 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";
}

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


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

Ejercicio 10.8.
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: http:\\fich2.unl.edu.ar:81\moodle\
#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


int 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;

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


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

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


}
// Funciones
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: http:\\fich2.unl.edu.ar:81\moodle\

#include<iostream.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.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 9

int main(void)
{char nota[10];
int N,x,calificacion;
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: http:\\fich2.unl.edu.ar:81\moodle\

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

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


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

#include <stdlib.h>
#include <iomanip.h>

using namespace std;

int 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

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


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

};//del if
};//del for

cout<<"\n\n\n\n";
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

Vous aimerez peut-être aussi