IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Calcul itératif récursif avec initialisation de variable à chaque itération


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut Calcul itératif récursif avec initialisation de variable à chaque itération
    bonjour tout le monde,

    j'ai une table TABLA_XA contient 5 ColonneS A,B,C,D initialement vide
    le nombre de lignes (n) est variable, donc si je mets en entrée 4 j'aurai 4 lignes ainsi de suite ...

    j'ai un nombre de départ : NB := X,

    j'ai besoin de faire des calculs de la manière suivante :

    La ligne 1 :
    B1 = X*10%
    C1 = D1-B1
    D1 = X*10%/(1-X)
    A1 = X-C1
    dans ce cas
    X := A1

    La ligne 2 :
    B2 = X*10%
    C2 = D2-B2
    D2 = X*10%/(1-X)
    A2 = X-C2
    X :=A2

    La ligne 2 :
    B3 = X*10%
    C3 = D3-B3
    D3 = X*10%/(1-X)
    A3 = X-C2
    X :=A3

    on général, je dois faire des calculs qui dependent de la ligne précédente selon le nombre de ligne (n)

    merci d'avance

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    je vais détailler un peu :

    il s'agit du calcul d'une valeur à partir d'autre valeur située dans la ligne précédente,

    autrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i IN 1..Nb loop
       for j in 2.. nb loop
     
    A(j):= A(i)-C(j) 
     
    ...
    -- i val colonne A ligne précédent;
    -- j val colonne B ligne courante;

  3. #3
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Me trompe-je ou on se mords la queue la?:
    Citation Envoyé par LandGreen Voir le message
    La ligne 1 :
    B1 = X*10%
    C1 = D1-B1
    D1 = X*10%/(1-X)
    A1 = X-C1
    dans ce cas
    X := A1
    Tu dis "X := A1", mais dans le même temps "A1 = X-C1".
    C'est "suspect", je ne sais pas ce qu'en penserons les autres qui passeront par la. Mais perso, je ne vois pas comment résoudre cela.

    @+

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Oui à la fin de literation X prend na valeur de A pour passer à la ligne suivante

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Comme C est calculé avant D, à part B1 et D1 tout sera NULL.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    with cte_nb_x (X) as
    (
    select 17 from dual
    )
      ,  cte_tableA (B, D, C, A, X, lvl) as
    (
    select X*10/100 as B
         , X*10/100 / (1-X) as D
         , (X*10/100 / (1-X)) - X*10/100 as C
         , X - (X*10/100 / (1-X)) + X*10/100 as A
         , X
         , 1
      from cte_nb_x
     where X > 1
     union all
    select A*10/100 as B
         , A*10/100 / (1-A) as D
         , (A*10/100 / (1-A)) - A*10/100 as C
         , A - (A*10/100 / (1-A)) + A*10/100 as A
         , X
         , lvl + 1
      from cte_tableA
     where lvl < X
    )
    select A, B, C, D
      from cte_tableA
     
    A                                            B                                           C                                            D
    -----------------------------------------    -----------------------------------------   ----------------------------------------     ------------------------------------------
    18.80625                                     1.7                                         -1.80625                                     -.10625
    20.79249100561600561600561600561600561601    1.880625                                    -1.98624100561600561600561600561600561601    -.1056160056160056160056160056160056160056
    22.97679252731912017776385517541062251282    2.0792491005616005616005616005616005616     -2.18430152170311456175823916979461689681    -.1050524211415140001576775692330163352121
    25.37902203459230299515067553159617123643    2.29767925273191201777638551754106225128    -2.40222950727318281738682035618554872361    -.1045502545412707996104348386444864723334
    28.02102612531584218584690191602247219041    2.53790220345923029951506755315961712364    -2.64200409072353919069622638442630095398    -.1041018872643088911811588312666838303387
    30.92682955955331678813303571521264817999    2.80210261253158421858469019160224721904    -2.90580343423747460228613379919017598958    -.1037008217058903837014436075879287705367
    34.12285399876871126741343308691055232433    3.092682955955331678813303571521264818      -3.19602443921539447928039737169790414434    -.103341483260062800467093800176639326342
    37.638158462159967879743917538181782319      3.41228539987687112674134330869105523243    -3.51530446339125661233048445127122999467    -.1030190635143854855891411425801747622352
    41.50470370319812202007921724678093696904    3.7638158462159967879743917538181782319     -3.86654524103815414033529970859915465004    -.1027293948221573523609079547809764181379
    45.75764292258624883166741769319641984964    4.1504703703198122020079217246780936969     -4.2529392193881268115882004464154828806     -.1024688490683146095802787217373891837043
    50.43564147012442366973812108448386221994    4.57576429225862488316674176931964198496    -4.6779985475381748380707033912874423703     -.1022342552795499549039616219678003853391
    55.58122844918730950619389235836397320322    5.04356414701244236697381210844838622199    -5.14558697906288583645577127388011098328    -.1020228320504434694819591654317247612918
    61.24118342582680404391486258093828670879    5.55812284491873095061938923583639732032    -5.65995497663949453772097022257431350557    -.101832131720763587101580986737916185248
    67.46696176235902441802665063020988620088    6.12411834258268040439148625809382867088    -6.22577833653222037411178804927159949209    -.1016599939495399697203017911777708212097
    74.31516244545590739446264505471606392721    6.74669617623590244180266506302098862009    -6.84820068309688297643599442450617772633    -.1015045068609805346333293614851891062386
    81.84804266433728981605219060133882952277    7.43151624454559073944626450547160639272    -7.53288021888138242158954554662276559556    -.1013639743357916821432810411511592028388
    90.13408381909514529861762687529961937024    8.18480426643372898160521906013388295228    -8.28604115475785548256543627396078984747    -.1012368883241265009602172138269068951899

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Lvl C'est le nombre de lignes ?

  8. #8
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    with cte_nb_x (X) as
    (
    select 17 from dual
    )
      ,  cte_tableA (B, D, C, A, X, lvl) as
    (
    select X*10/100 as B
         , X*10/100 / (1-X) as D
         , (X*10/100 / (1-X)) - X*10/100 as C
         , X - (X*10/100 / (1-X)) + X*10/100 as A
         , X
         , 1
      from cte_nb_x
     where X > 1
     union all
    select A*10/100 as B
         , A*10/100 / (1-A) as D
         , (A*10/100 / (1-A)) - A*10/100 as C
         , A - (A*10/100 / (1-A)) + A*10/100 as A
         , X
         , lvl + 1
      from cte_tableA
     where lvl < X
    )
    select A, B, C, D
      from cte_tableA
     
    A                                            B                                           C                                            D
    -----------------------------------------    -----------------------------------------   ----------------------------------------     ------------------------------------------
    18.80625                                     1.7                                         -1.80625                                     -.10625
    20.79249100561600561600561600561600561601    1.880625                                    -1.98624100561600561600561600561600561601    -.1056160056160056160056160056160056160056
    22.97679252731912017776385517541062251282    2.0792491005616005616005616005616005616     -2.18430152170311456175823916979461689681    -.1050524211415140001576775692330163352121
    25.37902203459230299515067553159617123643    2.29767925273191201777638551754106225128    -2.40222950727318281738682035618554872361    -.1045502545412707996104348386444864723334
    28.02102612531584218584690191602247219041    2.53790220345923029951506755315961712364    -2.64200409072353919069622638442630095398    -.1041018872643088911811588312666838303387
    30.92682955955331678813303571521264817999    2.80210261253158421858469019160224721904    -2.90580343423747460228613379919017598958    -.1037008217058903837014436075879287705367
    34.12285399876871126741343308691055232433    3.092682955955331678813303571521264818      -3.19602443921539447928039737169790414434    -.103341483260062800467093800176639326342
    37.638158462159967879743917538181782319      3.41228539987687112674134330869105523243    -3.51530446339125661233048445127122999467    -.1030190635143854855891411425801747622352
    41.50470370319812202007921724678093696904    3.7638158462159967879743917538181782319     -3.86654524103815414033529970859915465004    -.1027293948221573523609079547809764181379
    45.75764292258624883166741769319641984964    4.1504703703198122020079217246780936969     -4.2529392193881268115882004464154828806     -.1024688490683146095802787217373891837043
    50.43564147012442366973812108448386221994    4.57576429225862488316674176931964198496    -4.6779985475381748380707033912874423703     -.1022342552795499549039616219678003853391
    55.58122844918730950619389235836397320322    5.04356414701244236697381210844838622199    -5.14558697906288583645577127388011098328    -.1020228320504434694819591654317247612918
    61.24118342582680404391486258093828670879    5.55812284491873095061938923583639732032    -5.65995497663949453772097022257431350557    -.101832131720763587101580986737916185248
    67.46696176235902441802665063020988620088    6.12411834258268040439148625809382867088    -6.22577833653222037411178804927159949209    -.1016599939495399697203017911777708212097
    74.31516244545590739446264505471606392721    6.74669617623590244180266506302098862009    -6.84820068309688297643599442450617772633    -.1015045068609805346333293614851891062386
    81.84804266433728981605219060133882952277    7.43151624454559073944626450547160639272    -7.53288021888138242158954554662276559556    -.1013639743357916821432810411511592028388
    90.13408381909514529861762687529961937024    8.18480426643372898160521906013388295228    -8.28604115475785548256543627396078984747    -.1012368883241265009602172138269068951899

    ici A,B,C,D sont des variables, comment peut-on générer ça?

    si c'est le nombre d'itérations, ou est le nombre initial X ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] changer le nom d'une variable à chaque itération
    Par CeCherPH dans le forum MATLAB
    Réponses: 3
    Dernier message: 05/08/2013, 08h21
  2. initialisation des variable avec une boucle
    Par grospatapouf dans le forum Langage
    Réponses: 10
    Dernier message: 10/01/2009, 12h17
  3. Réponses: 4
    Dernier message: 21/03/2008, 17h40
  4. initialiser une variable avec de l'hexadecimale
    Par dietrich dans le forum VB.NET
    Réponses: 1
    Dernier message: 12/01/2007, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo