Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 35

Discussione: da C a VB: aiuto

  1. #1

    da C a VB: aiuto

    Salve,

    forse chiedo troppo, se così fosse vi chiedo scusa.

    Ho la seguente routine in C che devo convertire in VB6. L'ho fatto ma il risultato non è corretto.

    Qualcuno può convertirla per me?
    Ho tolto tutti i commenti per essere breve. Se c'è bisogno di chiarimenti, lo faccio volentieri... ovviamente!

    Grazie infinite,
    Nino

    ================================================== ====================
    char *
    scanback(char *s, char *t)
    {
    int braces = 1;
    if (!s || !t || t < s) return NULL;
    while (braces && s < t) {
    if (*t=='{' &&
    !(*(t-1) == '\\') &&
    !(s+5 <= t && !strncmp(t-5,"\\left",5)) &&
    !(s+6 <= t && !strncmp(t-6,"\\right",6))
    ) braces--;

    if (*t=='}' &&
    !(*(t-1) == '\\') &&
    !(s+5 <= t && !strncmp(t-5,"\\left",5)) &&
    !(s+6 <= t && !strncmp(t-6,"\\right",6)) ) braces++;

    if (braces) t--;
    }
    return t;
    }

  2. #2
    Purtroppo non conosco C (ma lo imparerò!!!).
    Se mi dici cosa deve fare la tua funzione te la scrivo da 0 (zero).
    "Meglio un aiuto che 50 consigli"
    (tratto dalle barrette Elah)

  3. #3
    Utente di HTML.it L'avatar di mhmh
    Registrato dal
    Feb 2002
    Messaggi
    204
    fai conto che in vb nn credo esistano puntatori...

  4. #4
    Forse hai usato la doppia barra?
    In VB "\" singola equivale a barra singola.
    "Meglio un aiuto che 50 consigli"
    (tratto dalle barrette Elah)

  5. #5
    Anche io ho provato a riscrivere tutto da zero, ma mi sono incasinato, visto il risultato. Per questo volevo confrontare quello scritto da me con una conversione dal codice originale.
    Il problema me lo creano proprio i puntatori! In questa routine si usa sia t-- che *t come tradurre questo in VB?

    Comunque accetto volentieri anche una routine scritta da zero, ovviamente! Non l'ho chiesta perchè pensavo di chiedere veramente troppo.

    La funzione serve ad estrarre il numeratore di una frazione partendo dalla posizione di "/" (devo scrivere anche quella che estrae il denominatore).
    Esempi:
    da: x^2/(k+1)=(x^2)/(k+1) a: x^(2)/(k+1)=(x^2)/(k+1)
    da: x^(2/(k+1)) a: x^((2)/(k+1))
    da: 1/x*3=(1/x)*3<>1/(x*3) a: 1/(x)*3=(1)/(x)*3<>(1)/(x*3)
    da: (3+x)/2-(2+1/x) a: (3+x)/(2)-(2+1)/(x)
    da: 2(x+7)/3^2 a: 2(x+7)/(3)^2

    Devo obbligatoriamente partire dalla posizione di "/" e non dall'inizio.

    Grazie per l'aiuto.
    Ciao,
    Nino

  6. #6
    Errori (di cui mi sono accorto) negli esempi

    Esempi:
    da: 1/x*3=(1/x)*3<>1/(x*3) a: 1/(x)*3=(1)/(x)*3<>(1)/(x*3)
    deve essere:
    da: 1/x*3=(1/x)*3<>1/(x*3) a: (1)/(x)*3=(1)/(x)*3<>(1)/(x*3)
    Errori negli esempi

    da: (3+x)/2-(2+1/x) a: (3+x)/(2)-(2+1)/(x)
    deve essere:
    da: (3+x)/2-(2+x/x) a: (3+x)/(2)-(2+(x)/(x))

    Inoltre tutte le parentesi sono parentesi graffe {} e non tonde come ho scritto io.

    Mi aiutate?

    Grazie,
    Nino

  7. #7
    Utente di HTML.it L'avatar di mhmh
    Registrato dal
    Feb 2002
    Messaggi
    204
    t-- non è nientaltro che un decremento unitario della variabile t.Per i puntatori non saprei proprio come risolvere il problema.Sono una cosa abbastanza particolare...

  8. #8
    Potresti dirmi che cosa indicano rispettivamente i 2 parametri 's' e 't'?
    Grazie!!
    lupusinfabula

    Programmatore VB, ASP, Delphi.

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    271
    Sono credo dei puntatori a caratteri

  10. #10
    La routine viene richiamata da questa linea

    p=eq
    if ((mid = strstr(p,'/')) != NULL)
    first = scanback(eq, mid);
    Quindi 's' è l'equazione e 't' la posizione della barra.

    Ecco come l'ho riscritta io:

    private function scanback(s, t) as integer
    dim braces as integer
    scanback=0
    braces = 1
    if len(s)=0 or t=0 or t < len(s) then exit function
    do while (braces>0 and len(s) < t)
    if mid$(s,t,1) ="{" and _
    (not (mid$(s,t-1,1) = "\")) and _
    (not (len(s)+5 <= t and mid$(s,t-5,5)<>"\left") and _
    (not (len(s)+6 <= t and mid$(s,t-6,6)<>"\right")) then
    braces=braces-1
    end if
    if mid$(s,t,1)="}" and
    not(mid$(s,t-1,1) = "\") and _
    (not (len(s)+5 <= t and mid$(s,t-5,5) <> "\left") and _
    (not (len(s)+6 <= t and mid$(s,t-6,6) <> "\right")) then
    braces=braces+1
    end if
    if braces>0 then t=t-1
    loop
    scanback=t
    end function

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.