Práctica de Resolución de Algoritmos Resolver las siguientes

Anuncio
Práctica de Resolución de Algoritmos
Resolver las siguientes funciones, considerando que las mismas deben ser
independientes del contexto, o sea, como si se realizarán componentes aislados de
una aplicación, las cuales deben funcionar sin depender del contexto.
Todo lo que se requiere, debe ser incorporado como parámetro de entrada.
Ejercicio 1
Dada una matriz de “chars”de n x m, que representa un tablero donde se está
jugando a la batalla naval. En este tablero, puede haber caracteres en blanco (los
cuales indican agua), caracteres con “B” (los cuales indican parte de un barco) y
caracteres con “X” (que indican un barco tocado).
Se pide realizar una función de forma que dada una posición (x,y) la función
deberá contestar “Agua”, “Tocado” o “Hundido” según corresponda, entendiendo
que no se sabe cuantos casilleros componen un barco y que los barcos pueden ser
colocados en forma horizontal o vertical.
Ejercicio 2
Realizar una función que dada una matriz de “chars” de n x m y una posición
inicial (x,y) que tiene una “I” en la matriz, encuentre el camino a la posición
completada con una “S”, considerando que existen posiciones en la matriz,
marcadas con “X” que representan “muros”, los cuales no se pueden traspasar.
Ejercicio 3
Realizar una función recursiva que reciba un string e invierta los caracteres que lo
componen, con el siguiente prototipo:
void Invertir (char * cadena, int longitud).
Ejercicio 4
Realizar una función con el siguiente prototipo int funcion (char* str, char caract),
la cual borra del string str todos los caracteres con el contenido de la variable
caract que encuentre y retorna la cantidad de elementos eliminados, sin utilizar
otro string de apoyo.
Ejercicio 5
Realizar una función que espeje un árbol binario, o sea que lo Invierta, deforma
tal que todo lo que está a la derecha quede a la izquierda y viceversa.
Ejercicio 6
Realizar una función con el siguiente prototipo int funcion (char* str1, char *str2), la
cual borra el string str2 si el mismo se encuentra incluido en str1.
Ejercicio 7
Dada una matriz de n x m se desea realizar una función que encuentre el string
recibido como parámetro, en dicha matriz, el cual puede estar escrito horizontal,
vertical o en diagonal.
Ejercicio 8
Dada una matriz de enteros de n x m, completada con unos o ceros.
Realizar una función que reciba un vector de enteros de longitud “t”, conteniendo
unos y que verifique donde pueden ser insertados en la matriz, considerando que
solo se pueden insertar en posiciones que haya ceros y que deben insertarse todos
juntos en forma horizontal o vertical.
Ejercicio 9
Realizar una función que reciba un string y verifique si el mismo es palíndromo, o
sea capicúa, con el siguiente prototipo:
void verifica (char * cadena, int longitud).
Ejercicio 10
Realizar una función que ordene 9 números distintos de un dígito (del 1 al 9), en
una matriz de 3 x 3, de forma tal que las sumas horizontales, verticales y
diagonales, entre dichos números de siempre el valor 15.
Ejercicio 11
Dada la siguiente estructura:
struct Nodo {
unsigned char Clave;
struct Nodo *Prev;
struct Nodo *Next;
struct Dato * datos;
}
la cual define una lista doblemente enlazada.
Se pide:
Escribir una función recursiva con el siguiente prototipo:
void Sort(struct Nodo *)
la cual debe ordenar la lista y eliminar las claves duplicadas si las hubiese,
(dejando solo una de ellas), sin utilizar ninguna estructura auxiliar de apoyo.
Ejercicio 12
Desarrollar la función DeleteFile(char *file, struct Directory *dir,struct FAT *fat);
la cual elimina un archivo especificado. Teniendo en cuenta las siguientes
condiciones:
¾ Toda la información es grabada en forma contigua.
¾ El Sistema Operativo trabaja con un límite de 256 archivos por bloque.
¾ Si un cluster esta ocupado parcialmente, no se completa el resto del
mismo.
Struct Directory {
char *Name;
struct File *Files;
struct Directory *ParentDirectory;
struct Directory *SonDirectory;
struct Directory *NextBlock;
unsigned long ClusterNumber;
};
Struct File {
char *Name;
unsigned long Size;
unsigned long FirstCluster;
unsigned char *Atributos;
struct Directory *dir;
int Mode;
};
Struct FAT {
long *Clusters;
unsigned long FreeSpace;
unsigned int ClusterSize;
unsigned long ClustersFree;
};
Ejercicio 13
Dada las siguiente estructuras:
struct Tree {
int Clave;
struct Tree *Father;
struct Tree *Rightson;
struct Tree *Leftson;
struct File *Files;
}
struct File
{
char *Name;
int lenght;
char *Atributes;
struct File *Next;
};
las cuales representan la estructura de la FAT. Se pide escribir la función:
File *DirTree(struct Tree *Root ,int Target)
la cual recibe la dirección del directorio principal (Root) y debe imprimir en
pantalla los archivos que componen el directorio solicitado (Target).
Ejercicio 14
Realizar una función que juegue al SUDOKU, esto es que coloque en una matriz de
9 x 9 números de 1 dígito (del 1 al 9), de forma tal que en la misma fila y columna
no se encuentren repetidos y por otro lado que en cada submatriz de 3 x 3 no se
repita ninguno de los dígitos.
Ejercicio 15
Realizar una función que dado un árbol binario de búsqueda implementado sobre
un vector de enteros, realice la baja de un elemento pasado como parámetro.
Ejercicio 16
Realizar una función recursiva que dado un string, imprima en pantalla la letra
que más veces se repite dentro del string y la cantidad de repeticiones de la misma.
Se aclara que no pueden utilizarse estructuras auxiliares como vectores, listas, etc.
Ejercicio 17
Realizar una función que reciba como parámetro un string denominado “cadena”
de n caracteres y que imprima todas las combinaciones posibles de substrings de
“cadena” tomados de a t elementos, considerando que siempre t es <= n, con el
siguiente prototipo:
combina(char * cadena, int n, int t)
Ejercicio 18
Realizar una función que dada una matriz de 3 x 3, la cual representa un tablero
de TATETI, haga una movida de la ficha recibida como parámetro, considerando
que en este juego NUNCA se puede perder, a lo sumo empatar.
Ejercicio 19
Realizar una función que reciba como parámetro un string denominado “cuenta”
de n caracteres los cuales contienen una expresión matemática del tipo “3+5/2*53*9”, y que retorne el resultado de la cuenta, considerando la precedencia de los
operadores.
Ejercicio 20
Realizar una función que coloque 8 “X”, que representan 8 reinas en una matriz
de 8 x 8, la cual representa un tablero de ajedrez, de forma tal que ninguna de las
reinas puedan darse jaque, o sea, que no estén en la misma fila, columna o
diagonales.
Ejercicio 21
Realizar una función que moviéndose como un caballo, o sea 2 x 1, complete una
matriz de 8 x 8, la cual representa un tablero de ajedrez, deberá marcar los 64
casilleros, con números del 1 al 64, indicando el camino utilizado, sin pasar dos
veces por la misma posición.
Ejercicio 22
Dada las siguientes estructuras:
struct proceso
{
char nombre[20];
int inicio;
int duracion;
struct depende * pr;
};
struct depende
{
struct proceso * nodo;
struct depende * next;
};
Las cuales representan un PERT, para el seguimiento de un proyecto, donde la
estructura proceso contienen las diferentes tareas a realizar en el proyecto y la
estructura depende, es una lista que contiene las dependencias de cada uno de los
procesos, o sea, todos los procesos que deben ejecutarse antes que él.
Realizar una función que considerando que todos los procesos están creados y
todas las dependencias y las duraciones de cada uno de ellos están cargadas, debe
completar el día de inicio de cada uno de los procesos y retornar la longitud total
del proyecto en días.
Ejercicio 23
struct sala
{
char nombre[20];
struct puertas * puerta;
};
struct puertas
{
struct sala * nodo;
struct puertas * next;
};
Las cuales representan un laberinto de salas con puertas que las comunican con
otras salas..
Realizar una recibiendo una sala como parámetro encuentre el camino más corto a
la salida, la cual está representada por la sala con el nombre “SALIDA”.
Se debe considerar que una puerta esta en la lista de dos salas si las vincula entre si
debido a que no le pertenece en forma exclusiva a ninguna de las dos.
Ejercicio 24
Realizar una función que dado un vector compuesto por elementos de la estructura
figura (struct figura) imprima en pantalla los nombres de las figuras que no se
toquen ni superpongan con ninguna otra.
struct figura
{
char nombre[20];
int alto;
int ancho;
int x;
int y;
};
Descargar