Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [VB] Ricerca dicotomica

    Salve a tutti, il mio primo messaggio sul forum!
    Per la prima volta mi trovo un po' in difficoltà nella programmazione e mi rivolgo a voi, sperando che qualcuno riesca ad aiutarmi!

    Allora... cominciamo :P
    Il testo dell'esercizio recita così:

    Dati in input per ogni cliente di una azienda commerciale le seguenti istruzioni:

    - Ragione sociale
    - Partita IVA
    - Fatturato annuo

    Determinare:

    - La Partita IVA dell'azienda con fatturato annuo più alto
    - Elenco delle aziende con fatturato annuo < 100.000€
    - Elenco delle aziende in ordine di fatturato
    - Partita IVA e fatturato di una azienda la cui ragione sociale sia data in input (Ricerca dicotomica)
    - Il fatturato medio
    Non riesco a risolvere il quarto punto, da fare obbligatoriamente con la ricerca dicotomica o binaria. Questo come ho tentato di risolvere l'esercizio.

    Private Sub Command5_Click()
    cerca = InputBox("Quale azienda cerchi?")
    primo = 1
    ultimo = quante
    i = 0
    trovato = False


    Do
    medio = CInt((primo + ultimo) / 2)
    If (ragsociale(medio)) = cerca Then
    MsgBox (iva(medio))
    MsgBox (fatturato(medio))
    trovato = True
    Else
    If (ragsociale(medio)) < cerca Then
    primo = medio + 1
    Else
    ultimo = medio - 1
    End If
    End If
    Loop Until (trovato = True Or primo >= ultimo)

    End Sub
    Qua, per comodità, potete leggere la versione indentata!

    Ovviamente tutti gli array e variabili, nonostante la dichiarazione di queste ultime non sia obbligatoria, son dichiarati. Purtroppo il risultato in output varia: certi li risolve correttamente mentre in altri casi va in loop infinito e non manda, ovviamente, nulla in output.

    Qualche consiglio? Grazie mille

  2. #2
    Il perché è presto detto. La colpa degli arrotondamenti

    Se alla fine della ricerca hai Ultimo = Primo + 1 e Ultimo è l'elemento trovato, vedrai che
    CINT((Primo + Ultimo) / 2) ti ritorna PRIMO e quindi riesegue il loop.
    Visto che hai chiesto solo consigli, e che è un esercizio, mi fermo qui.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.