Respuestas Guia10 (Cstrings)

14

Click here to load reader

description

, respuestas guia10 (cstrings)

Transcript of Respuestas Guia10 (Cstrings)

Page 1: Respuestas Guia10 (Cstrings)

Unidad 10

Fundamentos de Programación 2008

UNIDAD 10CStrings 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. [email protected]//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 caractereschar A [100][12], menor [12]="zzz";//inicializo menorint n,c;cout<<"Ingrese la cantidad de Palabras: ";cin>>n; //Contiene la cantidad de palabrasfor (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 parescout<<"\nc) Las palabras que comienzan con la sílaba 'MAR' .\n";for (c=0;c<n;c++)

Facultad de Ingeniería y Ciencias Hídricas de la UNLIngeniería Informática – Fundamentos de Programación

1

Page 2: Respuestas Guia10 (Cstrings)

Unidad 10

{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 UNLIngeniería Informática – Fundamentos de Programación

2

Page 3: Respuestas Guia10 (Cstrings)

Unidad 10

}

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

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

Facultad de Ingeniería y Ciencias Hídricas de la UNLIngeniería Informática – Fundamentos de Programación

3

Page 4: Respuestas Guia10 (Cstrings)

Unidad 10

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

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 Facultad de Ingeniería y Ciencias Hídricas de la UNLIngeniería Informática – Fundamentos de Programación

4

Page 5: Respuestas Guia10 (Cstrings)

Unidad 10

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: [email protected]

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

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

Facultad de Ingeniería y Ciencias Hídricas de la UNLIngeniería Informática – Fundamentos de Programación

5

Page 6: Respuestas Guia10 (Cstrings)

Unidad 10

Las direcciones tienen la denominación de la facultad a continuación del símbolo @. Ejemplos: [email protected] (Ing. Química), [email protected] (Cs Económicas), [email protected] (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]={"[email protected]", "[email protected]", "[email protected]", "[email protected]"};//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 resultadoscout<<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.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.

Facultad de Ingeniería y Ciencias Hídricas de la UNLIngeniería Informática – Fundamentos de Programación

6

Page 7: Respuestas Guia10 (Cstrings)

Unidad 10

//© 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 funcionesint quita_ceros(int *, int &);//Observación: solo coloco el tipo de dato como parametrovoid quita_ceros(char *);

//Cuerpo principal del Programaint 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"; }// Funcionesint 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++)

Facultad de Ingeniería y Ciencias Hídricas de la UNLIngeniería Informática – Fundamentos de Programación

7

Page 8: Respuestas Guia10 (Cstrings)

Unidad 10

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;

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

Facultad de Ingeniería y Ciencias Hídricas de la UNLIngeniería Informática – Fundamentos de Programación

8

Page 9: Respuestas Guia10 (Cstrings)

Unidad 10

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.10Se 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>#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];

Facultad de Ingeniería y Ciencias Hídricas de la UNLIngeniería Informática – Fundamentos de Programación

9

Page 10: Respuestas Guia10 (Cstrings)

Unidad 10

//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"; 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 UNLIngeniería Informática – Fundamentos de Programación

10