[ Foro de Pascal ]

UN PEQUEÑO PERO BUEN RETO COMPAÑEROS...

01-Feb-2012 13:24
oscar gomez
9 Respuestas

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

 

   


29-Feb-2012 11:45
oscar gomez

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.


01-Mar-2012 20:56
Luis Torres (+12)

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.


02-Mar-2012 09:24
oscar gomez

Hola compañero Luis, decirte que esta muy bien resuelto tu programa, felicitaciones tienes mucho futuro coo programador, se nota.


02-Mar-2012 22:03
Luis Torres (+12)

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.


04-Mar-2012 18:56
Nacho Cabanes (+31)

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.
 



06-Mar-2012 11:28
oscar gomez

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.


07-Mar-2012 15:14
Nacho Cabanes (+31)

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.


25-Nov-2013 19:15
Invitado

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


25-Nov-2013 19:49
Nacho Cabanes (+31)

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.)