PR24 - Lenguaje C (II)

Anuncio
FUNDAMENTOS DE PROGRAMACIÓN
PRÁCTICA 24: LENGUAJE C (II)
Curso: 2010/11
Versión: 1.0.0
OBJETIVOS
Aprender el manejo de cadenas en lenguaje C y repasar algunos conceptos.
RECOMENDACIONES
Cree una carpeta en la estructura de archivos de su ordenador denominada Practica24, en
la que almacenará todo el código de esta práctica.
EXPERIMENTOS
Cree un proyecto denominado Cadenas que contenga un archivo de código fuente que se
llame “principal” y cuya única misión será ir invocando y probando las funciones de los
experimentos que se describen más abajo, a medida que los realiza.
Cree un fichero de cabeceras llamado “cadenas.h” con lo siguiente:
#ifndef CADENAS_H_INCLUDED
#define CADENAS_H_INCLUDED
#include <stdio.h>
#define MAXCAR 256
typedef char Cadena[MAXCAR];
#endif
Recuerde que habrá de incluirlo en el principal e ir agregándole los prototipos de las
funciones definidas en los experimentos que siguen.
EXPERIMENTO 1 – COPIANDO CADENAS
Cree un archivo llamado exp1 en el que escriba e intente compilar el siguiente código.
Corrija los errores para que funcione correctamente.
#include “cadenas.h” (cuidado con las comillas tipográficas)
void experimento1(void)
{
Cadena s1 = "hola", s2 = "adios";
printf ("Experimento1\n");
s1 = s2;
if (s1 == s2)
printf("\tcadenas iguales\n");
else
printf("\tcadenas desiguales\n");
}
EXPERIMENTO 2 – RESERVANDO ESPACIO SUFICIENTE
Cree un archivo llamado exp2 en el que escriba e intente compilar el siguiente código.
Corrija los errores para que funcione correctamente.
#include “cadenas.h”
(cuidado con las comillas tipográficas)
void experimento2(void)
{
Práctica 24: Lenguaje C (1I)
2
char *s1 = "hola", *s2 = "adios";
printf ("Experimento2\n");
strcat(s1,s2);
printf("\t%s %s\n",s1,s2);
}
EXPERIMENTO 3 – CUIDADO CON EL FIN DE CADENA (‘\0’)
Cree un archivo llamado exp3 en el que escriba y compile el siguiente código.
#include “cadenas.h”
(cuidado con las comillas tipográficas)
void experimento3(void){
char cad1[] = "Pepito Grillo";
char cad2[] = "Gepeto";
printf ("Experimento3\n");
printf("\t(1)%s\n", cad1);
printf("\t(2)longitud de cad1:%d\n",strlen(cad1));
printf("\t(3)%s\n", cad2);
printf("\t(4)longitud de cad2:%d\n",strlen(cad2));
cad1[strlen(cad1)] = '*';
cad2[strlen(cad2)] = '#';
printf("\n\t(5)%s\n", cad1);
printf("\t(6)longitud de cad1:%d\n",strlen(cad1));
printf("\t(7)%s\n", cad2);
printf("\t(8)longitud de cad2:%d\n",strlen(cad2));
}
Mueva un poco la ventana de la consola en la pantalla e intente seguir la traza para
comprender lo que ha pasado. En caso necesario, pregunte a su profesor de prácticas.
EJERCICIOS
EJERCICIO 1– BUSCANDO UN CARÁCTER
Cree un proyecto que se denominará CadenaEjer1.
Cree un archivo de código denominado “principal” donde estará codificada:
a) La función void main(void) que pedirá por teclado una cadena de caracteres y un
carácter (se aconseja utilizar las funciones gets(cad) para pedir la cadena y
c=getchar() para pedir el carácter, ya que scanf (...) no sabe reconocer un carácter
que se teclee después de cualquier otro valor -asume como dato introducido para el
carácter el blanco o el retorno de carro con el que se separaría el valor introducido
anterior al carácter-).
Invocará a la función del apartado b) y visualizará un texto que indique si el
carácter estaba o no en la cadena y, en su caso, la primera posición donde
aparece, teniendo en cuenta que si aparece en la primera posición debe
visualizar un 1. Por si le ayuda una posición nunca es negativa.
b) Una función int busca_caracter (Cadena, char);
Que recorra la cadena comparando cada elemento con el carácter y devuelva un
valor apropiado.
No olvide definir los tipos apropiados que necesite.
Práctica 24: Lenguaje C (1I)
3
EJERCICIO 2– PALABRA O FRASE CON LA CONDICIÓN DE PALÍNDROMO
Se dice que una palabra, frase o secuencia de números es un palíndromo cuando se lee
igual de izquierda a derecha como de derecha a izquierda.
Cree un proyecto que se denominará CadenaEjer3.
Cree un archivo de código denominado “principal” donde estará codificada:
a) La función void main(void) que pedirá por teclado una frase, invocará a la
función del apartado b) y visualizará un texto que indique si la frase es un
palíndromo o no.
b) Una función boolean esPalindromo (Cadena);
Devolverá falso o cierto según sea la frase que reciba como parámetro.
No olvide definir los tipos apropiados que necesite.
EJERCICIO 3– CALCULANDO EL DIGITO DE CONTROL DE UN ISBN
International Standard Book Number (en español, „número estándar internacional de
libro‟), abreviado ISBN, es un identificador único para cualquier libro cuyo uso se prevea
de carácter comercial. Cómo se descompone y se calcula el dígito de control que figura
como último digito se explica a continuación. Realice con el esquema de los ejercicios
anteriores un programa C que pida por teclado el código de grupo, el del editor y el del
libro y visualice una cadena con la concatenación de todo el ISBN.
El prototipo de la función que calcule el dígito de control es:
char digitoControlISBN(Cadena);
Esta función debería comprobar si la cadena de entrada tiene 9 caracteres, devolviendo el
carácter NULL en caso de ser distinto (defina NULL como el carácter „\0‟, también
llamado fin de cadena)
El formato de un código ISBN de 10 dígitos (los hay de trece) es el siguiente:
• Código de grupo (1 dígito)
• Código del editor (4 dígitos)
• Código del libro (4 dígitos)
• Carácter/dígito de control (1 carácter/dígito)
Por ejemplo, el código ISBN para un determinado libro es 0675209935. El carácter o
dígito de control (5 en el ejemplo) se obtiene en dos pasos:
1. Se multiplica cada dígito por el índice correspondiente a su posición, y se suman los
números resultantes. En el ejemplo:
0 6 7 5 2 0 9 9 3
x1 2 3 4 5 6 7 8 9
-------------------------------------------0 + 12 + 21 + 20 + 10 + 0 + 63 + 72 + 27 = 225
Práctica 24: Lenguaje C (1I)
4
2. Se divide la suma por 11, y se toma el resto como dígito de control, teniendo en cuenta
que si el resto es 10, se utiliza el carácter X como carácter de control. En el ejemplo, el
resto de la división entera de 225 por 11 es 5, que es el dígito de control.
IMPORTANTE: Observe que la función char digitoControlISBN(Cadena) devuelve un
tipo char, por lo que necesitará, de un lado, pasar al int los valores char que forman la
cadena de entrada y, de otro, una vez calculado el dígito de control pasarlo a char para que
se pueda devolver en el return, por ello sepa que:
convierte un dato de tipo carácter, que representa un
numero entero, en ese número como tipo de dato entero.
(char)(entero+'0') convierte un entero entre 0 y 9 en su representación como
carácter.
(int)(carácter-'0')
Descargar