• Viernes 8 de Noviembre de 2024, 19:21

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Itimag

Páginas: [1]
1
ADA / Re: Programa De Ada
« en: Lunes 7 de Abril de 2008, 22:09 »
Siento no poder alargarme en la explicación (tengo cosas que hacer).

Se trata de introducir cada práctica en un fichero de texto. Para crear un fichero que va a contener texto se utiliza el package ada.text_io y ada.integer_text_io, el cual incluye las funcionalidades para tratar con estos.

Pues bien, lo que debes hacer es crear un fichero de texto que contenga por ejemplo practica1.txt dónde el numero debe cambiar para cada práctica. Esto se puede hacer mediante el uso de la concatenación.

Así se crearía:

create(f,out_file,"practica" & num_practica & ".txt");

Lo que hacemos es crear un fichero f (declarado como f: file_type;) que va a ser de escritura (modalidad out_file) y que va a tener como nombre "practica" seguido del numero de ésta (pedido al usuario por consola) seguido del string ".txt" que es la extensión del fichero.

Una vez creado el fichero debes pedirle al usuario que te introduzca datos en la consola y tu los introduces en el fichero de texto.

Para introducir datos se utiliza el put(f,car);. Al igual que antes de introducir los datos que va a introducir el usuario puedes añadir un Put(f,"Número de práctica:");

Así tu introduces esto último en el fichero, le pides al usuario el usuario y lo introduces en el fichero de texto.

Así para todos los datos que se piden.


Luego tendrás que hacer otras funcionalidades, ej: "práctica con mayor número de aprobados" en la que tendrás que abrir el fichero en modalidad de lectura (in_file); y buscar la posición donde hayas introducido "Puntuación obtenida por los alumnos:" . A partir de ahí, vas recorriendo el fichero buscando las puntuaciones y las aprovadas las vas metiendo en un contador.

Piensa que tendrás que comparar todos los ficheros que se han creado y por lo tanto, hacer un bucle e ir guardando todos los resultados para cada fichero (en un array por ejemplo) para luego poder comparar los datos obtenidos y saber que resultado tienes que dar.


Esto es todo lo que te voy a decir por hoy. Suerte y un saludo.

2
ADA / Re: Mayusculas Y Minusculas
« en: Sábado 29 de Marzo de 2008, 19:16 »
Yo haría un array('a'..'z') de tipo character --> type alfabeto is array(1..26) of character; .
A partir de aquí, declaramos dos variables de este tipo: uno para las mayúsculas y otro para las minúsculas.

Es decir:
Mayusculas: alfabeto:=('a','b','c','d','e',...,'z');
Minusculas: alfabeto:=('A','B','C','D','E',...,'Z');

Ahora hacemos la  función que nos compara los carácteres:
Código: Text
  1.  
  2. funcion igual(A,B: in character) return boolean is
  3.      type alfabeto is array(1..26) of character;
  4.      mayusculas: alfabeto:=("abcdefghijklmnopqrstuvwxyz"); -- Es mas rápido escribirlo así.
  5.      minusculas: alfabeto:=("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
  6.  
  7.      I:integer:=1;
  8.      num_letra1,num_letra2:integer;
  9.  
  10. begin
  11.   while I<26 loop
  12.       if A=mayusculas(I) or A=minusculas(I) then
  13.            num_letra1:=I;
  14.       end if;
  15.       if B=mayusculas(I) or A=minusculas(I) then
  16.          num_letra2:=I;
  17.       end if;
  18.       I:=I+1;
  19.    end while;
  20.    if num_letra1 = num_letra_2 then
  21.        return true;
  22.    else
  23.        return false;
  24.    end if;
  25. end igual;
  26.  
  27.  

Creo que así funcionaria. No lo he probado. Es una función que pasados el carácter de la palabra 1 y el caracter de la palabra 2, te los compara y si son iguales te devuelve true, considerando como iguales A y a

De esta forma, si quieres comparar palabras, hacemos otra función que te devuelva si son iguales:

Código: Text
  1.  
  2. obtener_caracteres_palabras; -- Ej: caracter1:=caracter(I) en el caso de que lo tengamos en un array.
  3. Mientras no palabra1_acabada y no palabra2_acabada y igual(caracter1,caracter2) entonces
  4.   obtener_caracteres&#59;
  5. fin mientras;
  6. si palabra1_acabada=palabra2_acabada y ultimos_caracteres_palabras_iguales entonces
  7.    devolver true;
  8. sino
  9.    devolver false;
  10. fin si;
  11.  
  12.  

3
ADA / Re: Rango De Numeros Reales
« en: Lunes 25 de Febrero de 2008, 14:22 »
nunca lo había oido y dudo que se pueda hacer ya que eso significaría reservar infinita memoria para esos datos (eso piensa mi lógica)  :lol: .

Si alguien lo sabe, que lo diga  :P .

Un saludo

4
ADA / Re: Mostrar Array
« en: Miércoles 20 de Febrero de 2008, 22:20 »
puedes hacerlo de 1000 o incluso hasta el integer'last, que es el valor positivo más alto que permite utilizar ada.

5
ADA / Re: Mostrar Array
« en: Lunes 18 de Febrero de 2008, 13:47 »
Existen dos paquetes que incluyen el put para visualizar cosas:

El ada.text_io (el que creo que estas usando) y el ada.integer_text_io (el que debes usar). La principal diferencia entre estos 2 reside en que el primero se utiliza para visualizar en pantalla algún carácter mientras que el segundo se utiliza para visualizar algún numero.

Esto significa que para visualizar un array de numeros, no tienes porqué pasarlos a caracter y bastará un simple for para visualzar todo el array.

La estructura de un for (significa "para") es la siguiente:
Código: Text
  1.  
  2. for I in 1..max loop
  3.    instrucciones;
  4. end loop;
  5.  
  6.  

I es una variable (podemos darle la letra que queramos) que únicamente va a ser utilizable dentro del bucle que forma el for  y esta iniciada por el valor 1 tal y como indica el rango [1..max]. La variable I se irá autoincrementntando de 1 en 1 hasta llegar al valor que indica la variable tipo integer llamada "max" o bien la podemos substituir por el valor que queramos. Ejemplo:
Código: Text
  1. for I in 1..100 loop
  2.  


Bien, pasemos ahora a la estructura del array. Como debes saber un array es como una tabla en la que existen un numero determinado de posiciones libres para almacenar un carácter, numero, registro, etc. Veamos un ejemplo de un array definido como lo siguiente:

Código: Text
  1. type numeros is array(1..9) of integer;
  2. num: constant numeros:=(1,1,1,1,1,1,1,1,1);
  3.  
  4.  

Aquí una foto gráfica de esta estructura que acabamos de declarar:
http ://itimag.net/usr/Dibujo.GIF

(ver imagen adjunta o la de la url que he puesto de mala manera ya que no me deja poner imagenes  :(  :( .

El numero indicado abajo de la imagen indica la posición del array. Mientras que los 1 que hay dentro de la tabla es el contenido de la variable num declarada como variable de tipo numeros, el cual es un array de 1..9 de enteros.

Pues bien, ahora, para visualizar este array de numeros, debemos hacer un for que empezará por la posición uno hasta la 9. De esta forma recorreremos todo el array.
Ya sabemos como vamos a recorrer todas las posiciones del array, ahora nos queda visualizar el contenido de cada una de ellas. Esto significa que en cada iteración del bucle, haremos un put de lo que hay en la posición del array que nos esta indicando la variable I del for.

Por lo tanto, el bucle resultante nos queda así:
Código: Text
  1. for I in 1..9 loop
  2.    put(num(I)); -- Para visualizarlo usamos el package ada.integer_text_io
  3. end loop;
  4.  
  5.  

Ya, para acabar, el programa resultante es el siguiente:
Código: Text
  1.  
  2. with Ada.Integer_Text_Io; use Ada.Integer_Text_Io;
  3.  
  4. procedure visu_array is
  5.  
  6. type numeros is array(1..9) of integer;
  7. num: constant numeros:=(1,1,1,1,1,1,1,1,1);
  8.  
  9. begin
  10. For I in 1..9 loop
  11.   put(num(I));
  12. end loop;
  13. end visu_array;
  14.  
  15.  

Este programa dará como resultado 1  1  1  1  1  1  1  1  1.

Creo que con esta explicación te habrá quedado claro. Un saludo.  :devil:

6
ADA / Re: ¿para Qué Sirven Estos Operadores?
« en: Lunes 18 de Febrero de 2008, 12:58 »
muchas gracias a los 2. Ya lo he entendido.  :smartass:

7
ADA / Re: ¿para Qué Sirven Estos Operadores?
« en: Domingo 17 de Febrero de 2008, 22:02 »
buscando en el libro de ada que hay en wikibooks, he encontrado que este tipo de operadores se llaman de corto-circuito y sobre ellos se cita lo siguiente:

<< Para los operadores lógicos existen versiones para minimizar las evaluaciones (short-circuit). Es decir, se evalúa primero el operando de la izquierda y después, sólo si es necesario para determinar el resultado, el de la derecha:

    * Conjunción: and then
    * Disyunción inclusiva: or else >>

Me gustaría ver algún ejemplo de su uso.  A mi no me queda del todo claro.

8
ADA / Re: ¿para Qué Sirven Estos Operadores?
« en: Domingo 17 de Febrero de 2008, 20:09 »
La verdad es que estos operadores así como los indicas no los he estudiado ni conocía de su existencia.

No serán el operador "and" y el "or" ?? El else y el then pertenece a los bucles condicionales.

Un bucle condicional tiene la siguiente estructura:

Código: Text
  1.  
  2. if .... then
  3.    instrucciones;
  4. si no
  5.    instrucciones;
  6. end if;
  7.  
  8.  

Los puntos suspensivos pueden contener varias variables unidas por operadores lógicos como el "or" o el "and".

Un ejemplo sería el siguiente:

Código: Text
  1.  
  2. if caracter1='a' and caracter2='b' and caracter3='c'  then -- Entra si el caracter 1 es a, el caracter 2 es b y el caracter 3 es c
  3.   put(&#34;Tenemos abc&#34;);
  4. else
  5.   if caracter1='d' or caracter2='e' then -- Entra si el caracter 1 es la 'd' o si es una 'e'
  6.      put(&#34;tenemos una d o una e&#34;);
  7.   end if;
  8. end if;
  9.  
  10.  
  11.  

La idea principal es que cuando tenemos "and", para entrar en un bucle (while) o al if (en este caso), se deben cumplir todas las condiciones (caracter1="a" and caracter2="b" and caracter3="c"). En cambio, con un or basta que se cumpla una de las condiciones para que entremos en el bucle o al if (en este caso).

No se si me he explicado bien. Si no lo has entendido, no dudes en decirmelo e intentaré explicarlo de alguna forma mejor o más detallada.

Un saludo.

9
ADA / Re: Mostrar Array
« en: Viernes 15 de Febrero de 2008, 14:00 »
para visualizar un array de numeros, debes declarar num como un array de integers y usar el paquete ada.integer_text_io en vez del text_io.

Código: Text
  1.  
  2. with Ada.Integer_Text_Io; use Ada.Integer_Text_Io;
  3.  
  4. procedure visu_array is
  5.  
  6. type numeros is array(1..10) of integer;
  7. num:constant numeros:=(0,1,2,3,4,5,6,7,8,9); -- Esto son numeros interpretados como integers.
  8.  
  9. begin
  10. -- Para visualizarlos, haremos un simple for.
  11. For I in 1..10 loop
  12.    put(num(I),2); -- El ( ,2) es para disminuir los espacios que deja en la visualización.
  13. end loop;
  14. end visu_array;
  15.  
  16.  


Debes diferenciar un número interpretado como carácter (va con comillas) o un numero interpretado como integer( va sin comillas).

Cuando pidas que te indroduzcan los numeros, debes obtener numeros en vez de caracteres. Si los obtienes como carácteres deberás hacer una función que te devuelva al programa principal ese carácter como integer. Esto lo puedes hacer con 1 array de caracteres; buscas de forma secuencial el carácter y una vez encontrado, retornas el índice del array, el cual corresponde con el carácter pero en numero.

Espero haberte servido de ayuda. Un saludo.

10
ADA / Re: Mostrar Array
« en: Jueves 14 de Febrero de 2008, 21:42 »
significa lo mismo. Como lo he puesto yo es mas corto.

11
ADA / Re: Mostrar Array
« en: Jueves 14 de Febrero de 2008, 20:16 »
Es muy sencillo.

Imagina que tienes el siguiente programa:


with Ada.Text_Io; use Ada.Text_Io;

procedure visu_array is

type numeros is array(1..10) of character;
num:constant numeros:=("0123456789"); -- Esto son numeros interpretados como caracteres.

begin
-- Para visualizarlos, haremos un simple for.
For I in 1..10 loop
   put(num(I));
end loop;
end visu_array;


Esto es todo. Tambien podríamos declarar estos numeros como un string y realizar el for para visualizarlos
Num: constant String:="0123456789";


Espero haberte servido de ayuda. Un saludo. Si tienes más dudas, no dudes en preguntar.

12
ADA / Re: Principiante Busca Maestro
« en: Jueves 7 de Febrero de 2008, 18:46 »
En mi blog he empezado a redactar un curso de programación en ada para iniciados.
De momento he publicado muy poco ya que estoy en época de exámenes pero a partir de la semana que viene seguiré publicandolo.

No hay problemas en responder a tus dudas. Todo lo contrario, me ayudarás a modificar aquellas cosas que no se entienden.


Un saludo:

P.D: el blog esta en la firma.
P.D2: espero que esto no se considere spam  :P

13
ADA / Re: Agenda Telefonica
« en: Domingo 30 de Diciembre de 2007, 22:08 »
de nada.

14
ADA / Re: Agenda Telefonica
« en: Sábado 29 de Diciembre de 2007, 20:52 »
yo definiría lo siguiente:

type codigo is array(1..4) of character; -- Aquí se almacena un código de 4 caracteres (no lo especifica la práctica) que corresponde al tipo de telefono (movil ("MOVI"), casa ("CASA") o trabajo ("WORK")).

type num_telf is array(1..9) of character; -- Aquí almacenaremos los nº de telefono como character.

type Reg_telf is record
     telf: integer; -- El tipo num_telf que contiene el numero de telefono;
     cod: codigo; -- El tipo codigo que contiene el código que indica casa, trabajo o movil;
end record;

-- Este registro que hemos declarado justo antes contiene 2 campos: el nº de telefono seguido del código que lo distingue.

pues bien, ahora creamos un array de registros, donde, en cada posición de este array se almacenará un nº de telefono con el código de este.

type num_telefonos is array (1..20) of Reg_telf;

Ahora nos falta crear otro arrays de registros, dónde, en cada posición del array, habrá el nuevo registro que vamos a declarar y que contendrá el nombre de la persona seguido de todos sus numeros de telefono.

Primero, declaramos el array donde se almacenará el nombre de la persona:

type nombre_persona is array (1..100) of character;

Y ahora pasamos a declarar el nuevo registro que lo llamaremos reg_agenda.

type reg_agenda is record
    nombre: nombre_persona;
    telefonos: num_telefonos;
end record;


finalmente, declaramos el array que contendrá en cada posición, el registro reg_agenda que contiene el nombre de la persona junto a todos sus telefonos:

type tipo_agenda is array (1..Max) of reg_agenda;


Esta es toda la estructura del programa. Creo que es un poco demasiado densa. Haver si a alguien se le ocurre algo mejor. Podríamos eliminar el reg_telf si metes en un mismo array el numero de telefono seguido del código.


Gracias por publicar aquí tu problema. Espero que me haya servido a mi también para aprender y por eso me gustaría que si alguien te enseña algo más optimo, me lo mostraras.

Un Saludo  :)

P.D: intenta implementar la función ;) .

Páginas: [1]