Página 1 de 1

Problema Pascal u.u

Publicado: 26 Mar 2011, 20:39
por rOxSupra
Hola a todos :)... Primero el ejercicio!

Leer 10 enteros, almacenarlos en un arreglo y determinar en qué posición del arreglo está el mayor número primo leído.

Ahora mi problema es que no se como hacer para que me imprima el numeros primo mayor en el arreglo. espero que me ayuden

Aqui les dejo lo que he hecho

Código: Seleccionar todo

Program Primos;
USES
crt;
CONST
N:=10;
VAR
Array [1..n]Of integer;
numero,i,max,imax,Divisor:Integer;
primo:boolean;

BEGIN
Writeln ('Llenando Arreglo');
Writeln;
FOR i:=1 TO n DO
         BEGIN
            writeln ('[',i,']:');
             readln(v[i]);
         END;
Primo:=True;
Divisor:=2;
While Divisor <= sqrt (Numero) do
           BEGIN
           IF (numero mod divisor) =0 Then
           Primo:=false;
           Divisor:=Divisor +1;
           END;
max:=v[1];
imax:=1;
FOR i:=2 TO n DO
            BEGIN
            IF max < v[i] then
                  BEGIN
                   max:=v[i];
                   Imax:=i
           END;
END;
writeln;
writeln ('El Valor Maximo del arreglo es: ',max);
Writeln('Y esta en la posicion: ',imax);
END;
End.

Re: Problema Pascal u.u

Publicado: 26 Mar 2011, 21:19
por Flight embedded
Hola rOxSupra.
Mi intención realmente es que estas dudas valiosas no se pierdan, es por ello que esto debe ir en "Desarrollo y dudas de programación". Repito que, si esto sigue aca, mañana ya no lo verás.

Re: Problema Pascal u.u

Publicado: 26 Mar 2011, 21:27
por rOxSupra
Hola ignaro, Disculpa.. No sabia!

Re: Problema Pascal u.u

Publicado: 27 Mar 2011, 07:09
por linkgl
Puedes tomar el primer subindice como numero mayor y luego hacer un bucle que compare el numero con todos los demas y si este es menor que otro numero entonces que cambie el numero mayor por el siguiente numero mas grande que encuentre y lo vuelva a comparar con todos los números y así sucesivamente hasta que quede uno mayor que todos y lo devuelva, no se mucho de pascal pero te dejo un ejemplo en php, tal vez te da una idea si no me dices y lo hago en pascal pero es básicamente lo mismo:

Código: Seleccionar todo

<?php
$entrada=array(1,2,3,10,4,5,6,7,48,9); //Los 10 numeros de entrada
$mayor=$entrada[0]; //Ponemos que el mayor es el primer elemento
//Se cambia automaticamente en el bucle
$pos=0; //la posicion en 0
//El bucle (lo importante)
//Iniciamos un bucle del tamaño de la cantidad de elementos del array
for($j=0;$j<count($entrada);$j++)
{
  //Si mayor es menor que el elemento elejido
  if($mayor<$entrada[$j])
  {
    //cambiamos el mayor
    //y obtenemos su posicion
    $mayor=$entrada[$j];
    $pos=$j;
  }
}
echo $mayor; //mostramos el que quedo mayor
echo " posicion: ".$pos; //y su posicion 
?>

Re: Problema Pascal u.u

Publicado: 27 Mar 2011, 08:25
por rOxSupra
Gracias linkgl, aunque ahora estoy un poco mas claro me ayudaria mucho que lo hicieras en pascal!
si no es mucha molestia xD

Re: Problema Pascal u.u

Publicado: 27 Mar 2011, 19:00
por linkgl
Pues ya lo tienes bien jeje nomas tienes unos errores en cuanto a punto y coma y cosas así que me marca el compilador, te lo dejo corregido y funcional en el compilador Free Pascal :P

Código: Seleccionar todo

Program Primos;
USES
crt;
CONST
N:=10;
VAR
Array [1..n]Of integer;
numero,i,max,imax,Divisor:Integer;
primo:boolean;

BEGIN
Writeln ('Llenando Arreglo');
Writeln;
FOR i:=1 TO n DO
         BEGIN
            writeln ('[',i,']:');
             readln(v[i]);
         END;
Primo:=True;
Divisor:=2;
While Divisor <= sqrt (Numero) do
           BEGIN
           IF (numero mod divisor) =0 Then
           Primo:=false;
           Divisor:=Divisor +1;
           END;
max:=v[1];
imax:=1;
FOR i:=2 TO n DO
            BEGIN
            IF max < v[i] then
                  BEGIN
                   max:=v[i];
                   Imax:=i
           END;
END;
writeln;
writeln ('El Valor Maximo del arreglo es: ',max);
Writeln('Y esta en la posicion: ',imax);
END;
End.

Re: Problema Pascal u.u

Publicado: 27 Mar 2011, 19:36
por rOxSupra
Hola de nuevo Linkgl, Gracias por correjir los errores de sintaxis! Pero aun asi me sigue diciendo el mayor valor del array, yo necesito que me indique el mayor primo en el array :(

Re: Problema Pascal u.u

Publicado: 27 Mar 2011, 19:50
por selanabar

Código: Seleccionar todo

x:=0
for i:=2 to sqrt(n) do
     begin
         if ((n mod i)=0) and (n>x)then
              x:=n;
     end;
haz pasar todos los numeros por esto y te dara el primo mas grande, luego solo imprime x

Re: Problema Pascal u.u

Publicado: 27 Mar 2011, 19:58
por selanabar

Código: Seleccionar todo

x:=0
primo:=false;
for j:=1 to n do
  begin
      for i:=2 to sqrt(v[j]) do
           begin
                 if ((v[j] mod i)<>0) then
                           primo:=true;
           end;
   if primo and (v[j]>x)then
         x:=v[j];
  end;
esto deberia darte el primo mas grande, luego solo imprime x (espero no haberme equibocado)

Re: Problema Pascal u.u

Publicado: 27 Mar 2011, 20:41
por linkgl
ahhh necesitaba ser el primo mas grande creí que solo el número más grande lo que tienes que hacer es dentro del mismo bucle que te genera el número más grande hacer otro bucle que tome el número que vaya mas arriba y lo compare con todos los números desde el 2 hasta uno abajo de el y si en todos es diferente de 0 entonces es primo y si es primo lo metemos en la variable max, si no devolvemos false, te dejo así como lo quieres ya funcionando:

Código: Seleccionar todo

Program Primos;
USES
crt;
CONST
N=10;
VAR
v : array [1..N] Of integer;
numero,w,i,max,imax,num,Divisor:Integer;
primo:boolean;

BEGIN
Writeln ('Llenando Arreglo');
Writeln;
FOR i:=1 TO n DO
         BEGIN
            writeln ('[',i,']:');
            readln(v[i]);
         END;

max:=0;
imax:=0;
FOR i:=1 TO n DO
         BEGIN
          IF max < v[i] then
          BEGIN
           primo:=true;
           FOR w:=2 to v[i]-1 DO
           BEGIN
             IF v[i] mod w = 0 THEN
             BEGIN
               primo:=false;
             END;
           END;
           IF primo=true THEN
           BEGIN
             max:=v[i];
             imax:=i;
           END;
         END;
END;
writeln;
writeln ('El Valor Maximo del arreglo es: ',max);
Writeln('Y esta en la posicion: ',imax);
readln()
End.

Re: Problema Pascal u.u

Publicado: 27 Mar 2011, 20:52
por rOxSupra
Gracias ya entendo!! son los mejores

Re: Problema Pascal u.u

Publicado: 27 Mar 2011, 20:59
por linkgl
haha ni cerca yo de los mejores pero que bueno que te haya servido de algo saludos! :P