delphi 2

Post on 12-Aug-2015

222 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Delphi 7 Fermí Vilà 55

II . – Procedimientos y Funciones

La “Programación Estructurada” se basa en dividir el programa en bloques más pequeños, buscando una mayor legibilidad, y más comodidad a la hora de corregir o ampliar.

Dichos “bloques” pueden ser de dos tipos: procedimientos (procedure) y funciones (function).

La diferencia entre ellos es que un procedimiento ejecuta una serie de acciones que están relacionadas entre sí, y no devuelve ningún valor, mientras que la función sí que va a devolver valores.

a) Function

- Escribe la siguiente aplicación “tipo cónsola”:

program Project045;

{$APPTYPE CONSOLE}

uses SysUtils;

var n1,n2:integer;

function potencia(a,b:integer):integer; var i:integer; temp:integer; begin temp:=1; for i:=1 to b do temp:=temp*a; potencia:=temp; end;

begin writeln('Potencia de un número entero'); writeln; writeln('Introduce el primer número entero (base de la potencia): '); readln(n1); writeln('Introduce el exponente (también entero)'); readln(n2); writeln(n1,' elevado a ',n2,' vale ',potencia(n1,n2)); readln;

Delphi 7 Fermí Vilà 56

end.- Grábalo en TuCarpeta con el nombre Project045.dpr y ejecútalo.

- Estudio del Project045:• Observa la estructura de una función:

Function potencia(a,b: integer): integer;Var …Begin … … potencia:= …end;

• Observa de qué forma llamamos a la función: potencia(n1 , n2)Es decir: los parámetros de entrada son n1, n2 (números enteros). El resultado o parámetro de salida de la función “potencia” no es más que “n1 elevado a n2” (multiplicar n2 veces el número n1 consigo mismo).

b) Procedure

- Escribe el siguiente programa tipo cónsola:

program Project046;

{$APPTYPE CONSOLE}

uses SysUtils;

procedure saludo(nom:string); begin writeln('Hola ',nom,' qué tal?'); end;

begin writeln; saludo('Pepe'); readln;end.

- Grábalo como Project046.dpr y ejecútalo.

- Observa la diferencia entre una “function” y un “procedure”: aparte de nombrarlos de forma distinta, la única diferencia estriba en que el “procedure” no devuelve ningún valor.

Delphi 7 Fermí Vilà 57

c) Adaptación de la función “potencia” para números reales.

Ante todo necesitamos investigar las funciones predefinidas: exp() y ln()

- Escribe el siguiente programa “tipo cónsola”:

program Project047;

{$APPTYPE CONSOLE}

uses SysUtils;

begin writeln('e elevado a 1 es ',exp(1)); writeln('e elevado a 3 es ',exp(3)); writeln('e elevado a 1/2 es ',exp(0.5)); writeln('ln(1) es ',ln(1)); writeln('ln(2.71) es ',ln(2.71)); writeln('3 elevado a 5 es ',exp(5*ln(3))); readln;end.

- Grábalo como Project047.dpr y ejecútalo.

Ahora sí, podremos programar una “function” para calcular la potencia de números reales.

- Escribe el siguiente programa MS/DOS:

program Project048;

{$APPTYPE CONSOLE}

uses SysUtils;

function potenciaReal(a,b:real):real; begin potenciaReal:=exp(b*ln(a)); end;

var num1,num2:real;

begin write('Escribe la base de la potencia: '); readln(num1);

Delphi 7 Fermí Vilà 58

write('Escribe el exponente: ');

readln(num2); writeln(num1:15:5,' elevado a ',num2:15:5,' es ',potenciaReal(num1,num2):15:5); readln;end.

- Grábalo como Project048.dpr y ejecútalo varias veces para comprobar que funciona.

d) “Function” y “Procedure” en una aplicación windows

- Menú File – New - Application

- Inserta en el formulario, un “button” y un “Memo” (paleta Standard), de forma que tengas aproximadamente:

- Clic-clic en el [Button1] y escribe el siguiente procedimiento de evento:

procedure TForm1.Button1Click(Sender: TObject);var num1,num2,res:real; salida:string; opc:string[1];begin opc:='S';salida:=''; while (opc='S') Or (opc='s') do begin num1:=StrToFloat(InputBox('Cálculo de Potencias','Introduce el valor de la base de la potencia','')); num2:=StrToFloat(InputBox('Cálculo de Potencias','Introduce el valor del exponente','')); res:=potenciaReal(num1,num2); salida:=salida+FloatToStr(num1)+' elevado a '+FloatToStr(num2)+' es '+ FloatToStr(res)+#13+#10; opc:=InputBox('Repetir','¿Quieres calcular otra potencia (S/N)?','');

Delphi 7 Fermí Vilà 59

end; Memo1.Text:=salida;end;

- Desde la ventana de código del formulario, donde acabas de escribir el procedimiento de evento anterior, localiza el apartado public y escribe en él:

function potenciaReal(a,b:real):real;

Y en el apartado implementation, escribe:

function TForm1.potenciaReal(a,b:real):real; begin potenciaReal:=exp(b*ln(a)); end;

- Ejecuta el programa. Si quieres calcular muchas potencias, seria conveniente incluir en el componente Memo una barra de desplazamiento vertical, de la siguiente forma:

• Selecciona el Meno1• En el Inspector de Objetos, cambia la propiedad ScrollBars por ssVertical

- Graba el programa como Unit049.pas – Project049.dpr

e) Function “raíz cúbica”

- Menú FileNew

Application

- Inserta en el formulario, un “button” y un “memo” (con la propiedad ScrollBars = ssVertical)

- Clic-clic en el [Button1] y escribe el siguiente procedimiento de evento:

procedure TForm1.Button1Click(Sender: TObject);var num:real;begin num:=StrToFloat(InputBox('Raíz Cúbica','Escribe un número','')); Memo1.Text:='La Raíz Cúbica de '+FloatToStr(num)+' es '+FloatToStr(RaizCubica(num));end;

- Escribe en el Módulo del Formulario:• Apartado public:

function RaizCubica(a:real):real;

• Apartado implementation:function TForm1.RaizCubica(a:real):real;

Delphi 7 Fermí Vilà 60

begin RaizCubica:=exp((1/3)*ln(a)); end;

- Grábalo como Unit050.pas – Project050.dpr y ejecútalo.

f) Programa con dos “functions”

- Menú File – New - Application

- Inserta en el formulario, un “button” y un “Memo” (con la propiedad ScrollBars = ssVertical).

- Clic – clic en [Button1] y escribe el siguiente procedimiento de evento:

procedure TForm1.Button1Click(Sender: TObject);var num1,num2:real; opcion:string[1]; torni:string[1]; salida:string;begin torni:='S'; salida:=''; while (torni='S') Or (torni='s') do begin opcion:=InputBox('Sumar - Multiplicar','¿Qué quieres sumar o multiplicar (S/M)?',''); num1:=StrToFloat(InputBox('Entrada de Datos','Escribe el primer número','')); num2:=StrToFloat(InputBox('Entrada de Datos','Escribe el segundo número','')); if (opcion='S') Or (opcion='s') then salida:=salida+'La suma de '+FloatToStr(num1)+' y '+FloatToStr(num2)+' es '+FloatToStr(Suma(num1,num2))+#13+#10; if (opcion='M') Or (opcion='m') then salida:=salida+'El producto de '+FloatToStr(num1)+' y '+FloatToStr(num2)+' es '+FloatToStr(Producto(num1,num2))+#13+#10; torni:=InputBox('Repetir','¿Quieres volver a calcular (S/N)?',''); end; Memo1.Text:=salida;end;

- Escribe en el apartado public:function Suma(a,b:real):real;function Producto(a,b:real):real;

- Escribe en el apartado implementation:function TForm1.Suma(a,b:real):real; begin Suma:=a+b; end;

function TForm1.Producto(a,b:real):real; begin

Delphi 7 Fermí Vilà 61

Producto:=a*b; end;

- Grábalo como Unit051.pas – Project051.dpr y ejecútalo.

g) Programa que calcula la letra del NIF

Según el resto de la división entera del DNI con el número 23, corresponderá una letra u otra en el NIF, de la siguiente forma:

Resto Letra Resto Letra0 T 12 N1 R 13 J2 W 14 Z3 A 15 S4 G 16 Q5 M 17 V6 Y 18 H7 F 19 L8 P 20 C9 D 21 K

10 X 22 E11 B

- Menú File – New - Application

- Inserta en el formulario, un “button” y un “memo”, con la propiedad ScrollBars = ssVertical

- Clic-clic en el [Button1] y escribe:

procedure TForm1.Button1Click(Sender: TObject);var numero:integer; torni,salida:string;begin torni:='S'; salida:=''; while (torni='S') Or (torni='s') do begin numero:=StrToInt(InputBox('DNI','Escribe el DNI','')); salida:=salida+'DNI = '+IntToStr(numero)+' - NIF = '+IntToStr(numero)+NIF(numero)+#13+#10; torni:=InputBox('Repetir','¿Quieres calcular otro NIF (S/N)?',''); end; Memo1.Text:=salida;end;

- Escribe en:• El apartado public:

function NIF(dni:integer):string;• El apartado implementation:

Delphi 7 Fermí Vilà 62

function TForm1.NIF(dni:integer):string;const letras:string[23]='TRWAGMYFPDXBNJZSQVHLCKE';begin NIF:=letras[(dni MOD 23)+1];end;

- Grábalo como Unit052.pas – Project052.dpr y pruébalo.

h) Parámetro por valor

- Menú File – New - Application

- Inserta en el formulario un “ button” y un “ memo “.

- Escribe el siguiente procedimiento de evento:

procedure TForm1.Button1Click(Sender: TObject);var dato:integer;begin salida:=''; dato:=2; salida:=salida+'Inicialmente el dato es = '+IntToStr(dato)+#13+#10; modifica(dato); salida:=salida+'Después de pasar por el procedure, dato = '+IntToStr(dato)+#13+#10; Memo1.Text:=salida;end;

- Escribe en el apartado public del módulo:salida:string;procedure modifica(vari:integer);

- Escribe en el apartado implementation del módulo:procedure TForm1.modifica(vari:integer); begin vari:=3; salida:=salida+'En el interior del procedure, el dato es = '+IntToStr(vari)+#13+#10; end;

- Grábalo como Unit053.pas – Project053.dpr y pruébalo.

- Si todo funciona correctamente aparece:

Delphi 7 Fermí Vilà 63

- Estudio del Project053:• Observa que la variable “salida” la utilizamos en los dos “procedures”, por esta razón es

necesario declararla en el apartado public del módulo. De esta forma (variable pública), dicha variable será reconocida por cualquier procedimiento y/o función del mismo módulo.

• El procedimiento “modifica”, toma una variable de tipo entero, le asigna el valor 3 y la escribe. Lógicamente este procedimiento siempre hará lo mismo “escribirá un 3”.

• Al hacer clic en el [Button1] se ejecuta en primer lugar el procedure Button1Click y éste asigna a “dato” el número 2.

• Seguidamente escribimos el valor de este dato, o sea 2.• Llamamos al procedimiento modifica, por lo tanto escribirá 3.• Volvemos al procedure Button1Click y escribimos de nuevo el valor de “dato”: debería

escribir 3, pero contra toda lógica escribe 2.

La razón es la siguiente:

Las modificaciones que hagamos a la variable “dato” dentro del procedimiento modifica, sólo son válidas mientras estemos dentro del procedimiento. Esto se llama pasar un parámetro por valor. Si realmente queremos modificar el parámetro hemos de añadir la palabra “var” delante del parámetro, como veremos en el siguiente programa.

i) Parámetro por referencia

- Continuando con el programa anterior, en la línea: procedure modifica(vari: integer) del apartado public, añade las letras var delante del nombre de la variable, de forma que nos quede:

procedure modifica(var vari:integer);

- Haz lo mismo en el apartado implementation, es decir, que tendremos el “procedure”:

procedure TForm1.modifica(var vari:integer); begin vari:=3; salida:=salida+'En el interior del procedure, el dato es = '+IntToStr(vari)+#13+#10; end;

Delphi 7 Fermí Vilà 64

- Graba el módulo con el nombre Unit054.pas y el proyecto como Project054.dpr y ejecútalo. Ahora sí que en la tercera línea, el programa nos escribe un 3 y no un 2.

Decimos que pasamos un parámetro por referencia. El nombre “referencia” alude a que no se pasa realmente al procedimiento o función el valor de la variable, sino la dirección de memoria en la que se encuentra, dirección de memoria que se denomina puntero.

j) Recursividad

El factorial de un número “n”, es el producto del número “n”, por sus sucesivos números disminuidos en una unidad, hasta llegar a uno, es decir:

Factorial de n = n(n-1)(n-2)(n-3) … 2.1

Por ejemplo, el factorial de 5, que matemáticamente se expresa 5! Es 120, porque 5.4.3.2.1 = 120

- Vamos a hacer un programa que calcule el factorial …Menú File

NewApplication

- Inserta en el formulario, un “button” y un “memo” (con la propiedad ScrollBars = ssVertical).

- Escribe el siguiente procedimiento de evento:

procedure TForm1.Button1Click(Sender: TObject);var i,n,fact:integer; salida:string; opc:string[1];begin salida:='Factorial de un número'+#13+#10; salida:=salida+'======================='+#13+#10; opc:='S'; while (opc='S') Or (opc='s') do begin n:=StrToInt(InputBox('Factorial de un número','Introduce un número entero','')); fact:=1; for i:=1 to n do fact:=fact*i; salida:=salida+#13+#10; salida:=salida+'El Factorial de '+IntToStr(n)+' es '+IntToStr(fact)+#13+#10; opc:=InputBox('Otro factorial','¿Quieres calcular otro factorial (S/N)?',''); end; Memo1.Text:=salida;

Delphi 7 Fermí Vilà 65

end;

- Grábalo como Unit055.pas – Project055.dpr y ejecútalo.

- Si intentas calcular el factorial a partir del número 17, el programa anterior no nos sirve, ya que 17! Es mayor que el máximo número integer. Vamos a calcular el factorial de otra manera: forma recursiva …

- Menú File – New - Application

- Inserta en el formulario, un “button” y un “memo” con la propiedad “ScrollBars = ssVertical”

- Escribe el siguiente procedimiento de evento:

procedure TForm1.Button1Click(Sender: TObject);var n:integer; salida:string; opc:string[1];begin salida:='Factorial de un número'+#13+#10; salida:=salida+'======================='+#13+#10; opc:='S'; while (opc='S') Or (opc='s') do begin n:=StrToInt(InputBox('Factorial de un número','Introduce un número entero','')); salida:=salida+#13+#10; salida:=salida+'El Factorial de '+IntToStr(n)+' es '+IntToStr(factorial(n))+#13+#10; opc:=InputBox('Otro factorial','¿Quieres calcular otro factorial (S/N)?',''); end; Memo1.Text:=salida;end;

- Escribe en el apartado public del “Unit”:function factorial(x:integer):integer;

- Escribe en el apartado implementation del módulo:function TForm1.factorial(x:integer):integer; begin if x=1 then factorial:=1 else factorial:=x*factorial(x-1); end;

- Grábalo como Unit056.pas – Project056.dpr y ejecútalo.

- Un procedimiento o función decimos que es recursivo, si se llama a si mismo.

Delphi 7 Fermí Vilà 66

k) Función recursiva que calcula el producto de dos enteros positivos…

- Menú File – New - Application

- Inserta en el formulario, un “button” y un “memo”, con la propiedad “ScrollBars = ssVertical”.

- Escribe:

procedure TForm1.Button1Click(Sender: TObject);var num1,num2:integer; opc:string[1]; salida:string;begin salida:='Producto de dos enteros positivos'+#13+#10; salida:=salida+'utilizando una función RECURSIVA'+#13+#10; salida:=salida+'=================================='+#13+#10; opc:='S'; while (opc='S') Or (opc='s') do begin num1:=StrToInt(InputBox('Producto Recursivo','Escribe un número entero positivo','')); num2:=StrToInt(InputBox('Producto Recursivo','Escribe otro número entero positivo','')); salida:=salida+'El producto recursivo de '+IntToStr(num1)+' y '+IntToStr(num2)+' es '+IntToStr(prod(num1,num2))+#13+#10; opc:=InputBox('Otro Producto','¿Quieres calcularotro producto recursivo (S/N)?',''); end; Memo1.Text:=salida;end;

- Escribe en el apartado public del “Unit”:function prod(a,b:integer):integer;

- Escribe en el apartado implementation:function TForm1.prod(a,b:integer):integer; begin if b=1 then prod:=a else prod:=a+prod(a,b-1); end;

Delphi 7 Fermí Vilà 67

- Grábalo como Unit057.pas – Project057.dpr y ejecútalo

l) Función que calcula una potencia de forma recursiva

- Menú File – New - Application

- Inserta en el formulario, un “button” y un “memo”, con la propiedad “ScrollBars = ssVertical”.

- Escribe:

procedure TForm1.Button1Click(Sender: TObject);var num1,num2:integer; opc:string[1]; salida:string;begin salida:='Potencia RECURSIVA'+#13+#10; salida:=salida+'====================='+#13+#10; opc:='S'; while (opc='S') Or (opc='s') do begin num1:=StrToInt(InputBox('Potencia Recursiva','Escribe la base de la potencia','')); num2:=StrToInt(InputBox('Potencia Recursiva','Escribe el exponente','')); salida:=salida+IntToStr(num1)+' elevado a '+IntToStr(num2)+' es '+IntToStr(pot(num1,num2))+#13+#10; opc:=InputBox('Otra Potencia','¿Quieres calcular otra potencia recursiva (S/N)?',''); end; Memo1.Text:=salida;end;

- Escribe en el apartado public del “Unit”:function pot(a,b:integer):integer;

- Escribe en el apartado implementation:function TForm1.pot(a,b:integer):integer; begin if b=1 then pot:=a else pot:=a*pot(a,b-1); end;

- Grábalo como Unit058.pas – Project058.dpr y ejecútalo.

Delphi 7 Fermí Vilà 68

m) “Procedure” que dibuja cuadrados

- Menú File – New - Application

- Inserta en el formulario, un “button” y un “memo”, con la propiedad “ScrollBars = ssVertical”.

- Escribe:

procedure TForm1.Button1Click(Sender: TObject);var j,num,n:integer;begin

sa:=''; num:=StrToInt(InputBox('Cuantos cuadrados quieres dibujar','','')); for j:=1 to num do begin n:=StrToInt(InputBox('Longitud del lado=','','')); Cuadrado(n); sa:=sa+#13#10+#13#10; end; Memo1.Text:=sa;end;

- Escribe en el apartado public del “Unit”:sa:string;procedure Cuadrado(n:integer);

- Escribe en el apartado implementation del módulo:procedure TForm1.Cuadrado(n:integer);var i,j:integer;begin for i:=1 to n do begin for j:=1 to n do sa:=sa+'o'; sa:=sa+#13#10; end;end;

- Grábalo como Unit059.pas – Project059.dpr y ejecútalo

Delphi 7 Fermí Vilà 69

Observa que la variable “sa” es pública, ya que la utilizamos en los dos “procedures”: Button1Click y Cuadrado, por esta razón hemos de declararla en el apartado public del “unit”.

n) Aplicación windows que escribe los números pares entre dos números cualesquiera e indica los que son múltiplos de 3.

La idea del programa es hacer un procedimiento que determine si un número es múltiplo de 3 o no.

- Menú File – New - Application

- Inserta en el formulario, un “button” y un “memo”, con la propiedad “ScrollBars = ssVertical”.

- Escribe:

procedure TForm1.Button1Click(Sender: TObject);var num1,num2,i:integer;beginnum1:=StrToInt(InputBox('Numero menor: ','Escribe el primer número entero',''));num2:=StrToInt(InputBox('Entero mayor: ','Escribe el segundo número entero',''));sa:='';for i:=num1 to num2 do if (i mod 2=0) then begin sa:=sa+IntToStr(i)+' , '; Multiplo3(i); end;Memo1.Text:=sa;end;

- En el área “public” del “unit”, escribe:sa:string;procedure Multiplo3(x:integer);

- En el área “implementation” del “unit” escribe:procedure TForm1.Multiplo3(x:integer);begin if x mod 3 =0 then sa:=sa+'(Multiplo de 3),';end;

Delphi 7 Fermí Vilà 70

- Guarda el programa como Unit060.pas – Project060.dpr y ejecútalo.

o) Función que calcula el máximo común divisor de dos números

- Menú File – New - Application

- Inserta en el formulario, un “button” y un “memo”, con la propiedad “ScrollBars = ssVertical”.

- Escribe:

procedure TForm1.Button1Click(Sender: TObject);vara,b,sol:integer;begina:=StrToInt(InputBox('Escribe un numero','',''));b:=StrToInt(InputBox('Escribe otro numero','',''));sol:=MCD(a,b);Memo1.Text:='El MCD es '+IntToStr(sol);end;

- En el área public del módulo, escribe:function MCD(x,y:integer):integer;

- En el área implementation escribe:function TForm1.MCD(x,y:integer):integer;varaux,resto:integer;beginresto:=0;if (x<y) then begin aux:=x; x:=y; y:=aux; end;if (x mod y)=0 then resto:=y;while ((x mod y)<>0) do begin resto:=x mod y; x:=y; y:=resto; end;MCD:=resto;end;

Delphi 7 Fermí Vilà 71

- Grábalo como Unit061.pas – Project061.dpr y pruébalo para los casos:MCD( 7 , 3 ) = 1 MCD( 6 , 10 ) = 2MCD( 12 , 4 ) = 4 MCD( 42 , 70 ) = 14

- Para nuestra “function MCD” utilizamos el llamado algoritmo de Euclides. Repasemos este algoritmo, calculando el MCD de 36 y 48:1º) Necesitamos saber el número mayor (por esta razón en nuestro programa utilizamos la variable auxiliar aux2º) Divido el mayor entre el menor: 48/36 = 1 y resto 123º) Divido el divisor de antes entre el resto (de antes): 36/12 = 3 y resto 04º) Continuamos dividiendo divisor/resto, hasta que la división sea exacta.5º) El MCD es el último resto distinto de cero, en nuestro ejemplo, 12

p) Función de Euler

Dado un número entero positivo A, su función de Euler es el número de enteros positivos inferiores a A y que además son primos con A

Dos números son primos si su máximo común divisor es 1. Por lo tanto deberemos utilizar la función del programa anterior …

- Menú File – New - Application

- Inserta un button y un memo

- Código:procedure TForm1.Button1Click(Sender: TObject);varnum:integer;beginsa:='';num:=StrToInt(InputBox('Función de Euler del número','',''));sa:=sa+'Función de Euler del número'+IntToStr(num)+#13#10;Euler(num);Memo1.Text:=sa;end;

- En public:sa:string;function MCD(x,y:integer):integer;function Euler(x:integer):integer;

- En implementation:function TForm1.MCD(x,y:integer):integer;var

Delphi 7 Fermí Vilà 72

aux,resto:integer;beginresto:=0;if (x<y) then begin aux:=x; x:=y; y:=aux; end;if (x mod y)=0 then resto:=y;while ((x mod y)<>0) do begin resto:=x mod y; x:=y; y:=resto; end;MCD:=resto;end;

function TForm1.Euler(x:integer):integer;vari,contador:integer;begin

contador:=0;for i:=1 to x-1 do if MCD(x,i)=1 then begin contador:=contador+1; sa:=sa+IntToStr(i)+','; end;sa:=sa+#13#10+'N. de Euler= '+IntToStr(contador);Euler:=contador;end;

- Grábalo como Unit062.pas – Project062.dpr y pruébalo.

q) Función que determina si un año es bisiesto o no

- Menú File – New - Application

- Inserta un button y un memo

- Código:procedure TForm1.Button1Click(Sender: TObject);varano:integer;

Delphi 7 Fermí Vilà 73

beginano:=StrToInt(InputBox('Año','',''));if bisiesto(ano) then Memo1.Text:='El Año '+IntToStr(ano)+' es bisiesto'else Memo1.Text:='El Año '+IntToStr(ano)+' no es bisiesto';end;

- En public:function bisiesto(x:integer):boolean;

- En implementation:function TForm1.bisiesto(x:integer):boolean;beginbisiesto:=((x mod 4=0) And (x mod 100<>0)) Or (x mod 400=0);end;

- Grábalo como Unit063.pas – Project063.dpr y ejecútalo.

r) Función que determina si un número es primo.

- Menú File – New - Application

- Inserta un button y un memo

- Código:procedure TForm1.Button1Click(Sender: TObject);varnum:integer;beginnum:=StrToInt(InputBox('Número','',''));if Primo(num)=1 then Memo1.Text:='El numero '+IntToStr(num)+' no es primo'else Memo1.Text:='El numero '+IntToStr(num)+' es primo';end;

- Apartado public:function Primo(num:integer):integer;

Delphi 7 Fermí Vilà 74

- Apartado implementation:function TForm1.Primo(num:integer):integer;vari,resto:integer;solucion:integer;beginsolucion:=0;for i:=2 to num-1 do begin resto:=num mod i; if (resto=0) And (num<>2) then begin solucion:=1; break; end; end;Primo:=solucion;//Primo=0 será primoend;

- Grábalo como Unit064.pas – Project064.dpr y ejecútalo.

s) Programa que determina los números primos menores de “x” (Criba de Eratóstenes)

- Menú File – New - Application

- Inserta un button y un memo

- Código:procedure TForm1.Button1Click(Sender: TObject);varnum:integer;beginnum:=StrToInt(InputBox('Números primos hasta','',''));Primos_Menores(num);Memo1.Text:=sa;end;

- Apartado public:sa:string;procedure Primos_Menores(x:integer);function Primo(num:integer):integer;

- Apartado implementation:function TForm1.Primo(num:integer):integer;var

Delphi 7 Fermí Vilà 75

i,resto:integer;solucion:integer;beginsolucion:=0;for i:=2 to num-1 do begin resto:=num mod i; if (resto=0) And (num<>2) then begin solucion:=1; break; end; end;Primo:=solucion;//Primo=0 será primoend;

procedure TForm1.Primos_Menores(x:integer);vari:integer;beginfor i:=1 to x-1 do if Primo(i)=0 then sa:=sa+IntToStr(i)+' , ';end;

- Grábalo como Unit065.pas – Project065.dpr y ejecútalo.

t) Programa que escribe los primeros “p” números primos (Criba de Eratóstenes)

- Menú File – New - Application

- Inserta un button y un memo

- Código:procedure TForm1.Button1Click(Sender: TObject);varnum:integer;beginnum:=StrToInt(InputBox('Cuántos primos quieres','',''));primeros_primos(num);Memo1.Text:=sa;end;

- Apartado public:sa:string;

Delphi 7 Fermí Vilà 76

function Primo(num:integer):integer;procedure primeros_primos(p:integer);

- Apartado implementation:function TForm1.Primo(num:integer):integer;vari,resto:integer;solucion:integer;beginsolucion:=0;for i:=2 to num-1 do begin resto:=num mod i; if (resto=0) And (num<>2) then begin solucion:=1; break; end; end;Primo:=solucion;//Primo=0 será primoend;

procedure TForm1.primeros_primos(p:integer);varcontador,numero:integer;begincontador:=0;numero:=1;repeat if Primo(numero)=0 then begin

sa:=sa+IntToStr(numero)+' , '; contador:=contador+1; end; numero:=numero+1;until contador=p;end;

- Grábalo como Unit066.pas – Project066.dpr y ejecútalo.

u) Programa que lee una frase y cuenta el número de veces que aparece cada letra en la frase

- Menú File – New - Application

Delphi 7 Fermí Vilà 77

- Inserta en el formulario un “button” y un “memo”

- Código:procedure TForm1.Button1Click(Sender: TObject);typecadena=string[255];letras='A'..'Z';lista=Array[letras] of integer;varfrase:cadena;sa:string;cuenta:lista;indice:letras;i:integer;beginfor indice:='A' to 'Z' do cuenta[indice]:=0;frase:=InputBox('Escribe una frase','','');for indice:='A' to 'Z' do for i:=1 to length(frase) do if indice=Upcase(frase[i]) then cuenta[indice]:=cuenta[indice]+1;sa:='';for indice:='A'to'Z' do sa:=sa+indice+#9+IntToStr(cuenta[indice])+#13#10;Memo1.Text:=sa;end;

- Grábalo como Unit067.pas – Project067.dpr y ejecútalo

- Estudio del Project067:• UpCase(carácter): es una función que escribe en mayúscula el “carácter”• #9: determina una tabulación: el código ASCII número 9 corresponde al tabulador

Ejercicios

1) Haz un programa de nombre Ejer25.pas – ProjectEjer25.dpr que calcule el mínimo común múltiplo de dos números utilizando la función MCD del Project061 y sabiendo que mcm(x,y) = x*y / MCD(x,y)

2) Haz un programa de nombre Ejer26.pas – ProjectEjer26.dpr que sirva para simplificar una fracción numérica, debes utilizar la función MCD del ejercicio anterior.

Observa: ),(/),(/baMCDbbaMCDa

ba =

La “salida” debería ser de la forma:

Delphi 7 Fermí Vilà 78

3) Haz un programa de nombre Ejer27.pas – ProjectEjer27.dpr, que sirva para sumar o restar dos fracciones y después simplifique el resultado.

Observa: ),(

)/),(()/),((dbmcm

ddbmcmcddbmcmadc

ba +=+

La “salida” debería ser:

4) Haz un programa de nombre Ejer28.pas – ProjectEjer28.dpr, que sirva para calcular el módulo de un vector en el espacio, utilizando una función.

5) Haz un programa de nombre Ejer29.pas – ProjectEjer29.dpr, que sirva para calcular el área de un triángulo en el espacio, utilizando la función del ejercicio anterior.Recuerda: A=(a1,a2,a3), B=(b1,b2,b3), C=(c1,c2,c3)AB=(b1-a1,b2-a2,b3-a3), AC=(c1-a1,c2-a2,c3-a3)Área del triangulo ABC = ½ del módulo del producto vectorial de AB y AC (consulta el ProjectEjer21)

Compruébalo para el siguiente caso:

6) Haz un programa de nombre Ejer30.pas – ProjectEjer30.dpr, que construya el triángulo de Tartaglia o Pascal de la siguiente forma:1º.- Crea una función que calcule el factorial de un número (Project056).2º.- Crea otra función que permita calcular un número combinatorio.

Delphi 7 Fermí Vilà 79

Recuerda: )!(!

!nmn

mnm

−=

3º.- El triángulo de Tartaglia no es más que los resultados de los números combinatorios:

00

11

01

22

12

02

……4º.- El programa nos ha de preguntar de entrada el número de filas del triángulo.

7) Haz un programa de nombre Ejer31.pas – ProjectEjer31.dpr que calcule los 50 primeros términos de la sucesión de término general: (3n + 1) / (2n – 1)

top related