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

-Casi todos mienten, pero no importa pues casi nadie escucha.
-No importa cuantas veces se demuestre una mentira, siempre habrá alguien que creerá que es verdad.
-Es de sabios saber hasta donde se debe evitar la perfección.
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.
Imagen
Imagen
Hola ignaro, Disculpa.. No sabia!
Imagen

-Casi todos mienten, pero no importa pues casi nadie escucha.
-No importa cuantas veces se demuestre una mentira, siempre habrá alguien que creerá que es verdad.
-Es de sabios saber hasta donde se debe evitar la perfección.
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 
?>
//mHmm..
Gracias linkgl, aunque ahora estoy un poco mas claro me ayudaria mucho que lo hicieras en pascal!
si no es mucha molestia xD
Imagen

-Casi todos mienten, pero no importa pues casi nadie escucha.
-No importa cuantas veces se demuestre una mentira, siempre habrá alguien que creerá que es verdad.
-Es de sabios saber hasta donde se debe evitar la perfección.
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.
//mHmm..
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 :(
Imagen

-Casi todos mienten, pero no importa pues casi nadie escucha.
-No importa cuantas veces se demuestre una mentira, siempre habrá alguien que creerá que es verdad.
-Es de sabios saber hasta donde se debe evitar la perfección.

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
Sudafrica 2010
################################
################################
################################
################################

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)
Sudafrica 2010
################################
################################
################################
################################
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.
//mHmm..
Gracias ya entendo!! son los mejores
Imagen

-Casi todos mienten, pero no importa pues casi nadie escucha.
-No importa cuantas veces se demuestre una mentira, siempre habrá alguien que creerá que es verdad.
-Es de sabios saber hasta donde se debe evitar la perfección.
Responder

Volver a “Otros lenguajes”