You are on page 1of 5

SSL K-2051 Parcial 28/9/2005 Alumna/o

..

ENUNCIADO
1)
Construya la funcin int Elige (char *s1, const char *s2, char c).
Si el carcter que contiene c se encuentra en el string s2, copia este string en
el espacio apuntado por s1 y retorna la cantidad de veces que el carcter
mencionado aparece en el string s2.
Si el carcter no existe, el string generado ser vaco y retorna 0.
Escriba adems, un programa muy simple que utilice esa funcin.
2)
Construya el programa comando codifica archivo-1 archivo-2 cdigo.
archivo-1 y archivo-2 son de texto y cdigo representa un carcter.
Si el cdigo es X, entonces todos los caracteres del archivo-1 se copian en el
archivo-2 excepto los dgitos, reemplazados en el archivo-2 por tantos
asteriscos como el valor representado por el dgito.
Si el cdigo es Y, entonces el archivo-1 se copia en el archivo-2.
Nota: Suponga ya construidas las funciones Ayuda, MensajeError y
VerificaCodigo. Solo escriba sus prototipos, documntelas e invquelas
correctamente.
3)

Verdadero o falso. Justifique cada respuesta:

a)

Las ERs (a+b)*(a+b) y (a+b)(a+b)* son equivalentes

b)
El lenguaje representado por la ER xy + x no puede ser reconocido
por un autmata finito.
c)
Todo proceso de validacin de un conjunto finito de cadenas puede
implementarse mediante un AFD.

RESPUESTAS
Ejercicio N3)
a)
VERDADERO, debido a que representan el mismo Lenguaje y forman
las mismas palabras.
b)
FALSO, debido a que es un lenguaje finito, y si un lenguaje es finito es
regular y tiene una expresin regular que lo denota, es una caracterstica del
lenguaje regular.

-1-

SSL K-2051 Parcial 28/9/2005 Alumna/o


..
c)
VERDADERO, debido a que es un conjunto finito y este tipo de
conjuntos se puede implementar bajo un autmata finito deterministico.

-2-

SSL K-2051 Parcial 28/9/2005 Alumna/o


..
Ejercicio N1)
#include <stdio.h>
int Elige (char *, const char *, char);
int main () {
int eligio;
char cad1[200+1];
char cad2[] = "Este parcial fue resuelto por Esteban LS Angulo";
char car = 'a';
eligio = Elige (cad1, cad2, car);
if(eligio == 0) {
printf("El caracter %c no fue encontrado en la cadena %s \n",car, cad2);
printf("La cadena 1 esta vacia\n ");
}
else {
printf("El caracter %c fue encontrado %d veces en la cadena %s\n", car,
eligio, cad2);
printf("Se copio la cadena 2 en la cadena 1. Cadena 1: %s.\n", cad1);
}
return 0;
}
int Elige (char *s1, const char *s2, char c) {
int i, cont=0;
for (i=0; s2[i] != '\0'; i++) {
if (s2[i] == c) cont++;
}
if (cont > 0) {
for (i=0; s2[i] != '\0'; i++) {
s1[i] = s2[i];
}
s1[i] = '\0';
return cont;
}
else return 0;
}

-3-

SSL K-2051 Parcial 28/9/2005 Alumna/o


..
Ejercicio N 2)
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void Ayuda(void);
void MensajeError(int);
int VerificaCodigo(char*);
int main (int argc, char* argv[]){
FILE *archivo1, *archivo2;
int c, i;
if(argc==1){
Ayuda();
return 1;}
if(argc!=4){
MensajeError(-1);
return 2;}
if(!VerificaCodigo(argv[3])){
MensajeError(-2);
return 3;}
if ((archivo1= fopen(argv[1], "rt")) == NULL) {
MensajeError(-3);
return 4;}
if ((archivo2= fopen(argv[2], "wt")) == NULL) {
MensajeError(-4);
return 5;}
while((c= fgetc(archivo1))!=EOF){
if(argv[3][0] == 'X'){
if(isdigit(c))
for(i=0;i<(c-48);i++) putc('*', archivo2);
else fputc(c, archivo2);}
if(argv[3][0]=='Y') fputc(c, archivo2);
}
fclose(archivo1);
fclose(archivo2);
return 0;
}
void Ayuda (void) {
printf("Menu ayuda del programa comando codifica\n");
printf("ingrese asi: codifica archivo-1 archivo-2 codigo\n");
}
void MensajeError (int cod) {
switch (cod) {
case -1: printf ("Cantidad de argumentos incorrecta\n");
break;
case -2: printf ("El codigo es incorrecto\n");
break;
case -3: printf ("Error al abrir el archivo-1\n");
break;
case -4: printf ("Error al abrir el archivo-2\n");
break;}
}
int VerificaCodigo(char* s) {
if((strlen(s) == 1) && (s[0] == 'X' || s[0] == 'Y')) return 1;
else return 0;

-4-

SSL K-2051 Parcial 28/9/2005 Alumna/o


..
}

-5-

You might also like