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

    [VB6] Problema Input - Output | Help!

    ho creato un programma che permette di eseguire calcoli a seconda di due scelte presenti in un ComboBox e a seconda di valori che possono essere di default o inseriti dall'utente; il problema è che in entrambi casi, all'evento click del pulsante simula che nel mio caso è Command1, sia facendo eseguire il calcolo con i valori di default che con i valori dell'utente che esegue il programmino il risultato di output è lo stesso.

    ho più o meno capito che è un problema di due variabili "att" e "amp", ma non ho capito il motivo di questo problema dato che il codice mi sembra corretto.


    ecco il codice:



    Option Explicit
    Dim flag As Integer

    Private Sub automaticset_Click()
    flag = 0
    End Sub

    Private Sub Command1_Click()

    '---INIZIO Dichiarazione Variabili---
    Dim emediocst As Double
    Dim sarcst As Double
    Dim k As Double
    Dim pcst As Double
    Dim a As Double
    Dim b As Double
    Dim emediomis As Double
    Dim pgenmisdbm As Double
    Dim att As Double
    Dim amp As Double
    Dim pmisdbm As Double
    Dim pmisw As Double
    Dim pvera As Double
    Dim pveramw As Double
    Dim pgeneratoredbm As Double
    Dim campo As Double
    Dim pindbm As Double
    Dim sar As Double

    '---FINE Dichiarazione Variabili---

    If Combo1.ListIndex = -1 Then
    MsgBox "Non sono ammessi valori di SAR nullo", vbInformation, "SAR"
    Exit Sub
    End If

    If Combo1.Text = Combo1.List(0) And flag = 0 Then

    '---INIZIO Assegnazione Variabili---
    emediocst = 87.52
    sarcst = 0.638
    k = 1.2
    pcst = 0.5
    a = emediocst / Sqr(pcst)
    emediomis = 1
    pgenmisdbm = -20.5
    att = 2.6
    amp = 35
    '---FINE Assegnazione Variabili---

    End If

    If Combo1.Text = Combo1.List(0) And flag = 1 Then

    '---INIZIO Assegnazione Variabili---
    emediocst = 87.52
    sarcst = 0.638
    k = 1.2
    pcst = 0.5
    a = emediocst / Sqr(pcst)
    emediomis = 1
    pgenmisdbm = -20.5
    att = CDbl(Text8.Text)
    amp = CDbl(Text9.Text)

    '---FINE Assegnazione Variabili---

    End If

    If Combo1.Text = Combo1.List(1) And flag = 0 Then

    '---INIZIO Assegnazione Variabili---
    emediocst = 90.72
    sarcst = 0.079
    k = 0.158
    pcst = 0.5
    a = emediocst / Sqr(pcst)
    emediomis = 30.92
    pgenmisdbm = -20.5
    att = 1.8
    amp = 41
    '---FINE Assegnazione Variabili---

    End If

    If Combo1.Text = Combo1.List(1) And flag = 1 Then

    '---INIZIO Assegnazione Variabili---
    emediocst = 87.52
    sarcst = 0.638
    k = 1.2
    pcst = 0.5
    a = emediocst / Sqr(pcst)
    emediomis = 1
    pgenmisdbm = -20.5
    att = CDbl(Text4.Text)
    amp = CDbl(Text5.Text)

    '---FINE Assegnazione Variabili---

    End If

    '---INIZIO Calcola i valori ---
    pmisdbm = pgenmisdbm - att + amp
    pmisw = 10 ^ (pmisdbm / 10) / 1000
    b = emediomis / Sqr(pmisw)
    sar = CDbl(Text1.Text)
    pvera = sar * (a ^ 2 / b ^ 2) / k
    pveramw = pvera * 1000
    pindbm = 10 * Log(pveramw) / Log(10)
    pgeneratoredbm = pindbm + att - amp
    campo = b * Sqr(pvera)
    Label7.Caption = pgeneratoredbm
    Label8.Caption = campo
    '--- FINE Calcola i valori ---
    End Sub

    Private Sub Command2_Click()
    Unload Me
    End Sub

    Private Sub Command3_Click()
    flag = 1
    End Sub

    Private Sub Form_Load()
    Combo1.AddItem "1800", 0
    Combo1.AddItem "900", 1
    flag = 0
    Frame3.Visible = False
    End Sub

    Private Sub Label12_Click()
    End Sub

    Private Sub guide_Click()
    Form2.Show
    End Sub

    Private Sub manualset_Click()
    Frame3.Visible = True
    End Sub

    fatemi sapere, è urgente

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma come si fa a rispondere se non si sa nulla di quello che sta facendo il programma, dei risultati che dovresti ottenere, dei dati presenti a runtime nei vari controlli?

    Programmatori sì ma chiromanti no ...

    Magari se spiegassi con calma la faccenda, facessi un po' di debug passo passo, indicassi quali sono i risultati che ti aspetti, i dati in input, se quotassi il codice per renderlo leggibile ...

    Ovviamente, l'urgenza non e' importante ...

  3. #3
    il codice è quotato :S non so a te ma io lo vedo quotato


    comunque...ho 3 frames:

    - uno contente il comboBox da cui è possibile impostare la frequenza tra 1800 MHz e 900 MHz e altri campi di testo che al momento non servono

    - il sencodo sarebbe il frame in cui mi vengono forniti i due dati di output

    - il terzo invece, che è visibile solo se l'utente clicca sul menu "imposta manualmente i valori" ed è il caso che appunto è l'utente che imposta i dati in input sui cui effettuare i calcoli

    a seconda della frequenza naturalmente il programma fa dei calcoli diversi

    aprendo il programma siamo di fronte ai due frame, quello dei dati da impostare manualmente non è ancora attivo:

    impostiamo la frequenza a 1800, e clicco sul pulsante simula che esegue i calcoli CON I VALORI DI DEFAULT...bene, nel secondo frame ho i due risultati, ad esempio 10,60 e 45.89.

    adesso ripeto il procedimento con la frequenza a 900 sempre con i valori di default, e tutto è ok i calcoli sono giusti...ho i miei due risultati nel secondo frame ad esempio 5,70 e 9,13.

    il problema sorge quando è l'utente che inserisce i valori.

    l'untete inserisce la frequenza: 1800 poi clica sul menu che imposta

    Frame2.Visibility = True
    e comincia a inserire i due valori che saranno utilizzati invece di quelli di default per il calcolo, i valori vengono convertiti e assegnati, uno alla variabile "att" e l'altro alla variabile "amp".

    l'utente clicca sul pulsante applica che imposta la variabile flag a 1.

    dopo clicca su simula e il parse entra nell'IF giusto nel nostro caso:

    If Combo1.Text = Combo1.List(0) And flag = 1 Then

    '---INIZIO Assegnazione Variabili---
    emediocst = 87.52
    sarcst = 0.638
    k = 1.2
    pcst = 0.5
    a = emediocst / Sqr(pcst)
    emediomis = 1
    pgenmisdbm = -20.5
    att = CDbl(Text8.Text)
    amp = CDbl(Text9.Text)

    '---FINE Assegnazione Variabili---

    End If
    dove assegnamo dei valori alle variabili e poi diciamo di convertire in double e prendere le variabili att e amp da Text8 e Text9.

    una volta dunque cliccato su simula che entra nell'if e poi esegue i calcoli:

    pmisdbm = pgenmisdbm - att + amp
    pmisw = 10 ^ (pmisdbm / 10) / 1000
    b = emediomis / Sqr(pmisw)
    sar = CDbl(Text1.Text)
    pvera = sar * (a ^ 2 / b ^ 2) / k
    pveramw = pvera * 1000
    pindbm = 10 * Log(pveramw) / Log(10)
    pgeneratoredbm = pindbm + att - amp
    campo = b * Sqr(pvera)
    il risultato è uguale a quello della prima prova ossia 10,60 e 45.89. cosa impossibile in quanto i dati in input sono diversi, addirittura ho provato a impostare 1000 e 3000 e il risultato è uguale ai calcoli con i dati di default.


    spero che la spiegazione sia chiara!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Dark-LioN
    il codice è quotato :S non so a te ma io lo vedo quotato
    Intendevo "indentato" ...

    Hai fatto del debug passo passo controllando i valori man mano che vengono calcolati nei due casi?

  5. #5
    nessuno che sa risolvere???

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non mi hai risposto ...

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.