[ Foro de Pascal ]
HOLA COMPAÑEROS, LES DEJO CON EL PERMISO POR SUPUESTO DEL PROFESOR NACHO CABANES UN PEQUEÑO RETO PERSONAL QUE CREO LES SERA DE BUENA PRACTICA.
El gerente del hipódromo de los andes, ha puesto a licitación el desarrollo de un programa pascal que solucione el sistema de balance de apuestas. El problema se planteo de la siguiente manera:
Se tiene un conjunto de registros con las apuestas de una carrera de caballos de 5 competidores.
El numero del caballo ganador esta grabado en el primer registro,los demás registros tienen grabados el numero de la cedula del apostador,el numero del caballo al cual se le hace la apuesta y el valor de la apuesta hecha a dicho caballo.
Al final de los registros hay un REGISTRO CENTINELA con el numero 999 en el numero de la cedula del apostador para la finalizacion de datos.
Se requiere que el programa imprima el siguiente reporte:
ejemplo:
***** DATOS DE LOS APOSTADORES *******
cedula apostador caballo al que apuesta valorapostado
----------------- ----------------------- -------------
1234556 1 100000
1234567 2 200000
1234568 3 300000
1234569 4 400000
9876543 5 500000
8742211 3 125000
hubo un total de 6 apostadores.
******* APUESTAS TOTALES POR CABALLO ******
Numero del caballo Total apostado
------------------ --------------
1 100000
2 200000
3 425000
4 400000
5 500000
*****************************************
El numero del caballo ganador fue el : 3
*****************************************
El total de apostadores ganadores fue de : 2
y el total de sus apuestas fue de :425000
EL total de apostadores perdedores fue de: 4
y el total de sus apuestas fue de : 1200000
el recaudo total de las apuestas en la competicion fue de:
162500000
yo ya lo hice espero que al hacerlo les sirva de buena practica como me lo parecio a mi.
hasta luego
CORDIAL SALUDO PROFESOR NACHO CABANES Y COMPAÑEROS EN GENERAL.
PARA LOS COMPAÑEROS LES DEJO TRES EJERCICIOS MAS PARA PRACTICAR, ESPERO QUE DE SATISFACCION PERSONAL COMO PRACTICA SE ANIMEN A DESARROLLARLOS:
1.Realizar un programa pascal que permita quitar las tildes de una palabra ingresada por teclado
2. Se ingresan en un arreglo una a una el conjunto de letras que forman un mensaje secreto, usted sabe que no está ordenado por lo tanto se pide:
- Entregue el mensaje en el orden inverso al cual fueron recibidas las letras
- Entregue el mensaje comenzando por las letras que están en las posiciones pares y luego las impares.
- Entregue el mensaje partiendo por la ultima letra, la primera letra, la penúltima letra, la segunda letra, la antepenúltima letra, la tercera letra....,por ejemplo
a s d f g h j k
Se obtendrá: k, a, j, s, h, d, g, f
3.Es muy frecuente el problema que tienen los hoteles para reservar piezas y mantener la información actualizada de sus servicios. Por eso se le ha encargado a usted que desarrolle un programa que permita automatizar la labor de reserva de habitaciones. Para ello le ha pedido ayuda a su profesor y este le ha indicado que puede usar una matriz, donde las filas representen los pisos del hotel y las columnas representen las habitaciones de cada piso, así, tendrá en el piso 1 (fila 1), las habitaciones 1 (1,1), 2 (1,2), 3 (1,3), n (1,n), en el piso 2 (fila 2) tendrá las habitaciones 1 (2,1), 2 (2,2), 3 (2,3), n (2,n) y así sucesivamente.
El programa que usted diseñe debe permitir al cliente elegir el piso y número de habitación, con lo cuál usted debe comprobar si esta habitación esta vacía (por ejemplo, posee el valor 1) u ocupada (por ejemplo, posee el valor 0); de estar vacía, se la tendrá que reservar al cliente (cambiará el estado de la habitación: de vacía a ocupada); de estar ocupada, su programa debe seguir el siguiente algoritmo de búsqueda:
* Buscar en el mismo piso la siguiente habitación vacía, para lo cuál se comienza desde la habitación seleccionada originalmente por el cliente y se prosigue en forma ascendente. Si se llega a la última habitación del piso y no se encontraron habitaciones vacías, se debe comenzar con la primara habitación de éste y buscar en forma ascendente hasta que se llegue a la habitación originalmente seleccionada por el cliente (siempre y cuando la habitación originalmente seleccionada por el cliente no sea la 1 del piso en cuestión).
* Si no se encontró una habitación vacía en el piso originalmente seleccionado por el cliente, se debe continuar con el piso inmediatamente superior e iniciar la busqueda en el mismo número de habitación que el cliente había seleccionado inicialmente. Si esta está ocupada se prosigue como se señaló anteriormente.
* Si se llega al último piso del hotel y no se han encontrado habitaciones vacías, se debe proseguir con el primer piso de este (siempre y cuando el piso originalmente elegido por el cliente no sea el primero).
* Si se recorrió todo el hotel de la forma anteriormente señalada y no se encontraron habitaciones vacías , se le debe indicar esto al cliente, de los contrario se le debe ofrecer la habitación encontrada (vacía), si el cliente la acepta, se le debe reservar, sino la acepta se debe proseguir con la búsqueda.
un saludo a todos.
Bueno, acabo de hacer el programa para quitar tildes a una palabra ingresada por el teclado:
program cambiarAcentuadas;
type
caracteres = set of char;
var
acentuadas: caracteres;
palabra: string;
letra: char;
i: byte;
Begin
acentuadas:= [];
acentuadas:= ['á','é','í','ó','ú'];
write('Escriba la palabra: ');
readln(palabra);
for i:=1 to length(palabra) do
begin
if palabra[i] in acentuadas then
begin
letra:= palabra[i];
delete(palabra,i,1);
case letra of
'á': insert('a',palabra,i);
'é': insert('e',palabra,i);
'í': insert('i',palabra,i);
'ó': insert('o',palabra,i);
'ú': insert('u',palabra,i);
end;
end;
end;
writeln('La palabra sin tildes es: ',palabra);
readln;
End.
También se los he pasado como archivo adjunto a este mensaje.
Espero que les sea de ayuda. Saludos.
Hola compañero Luis, decirte que esta muy bien resuelto tu programa, felicitaciones tienes mucho futuro coo programador, se nota.
El programa que escribí y coloqué en este foro se presentó con algunos caracteres extraños. Aquí está corregido:
program cambiarAcentuadas;
type
caracteres = set of char;
var
acentuadas: caracteres;
palabra: string;
letra: char;
i: byte;
Begin
acentuadas:= [];
acentuadas:= ['á','é','í','ó','u'];
write('Escriba la palabra: ');
readln(palabra);
for i:=1 to length(palabra) do
begin
if palabra[i] in acentuadas then
begin
letra:= palabra[i];
delete(palabra,i,1);
case letra of
'á': insert('a',palabra,i);
'é': insert('e',palabra,i);
'í': insert('i',palabra,i);
'ó': insert('o',palabra,i);
'ú': insert('u',palabra,i);
end;
end;
end;
writeln('La palabra sin tildes es: ',palabra);
readln;
End.
Saludos.
Buena solución, Luis.
Aun así, una ligera mejora: necesitarás usar "insert" y "delete" cuando quieres reemplazar una subcadena por otra. Cuando se trata de una única letra, puedes cambiar su valor simplemente usando corchetes, como en
palabra[i] := 'a';
de modo que el programa podría quedar:
program cambiarAcentuadas2;
type
caracteres = set of char;
var
acentuadas: caracteres;
palabra: string;
i: byte;
Begin
acentuadas:= ['á','é','í','ó','u'];
write('Escriba la palabra: ');
readln(palabra);
for i:=1 to length(palabra) do
begin
if palabra[i] in acentuadas then
begin
case palabra[i] of
'á': palabra[i] := 'a';
'é': palabra[i] := 'e';
'í': palabra[i] := 'i';
'ó': palabra[i] := 'o';
'ú': palabra[i] := 'u';
end;
end;
end;
writeln('La palabra sin tildes es: ',palabra);
readln;
End.
Cordial saludo profesor Nacho cabanes.
Profesor queria preguntarte respecto a la solucion que nos propones en el programa de palabras no acentuadas y es respecto a esta condicion:
if palabra[i] in acentuadas then
es necesaria?, por que? o solo lo haces para mayor control para casos contrarios a acentos en no vocales, que aun asi no se permite en ejecucion dentro de pascal.
Al fin y al cabo pertenezca o no a --> acentuadas:= ['á','é','í','ó','u']; va a seguir con el for a la siguiente letra.
Mil gracias por tu atencion y corregirme si estoy equivocado.
Efectivamente, el "if" no es necesario, porque vas a comprobar uno a uno todos los casos posibles posteriormente.
Aun así, puede ser interesante ponerlo si quieres que el código sea más legible o incluso para ganar algo de velocidad (en teoría), porque si una única condición no se cumple, evitas hacer cinco comparaciones posteriores.
Aun así, digo "en teoría" porque un "if" sencillo siempre va a ser más rápido que un "case", pero el "in" (pertenencia a un conjunto) es una operación mucho más lenta que cuando simplemente comparas si es un valor exacto o si es mayo o menor que algo:
if (palabra[i] >='0') and (palabra[i] <='9') then ...
sería más rápido que
if palabra[i] in cifras then ...
pero en el caso del fuente que propone Luis, no hay tanta elección, porque las letras acentuadas no están justo una detrás de la otra, así que no se puede usar un ">" y un "<" para ganar velocidad.
Hola, nadie ha resuelto el ejercicio del HOTEL? Si alguien sabe cómo hacerlo me ayudaría mucho que publicara el código aquí
Saludos
Que yo sepa, nadie lo había resuelto. Pero no tengas reparo en comenzarlo tú e ir preguntando las dudas que te surjan.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)