Include <Cstdlib>
Total Page:16
File Type:pdf, Size:1020Kb
EJEMPLO 9.1
#include
cout << S1 << endl << endl;
for (int i = 0; i < 6; i++) cout << " S[" << i << "] = " << S[i] << "\n"; system("PAUSE"); return EXIT_SUCCESS; }
En el resultado de ejecución aparece S[5] = carácter nulo que es no imprimible:
EJEMPLO 9.2
#include
int main(int argc, char *argv[]) { char Ejemplo[31]; // Definir array de caracteres
cout << " introduzca frase \n "; cin.getline(Ejemplo,30); // lectura de cadena completa cout << "\t\"" << Ejemplo << "\"\n"; cout << " introduzca otra frase \n "; cin >> Ejemplo; // lectura de palabra hasta encontrar blanco cout << "\t\"" << Ejemplo << "\"\n"; system("PAUSE"); return EXIT_SUCCESS; }
Resultado de ejecución:
1 EJEMPLO 9.3 #include
void Leer_registro(registro &r) { cout << " Lectura de datos \n"; cout<<" Nombre y apellidos: ";cin.getline(r.Nombre_y_apellidos, 50); cout << " Calle: "; cin.getline(r.Calle, 32); cout << " Poblacion: "; cin.getline(r.Poblacion,27); cout << " Provincia: "; cin.getline(r.Provincia, 27); cout << " Pais: "; cin.getline(r.Pais, 20); cout << " Codigo Postal: "; cin.getline(r.Codigo_Postal, 7); } void Escribir_registro(registro r) { cout << " \n Visualizacion de datos \n \n"; cout << " " << r.Nombre_y_apellidos << endl; cout << " " << r.Calle << endl;; cout << " " << r.Poblacion << endl; cout << " " << r.Provincia << endl; cout << " " << r.Pais << endl; cout << " " << r.Codigo_Postal << endl; } int main(int argc, char *argv[]) { Leer_registro(r); Escribir_registro(r); system("PAUSE"); return EXIT_SUCCESS; }
Resultados de ejecución:
.
2 EJEMPLO 9.4. #include
while (cin.get(ch)) if (esvocal(ch)) cuenta++; cout << " numero de vocales leidas "<< cuenta << "\n"; system("PAUSE"); return EXIT_SUCCESS; }
Un resultado de ejecución es:
EJEMPLO 9.5
#include
while (cin.get(ch)) { if (esvocal(ch)) // es una vocal cout.put(tolower(ch)); // escribe en minúscula else if(isalpha(ch)) // es letra cout.put(toupper(ch)); // escribe minúscula else cout.put(ch); // escribe como se lee } system("PAUSE"); return EXIT_SUCCESS; } Ejemplo de ejecución:
3 .
EJEMPLO 9.6 #include
while (cin.get(ch)) if (ch >= '0' && ch <= '9') { cin.putback(ch); // restaura cin >> r; // lee dato real break; } return r; } int main(int argc, char *argv[]) { float r1, r2; char ch;
cout <<"intoduzca linea con dos numeros a sumar control+z fin \n"; while(cin.get(ch)) { cin.putback(ch); // restaura para leer reales r1 = siguienteReal(), r2 = siguienteReal(); cin.ignore(80,'\n'); // salta hasta fin línea cout << r1 << " + " << r2 << " = " << r1 + r2 << endl; } system("PAUSE"); return EXIT_SUCCESS; }
EJEMPLO 9.7 void getline2 (char* cadena, int n) { char c, *p = cadena; int i = 0;
while (( cin.get(c)) && (c != '\n') && (i < n)) { *p++ = c; i++;
4 } *p = '\0'; } void getline2 (char* cadena, int n, char ch) { char c, *p = cadena; int i = 0;
while (( cin.get(c)) && (c != ch) && (i < n)) { *p++ = c; i++; } *p = '\0'; }
EJEMPLO 9.8 char * strcpya( char * destino, const char* origen) { int lon = strlen(origen); // se calcula longitud
destino = new char [lon + 1]; // se reserva memoria for (int i = 0; i < lon; i++) //se copia carácter a carácter destino[i]= origen[i]; destino[lon] = '\0'; // se añade fin decadena return destino; // retorno de la copia }
EJEMPLO 9.9
#include
while (i < max) { cin.getline(linea, 80); lon = strlen(linea); if ( lon == 0) break; if (lon < longmin) { posmin = i; longmin = strlen(linea); } if (lon > longmax) { posmax = i; longmax = strlen (linea); } strcpy (texto [i], linea);
5 i++; }
strcpy (linea, texto[posmin]); strcpy (texto[posmin], texto[posmax]); strcpy (texto[posmax], linea); cout << " texto intercambiado \n"; for (j = 0; j < i ; j++) cout << texto[j] << endl;
system("PAUSE"); return EXIT_SUCCESS; }
EJEMPLO 9.10
#include
cout << " Introduzca el texto linea a linea. \n"; for (; ; ) { sumalinea = 0; cin.getline(buffer, 80); if (strlen(buffer) == 0) break; // salida del bucle ptr = strtok(buffer, " "); while (ptr) { if ((kilos = atoi (ptr)) != 0) sumalinea += kilos; ptr = strtok(NULL, " "); } cout << " La suma de kg en linea es: " << sumalinea << endl; suma += sumalinea; } cout << " La suma de kg de todas las lineas es: " << suma << endl; system("PAUSE"); }
Un resultado de ejecución es el siguiente:
EJEMPLO 9.11 #include
6 int main(int argc, char *argv[]) { char *cadena= " 32 111"; char **pcadena = new(char*) ; long numero1; unsigned long numero2;
numero1 = strtol (cadena,pcadena,4); // extrae numero en base 4 cout << " numero = "<< numero1 << endl; cout << " cadena actual "<< *pcadena << endl; cadena = *pcadena; numero2 = strtoul (cadena, pcadena,2); // extrae numero en base 2 cout << " n2 = "<< numero2 << endl; system("PAUSE"); return EXIT_SUCCESS; }
Resultado de ejecución:
EJERCICIO 9.1
Todas las declaraciones realizan inicializaciones de array de caracteres a cadenas, excepto la declaración correspondiente a var_cad1, que inicializa un array de caracteres, simplemente, ya que no termina en el carácter nulo '\0'. Son equivalentes las inicializaciones de las variables var_cad0 y var_cad2 entre sí, ya que la primera se inicializa a una constante cadena, y la segunda se inicializa cada posición del array a los mismos caracteres terminando en el carácter nulo. También son equivalentes las inicializaciones de var_cad3 y var_cad4, a pesar de que la segunda inicialización es de un array indeterminado.
EJERCICIO 9.2 #include
strcat(var_cad, " y adios"); cout << var_cad<< endl; system("PAUSE"); return EXIT_SUCCESS; }
EJERCICIO 9.3
#include
7 int Longitud(cadena80 &cad) { int contador = 0;
while (cad[contador] != '\0') contador ++; return contador; } int main(int argc, char *argv[]) { cadena80 cad = "C++ es mejor que C";
cout << "longtud de " << cad<< " = " << Longitud(cad) << endl;
system("PAUSE"); return EXIT_SUCCESS; }
EJERCICIO 9.4
La variable c1 es una variable puntero que apunta a un puntero de caracteres. La variable c2 es un array de 10 punteros a caracteres. La variable c3 es una matriz con espacio para 210 punteros a caracteres accesibles según un arreglo de 10 filas de 21 elementos cada una de ellas.
EJERCICIO 9.5 int main(int argc, char *argv[]) { char s1[81], s2[81];
cout << " introduzca cadena :"; cin.getline(s1,80); cout << " introduzca cadena :"; cin.getline(s2,80); cout << " Antes de strcat(s1, s2): \n"; cout<< " s1 = \"" << s1 << "\", longitud = "< Resultado de ejecución: EJERCICIO 9.6 include 8 char asignatura [N][21], codigo [N][7]; void leer(char asignatura[][21], char codigo[][7], int n) { for (int i = 0; i<= n; i++) { cout << " Escriba el nombre de la asignatura: " << i + 1 << " "; cin.getline (asignatura [i],20); cout << " Escriba el código de la asignatura: " << i + 1 << " "; cin.getline(codigo [i], 6); } } #define N 50 int main(int argc, char *argv[]) { ..... system("PAUSE"); return EXIT_SUCCESS; } EJERCICIO 9.7 void escribir(char asignatura[][21], char codigo[][7], int n) { for (int i = 0; i<= n; i++) { cout<< " nombre de la asignatura: " < #include cout << "deme cadena "; cin.getline(cadena,40); strrev(cadena); cout << "Cadena invertida \n" << cadena << endl; system("PAUSE"); return EXIT_SUCCESS; } PROBLEMA 9.1 include 9 #include for (; Hexa[c]; c++)//mientras quede dígito en número en hexadecimal { if ((Hexa[c] >= '0') && (Hexa[c] <= '9')) //es dígito Valordigito = Hexa[c]-'0'; else + 10; if ((0 <= Valordigito) && //es carácter Valordigito = Hexa[c] -'A' (Valordigito < base)) //comprobación de dato numero = numero * base + Valordigito; else cout <<" error \n"; //no está bien escrito en la base 16 } return numero; } int main(int argc, char *argv[]) { char Hexa[]= "12A"; cout << Hexadecimal_a_enterolargo( Hexa) << endl; system("PAUSE"); return EXIT_SUCCESS; } Resultado de ejecución: PROBLEMA 9.2 #include 10 cout << " introduzca texto\n"; text = new linea[4]; Leer_Texto( text, 4); cout << " Texto leido texto\n"; Escribir_Texto(text,4); system("PAUSE"); return EXIT_SUCCESS; } PROBLEMA 9.3 #include { char *TextoEntrada[max]; char linea [81], *ptr; int kilos, suma = 0; cout << " Introduzca el TextoEntrada linea a linea. \n"; for (int i = 0; i < max ; i++) { cin.getline(linea, 80); TextoEntrada[i] = new char[strlen(linea)+1];//espacio para linea strcpy(TextoEntrada[1], linea); // copia linea en texto ptr = strtok(linea, " "); // busca prime blanco while (ptr) { kilos = atoi (p ptr = strtok(NULL tr); // convienrte a entero suma += kilos;, " "); // búsqueda de siguiente } } cout << " texto leido \n"; for (int i = 0; i < max ; i++) // visualización del texto. cout << TextoEntrada[i]<< endl; cout << " La suma de kg de todas las lineas es: " << suma << endl; system("PAUSE"); } PROBLEMA 9.4 void cuentaLetras ( char* cadena, int &voc, int &con, int &dig) { char * p = cadena; voc = con = dig = 0; while (*p != '\0') { char ch = tolower(*p); // convierte en letra mayúscula if (isupper(ch)) // si es letra mayúscula switch (ch) { case 'A': case 'E': case 'I': case 'O': case 'U': voc ++; 11 break; default : con ++; } else if (isdigit(ch)) // es un dígito dig++; p++; } } PROBLEMA 9.5 #include cout << " introduzca cadena: "; cin.getline(buffer,80); cad1 = tolowercad(buffer); cout << " introduzca cadena: "; cin.getline(buffer,80); cad2 = tolowercad(buffer); for (i = 0; i < 28 ; i++) letras1[i] = letras2[i] = 0; for (i = 0; i < strlen(cad1); i++) if (islower (cad1[i])) letras1[cad1[i] - 'a']++; for (i = 0; i < strlen(cad1); i++) if (islower (cad1[i])) letras2[cad1[i] - 'a']++; for (i = 0; (i < 28) && sw; i++) if (letras1[i] != letras2[i]) sw = false; if(sw) cout << "Las cadenas introducidas son anagramas. \n"; else cout << "Las cadenas introducidas no son anagramas. \n"; system("PAUSE"); return EXIT_SUCCESS; } PROBLEMA 9.6 #include 12 { while (cad[i] == ' ' && i <= strlen(cad))//busca carácter<>de blanco i++; } void saltapalabra(char *cad, int &i) { while (cad[i] != ' ' && i <= strlen(cad)) //busca carácter blanco i++; } int main(int argc, char *argv[]) { char cad[81]; int i, n, total = 0; cout << " Introduzca lineas, separando las palabras con blancos.\n"; cin.getline (cad,80); while ((*cad) != NULL) // hay línea { i = n = 0; // comienza el tratamiento de una nueva línea saltablanco(cad,i); for (; i <= strlen(cad); i++) { saltapalabra(cad,i); saltablanco(cad,i); n++; // una palabra más } cout << " \t\t\"" < Un resultado de ejecución es el siguiente: PROBLEMA 9.7 #include cout << " Introduzca la palabra clave a buscar: " << endl; cint.getline(clave,15); 13 for (i = 0; i < max ; i++) { cin.getline(linea, 80); if (strlen(linea) == 0)break; // fin de datos arraydelineas [i] = new char [strlen (linea ) +1]; strcpy (arraydelineas [i], linea); punteroL = arraydelineas[i]; while ((punteroL = strstr (punteroL, clave)) != NULL) { punteroL++; // avanza una posición el puntero numero_de_veces++; } } cout<< "La palabra clave" << clave << " aparece "; cout << numero_de_veces << " en el text.\n"; system("PAUSE"); return EXIT_SUCCESS; } PROBLEMA 9.8 #include void escribir_texto(char* arraydelineas[], int ll[][2], int n) { for ( int i = 0; i < n ; i++) cout << arraydelineas[ ll[i][1]] << endl;//indexación salida } void ordenar (int ll[][2], int n) { //método de ordenación por burbuja int aux; for (int i = 0; i < n - 1; i++) for (int j = 0; j < n - i - 1; j++) if (ll[j][0] > ll[j + 1][0]) { 14 aux = ll[j][0]; ll[j][0]=ll[j + 1][0]; ll[j + 1][0]= aux; aux = ll[j][1]; ll[j][1]=ll[j + 1][1]; ll[j + 1][1]= aux; } } int main(int argc, char *argv[]) { char* arraydelineas[max]; int longitudlineas[max][2], i; leer_texto(arraydelineas,longitudlineas, i); ordenar (longitudlineas, i); cout << " texto leido ordenado por longitud de lineas \n"; escribir_texto(arraydelineas, longitudlineas, i); system("PAUSE"); return EXIT_SUCCESS; } Resultado de una posible ejecución PROBLEMA 9.9 #include cout << " Introduzca la palabra clave a buscar: "; cin.getline(clave,15); while (i < 50 ) { cin.getline(buffer,80); ptr = buffer; if (strstr (ptr, clave) == NULL) //no está en línea almacenarla { texto [j] = new char[strlen (buffer ) +1]; 15 strcpy (texto [j], buffer); j++; } i++; } cout << " texto con lineas elminadas "<< endl; for (i = 0; I < j; i++) cout << texto [i] << endl; system("PAUSE"); return EXIT_SUCCESS; } PROBLEMA 9.10 #include lon = strlen(cadena); rcadena = new char[lon+1]; for(int i = 0; i < lon; i++) rcadena[lon - i - 1] = cadena[i]; rcadena[lon] = '\0'; return rcadena; } int main(int argc, char *argv[]) { cout << "ABCD"<< " invertida "<< reverse( "ABCD")<< endl; system("PAUSE"); return EXIT_SUCCESS; } PROBLEMA 9.11 char *ampliacaracter( char *cadena, int lon, char ch) { char * acadena = new char[lon +1]; strcpy(acadena,cadena); for (int i = strlen(cadena); i< lon; i++) acadena[i]= ch; acadena[lon] = '\0'; return acadena; } int main(int argc, char *argv[]) { cout << "ABCD" << " "<< ampliacaracter("ABCD", 7, 'X')<< endl; cout << "ABCD" << " "<< ampliacaracter("ABCD", 2, 'X')<< endl; system("PAUSE"); return EXIT_SUCCESS; } 16 Resultado de ejecución del programa: PROBLEMA 9.12 #include lon = strlen(cadena); rcadena = new char[lon+1]; for(int i = 0; i < lon; i++) rcadena[lon - i - 1] = cadena[i]; rcadena[lon] = '\0'; return rcadena; } char *ampliacaracter( char *cadena, int lon, char ch) { char * acadena = new char[lon +1]; strcpy(acadena,cadena); for (int i = strlen(cadena); i< lon; i++) acadena[i]= ch; acadena[lon] = '\0'; return acadena; } char* SumarGrandes (char* numero1, char* numero2) { char* rnumero1, * rnumero2, *resultado; int i, mayor, acarreo = 0; rnumero1 = reverse (numero1); rnumero2 = reverse (numero2); if (strlen (numero1) > strlen (numero2)) mayor = strlen (numero1); else mayor = strlen (numero2); resultado = new char[mayor +2]; // reserva de memoria para la suma *resultado = '\0'; // cadena vacía rnumero1 = ampliacaracter(rnumero1, mayor,'0'); // rellena con ceros rnumero2 = ampliacaracter(rnumero2, mayor,'0'); // rellena con ceros resultado =ampliacaracter(resultado,mayor+1,'0');//rellena con ceros // realización de la suma. for (i = 0; i < mayor; i++) { // realización de la suma por el algoritmo estandar resultado[i]=(rnumero1[i]-'0'+rnumero2[i]-'0'+acarreo) % 10 +'0'; acarreo = (rnumero1[i] - '0'+ rnumero2[i]-'0'+ acarreo) / 10 ; } 17 if(acarreo > 0) resultado[mayor] = '0' + acarreo; else resultado[mayor] = '\0'; // el resultado tiene un carácter menos return reverse(resultado); } int main(int argc, char *argv[]) { cout << "55524" << " + " << "56789" << " = "; cout << SumarGrandes( "55524", "56789") << endl; cout <<"24" << " + " << "2463" << " = "; cout << leerGrandes( "24", "2463")<< endl; system("PAUSE"); return EXIT_SUCCESS; } Resultado de ejecución: PROBLEMA 9.13 char * multiplica_digito (char* numero, char dig) { char* rnumero, *resultado; int i, lon, acarreo = 0, d, valor; rnumero = reverse (numero); lon = strlen (numero); resultado = new char[lon +2]; // reserva de memoria para la suma *resultado = '\0'; // cadena vacía resultado=ampliacaracter(resultado, lon+1,'0');//rellena con ceros // realización del producto d = dig - '0'; for (i = 0; i < lon; i++) { // realización del producto por el algoritmo estandar valor = (rnumero[i]-'0')*d + acarreo; resultado[i] = '0'+ valor % 10; acarreo = valor / 10 ; } if(acarreo > 0) resultado[lon] = '0' + acarreo; else resultado[lon] = '\0'; // el resultado tiene un carácter menos return reverse(resultado); } PROBLEMA 9.14 char * multiplica_grandes (char* numero1, char *numero2) { char *resultado, *sumando; int i, lon2 = strlen(numero2); resultado = new char; *resultado = '\0'; for (i = lon2-1; i >= 0; i--) 18 { sumando = multiplica_digito(numero1,numero2[i]); sumando = ampliacaracter(sumando,strlen(sumando)+ lon2 - i - 1,'0'); resultado = SumarGrandes(resultado, sumando); } return resultado; } int main(int argc, char *argv[]) { cout << "resultado: " "2457" << " X " << " 659 =+"; cout << multiplica_grandes("2457", "659")<< endl; system("PAUSE"); return EXIT_SUCCESS; } Un resultado de ejecución es el siguiente: PROBLEMA 9.15 #include cout << " Introduzca el texto linea a linea.\n"; for (i = 0; i < 100 ; i++) { cin.getline(buffer, 80); texto [i] = new char[80]; strcpy (texto[i], buffer); if (mayor < strlen (buffer)) mayor = strlen (buffer); } // rellenado con blancos for (i = 0; i < 100 ; i++) ampliacaracter(texto[i], mayor,' '); // visualización del texto. for (i = 0; i < 100 ; i++) cout << texto[i] << endl; system("PAUSE"); return EXIT_SUCCESS; } 19