Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    54

    [VB6] Nuova discussione sulle equazioni =)

    Beh, visto che l'altra ( http://forum.html.it/forum/showthrea...readid=1392238 ) è stata chiusa (non per colpa mia), ne apro un'altra...
    Ho capito come fare a trovare la x in una espressione algebrica. Per semplicità ho deciso di far inserire l'equazione in due campi separati, primo e secondo membro, per evitare di dover decidere se i valori sono a destra o a sinistra dell'uguale

    Ora faccio un esempio:
    equazione 12x-21/2+4x=7/4x+11 inserendo primo e secondo membro in campi separati

    Per risolverla, devo trovare tutti i coefficienti delle x e tutti i termini noti.
    Ho capito come trovare la x all'interno della stringa, utilizzando l'Instr come mi è stato suggerito, e fin qui non ci sono problemi.
    Per trovare il coefficiente della x devo tornare indietro di n caratteri finché non trovo l'inizio della stringa o un segno + o -. Quel valore trovato lo trasformo in numero e lo assegno ad un array.
    Poi vado avanti e trovo tutte le altre x e i loro coefficienti con lo stesso metodo.
    A questo punto ho un array con tutti i valori delle x e li sommo tranquillamente tra loro.

    Il primo problema è, come torno indietro di n caratteri fino a un determinato punto?
    Il secondo problema è, come trovo il termine noto? non è contraddistinto da alcun segno "particolare"... come identificarlo quindi?

    Voglio sottolineare che non mi interessa avere una routine già pronta, per qualche motivo:
    1) si tratta di un lavoro mio quindi non vorrei copiare da altri 2) mi piacerebbe imparare qualcosina 3) la routine proposta da matt_vb6 risolve qualsiasi espressione matematica, certo, ma non algebrica. Quindi non fa calcoli con le x =)

    Grazie in anticipo e scusate se ho scritto un po' troppo

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    760

    Re: [VB6] Nuova discussione sulle equazioni =)

    Originariamente inviato da broc
    Il primo problema è, come torno indietro di n caratteri fino a un determinato punto?
    Il secondo problema è, come trovo il termine noto? non è contraddistinto da alcun segno "particolare"... come identificarlo quindi?
    Ciao, ben ritrovato.
    Il "tornare indietro di n caratteri" potresti risolverlo con la funzione Mid().
    Ma vorrei suggerirti un altro approccio. Per costruire l'array potresti individuare, anziché la x, gli operatori aritmetici. In questo modo non avresti la necessità di "tornare indietro" né di riconoscere il termine noto.
    Va da sé che devi poi risolvere la questione della precedenza tra gli operatori e le eventuali coppie di parentesi.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    54
    In effetti, oggi a scuola mi era venuta proprio quella idea... identificare prima tutti gli operatori matematici + e -; identificando quindi le varie "parti" dell'equazione.
    Mi spiego meglio: 7x-12+44-4x = 3x+15

    Identificando i segni + e - nell'equazione (prima in un membro e poi nell'altro), posso assegnare i valori che li precedono/seguono ad un array. Successivamente identificare se in queste stringhe più brevi che ho assegnato sono presenti x o se si tratta di termini noti, e sommare tra loro i termini simili.

    Come faccio a identificare i valori?
    Cioè, la funzione Instr mi restituisce la posizione numerica della prima occorrenza trovata.
    Ad esempio, il primo - qui si trova al carattere n. 3
    Con Mid trovo la stringa che va da carattere 0 a carattere 3
    Provo a codificarlo, vediamo =)

    codice:
    Espr=Textbox.text
    k = 0
    car0 = 1
    lunghezza = Len(Espr)
    do while car0 < lunghezza
      car1 = Instr(car0,Espr,"-")
      vettore(k) = Mid(Espr,car0,car1-1)
      car0= car1+1
      k = k+1
    Loop
    Dovrebbe essere giusto, no?
    Poi, una volta fatto così, riprendo l'array dall'inizio e verifico in ogni cella se è presente la x o no; la stessa cosa la posso fare eventualmente con valori x^2

    Se è così, un problema potrebbe quasi essere risolto... Per le parentesi, vediamo dopo =)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    54
    Ah, e se usassi la funzione Split? Non so se fa al caso mio però ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    760
    La funzione Split, purtroppo, ti permette di indicare un solo carattere quale separatore, quindi non puoi usarla per individuare i diversi operatori.
    Forse la cosa più semplice è esaminare la stringa carattere per carattere; se incontri un operatore estrai con la funzione Mid la porzione di stringa che va dal'operatore precedente a quello trovato -1 .

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    54
    Uhm... come analizzo la stringa carattere per carattere scusa?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    760
    codice:
    For i = 1 To Len(stringa)
        c = Mid(stringa, i, 1)
        If c = "+" Or c = '-' Then
            ...
        Else
             ...
        EndIf
    Next

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    54
    Uuuuh, grazie mille! Il centinaio di righe si è ridotto a solo una ventina... questo semplifica molto le cose. Per iriconoscere le parentesi utilizzo lo stesso metodo; assegno poi ogni pezzetto ad un array di stringhe e analizzo anche quelle carattere per carattere.
    Le divido in base a x, x^2 e valori noti, poi somma algebrica ed è fatta.
    Non sembrerebbe così difficile =)

    Grazie mille per l'aiuto, se ho altri problemi mi faccio sentire xD

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 © 2026 vBulletin Solutions, Inc. All rights reserved.