Autore Topic: Funzione che determini il massimo numero intero positivo X per cui x^x =< y  (Letto 983 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
In un forum del linguaggio C ho trovato un post con richiesta di aiuto per risolvere questo problema:
" Dato un numero reale positivo Y immesso da tastiera, si scriva un programma in linguaggio C che determini qual è il massimo numero intero positivo X tale per cui sia valida la relazione x^x =< y "


Ho trovato una soluzione che, ripensata in linguaggio Gambas, appare come segue:

Codice: [Seleziona]
Public Sub Main()

  Dim x, y As Long
  Dim s As String
 
    Print "Inserisci un numero intero positivo..."
    Input s
    y = CLong(Val(s))
 
    While ((x + 1) ^ (x + 1)) <= y
      Inc x
    Wend

    Print "\nIl risultato è: "; x

End


Voi avete altre soluzioni ?   


« Ultima modifica: 02 Maggio 2017, 23:58:08 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Arco

  • Gambero
  • **
  • Post: 93
    • Mostra profilo
Spero di non dire una stupidata ma il numero più grande di X non è la radice quadrata di Y. Se serve solo l'intero basta non considerare i decimali.
« Ultima modifica: 02 Maggio 2017, 15:58:56 da Arco »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Dunque quale codice proporresti per cui il risultato di x, elevato al medesimo valore di se medesimo, non sia superiore a y nota ?

 y =< xx
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Arco

  • Gambero
  • **
  • Post: 93
    • Mostra profilo
on posso provarlo ma così dovrebbe funzionare.
Codice: [Seleziona]
Public Sub Main()

  Dim x, y As Long
  Dim s As String
 
    Print "Inserisci un numero intero positivo..."
    Input s
    y = Val(s)
 
     x = Sqr(y)

    Print "\nIl risultato è: "; x
End

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Ho provato il tuo codice.
Inserendo ad esempio il valore di y = 26, mi restituisce 5.
...però 5 ^ 5 (ossia 55 ) = 3125, che pertanto è ben superiore a 26. 
Io credo che il numero positivo, elevato a se medesimo, inferiore o uguale - in questo caso - a 26 debba essere "2" (infatti 33 = 27, già superiore a 26).  :-X
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Il problema è piuttosto semplice, se ho capito bene.
Basta fare la radice quadrata di Y e prendere la parte intera:
Codice: [Seleziona]
x = Int(Sqr(y))
Ho capito bene almeno? ;D

Edit: ho capito male, come non detto... :rolleyes:
« Ultima modifica: 02 Maggio 2017, 21:47:15 da Top Fuel »
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Ciao a tutti,

L'ora è tarda è oggi i problemi oggi mi si sono accalcati, tra l'altro era il primo giorno di lavoro dopo 10 di ferie e vi lascio capire in che stato ho ritrovato l'ufficio...... io dissento da quanto scritto da Top Fuel e da Arco perchè non si tratta di fare x^2, ma x^x, come vi ha fatto notare Vuott, qui il problema è prettamente matematico, ad occhio è un numero compreso tra 2 e 3, ma come dimostrarlo?

Ci ho provato a pensarlo ma mi è deflagrata la testa :mad:
« Ultima modifica: 02 Maggio 2017, 23:11:44 da Franco_da_vc »
Bye by Afo

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
L'unica cosa che non ho capito Vuott è perchè hai posto x+1 elevato a x+1,

    While ((x + 1) ^ (x + 1)) <= y
      Inc x
    Wend

non vedresti meglio While (x^x)<=y
Bye by Afo

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
non si tratta di fare x^2, ma x^x

Esattamente.   :)



L'unica cosa che non ho capito Vuott è perchè hai posto x+1 elevato a x+1,
non vedresti meglio While (x^x)<=y
Se io applico l'operazione da te segnalata, alla fine io ottengo il valore della variabile "x" aumentato di un'unità rispetto a quello corretto.
Pertanto il ragionamento che io invece gli faccio fare è..... "preventivo;D . Ossia, "Se x+1 elevato ad x+1 è inferiore o uguale al valore di "y", allora compi il ciclo (...che comporta un incremento della variabile "x"); altrimenti esci.".
In altre parole, se facendo fare il ciclo (che comporta inesorabilmente da codice l'incremento di un'unità della variabile "x"), il risultato di "x" elevata a se stessa (xx) non diventa superiore alla variabile "y", allora mi sta bene: il ciclo si faccia. Altrimenti salta e mostrami il risultato.


« Ultima modifica: 03 Maggio 2017, 00:02:33 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Arco

  • Gambero
  • **
  • Post: 93
    • Mostra profilo
Ho confuso il simbolo.
Ho visto oggi che il simbolo è elevazione e non moltiplicazione come avevo mal visto ieri.
Mi sa che devo cambiare gli occhiali :hard: