-4

このアルゴリズムに関するプロジェクトの最後の部分で問題が発生しています。ベクトルの.size()に問題があります。それは私に何も与えません。デバッグしようとするたびに0になります。それが私の関数が正しく機能していないことを意味するのかどうかはわかりません。

私はプログラミングに不慣れで、助けが必要です。

編集1:例外を与える新しいコードを追加しました。

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <vector>


using namespace System;
using namespace std;


typedef struct Linea {
    int a;
    int q;
    int b;
    int r;
} SLinea;

int algoritmoeuclides(int a,int b)
{
    if (a%b==0)
        return b;
    return algoritmoeuclides(b,a%b);
}

std::pair<int, int>division(int dividendo,int divisor)
{
    int resultado=0;
    int residuo=0;

    residuo=dividendo%divisor;
    resultado=dividendo/divisor;
    std::pair<int, int>retorno;
    retorno.first=resultado;
    retorno.second=residuo;
    return retorno;

}

std::pair<int, int>EuclidesExtendido(int a,int b,vector<SLinea*> aux)
{
    std::pair<int, int> tsqt;
    int q,r,s,t;
    SLinea *var;

    if (b == 0)
        return std::pair<int, int> (1, 0);
    else
    {

        std::pair<int, int>qr = division(a, b);
        q=qr.first;
        r=qr.second;
        std::pair<int, int>st = EuclidesExtendido(b, r,aux);
        s=st.first;
        t=st.second;
    }
    tsqt.first=t;
    tsqt.second=s-q*t;
    var->a=a;
    var->b=b;
    var->q=q;
    var->r=r;
    aux.push_back(var);

    return tsqt;



}
int main()

{
    int a=23;
    int b=120;
    int s,t;
    vector<SLinea*> Ecuacion;


    std::pair<int, int>st=EuclidesExtendido(a,b,Ecuacion);
    s=st.first;
    t=st.second;
    int resultado=algoritmoeuclides(a,b);
    int n=Ecuacion.size();
    for (int i=0;i<n;i++)
    {

        printf("%d=%dx%d+%d\n",Ecuacion[i]->a,Ecuacion[i]->b,Ecuacion[i]->q,Ecuacion[i]->r);



    }
    printf("MCD= %d\n ",resultado);
    printf("s=%d  \nt=%d",s,t);
    system("pause");

}  

    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    #include <vector>


    using namespace System;
    using namespace std;


    typedef struct Linea {
        int a;
        int q;
        int b;
        int r;
    } SLinea;

    int algoritmoeuclides(int a,int b)
    {
        if (a%b==0)
            return b;
        return algoritmoeuclides(b,a%b);
    }

    std::pair<int, int>division(int dividendo,int divisor)
    {
        int resultado=0;
        int residuo=0;

        residuo=dividendo%divisor;
        resultado=dividendo/divisor;
        std::pair<int, int>retorno;
        retorno.first=resultado;
        retorno.second=residuo;
        return retorno;

    }

    std::pair<int, int>EuclidesExtendido(int a,int b,vector<SLinea> aux)
    {
        std::pair<int, int> tsqt;
        int q,r,s,t;
        SLinea var;

        if (b == 0)
            return std::pair<int, int> (1, 0);
        else
        {

            std::pair<int, int>qr = division(a, b);
            q=qr.first;
            r=qr.second;
            std::pair<int, int>st = EuclidesExtendido(b, r,aux);
            s=st.first;
            t=st.second;
        }
        tsqt.first=t;
        tsqt.second=s-q*t;
        var.a=a;
        var.b=b;
        var.q=q;
        var.r=r;
        aux.push_back(var);

        return tsqt;



    }
    int main()

    {
        int a=23;
        int b=120;
        int s,t;
        vector<SLinea> Ecuacion;


        std::pair<int, int>st=EuclidesExtendido(a,b,Ecuacion);
        s=st.first;
        t=st.second;
        int resultado=algoritmoeuclides(a,b);
        int n=Ecuacion.size();
        for (int i=0;i<n;i++)
        {

            printf("%d=%dx%d+%d\n",Ecuacion[i].a,Ecuacion[i].b,Ecuacion[i].q,Ecuacion[i].r);



        }
        printf("MCD= %d\n ",resultado);
        printf("s=%d  \nt=%d",s,t);
        system("pause");

    }
4

1 に答える 1

2
std::pair<int, int> EuclidesExtendido(int a,int b,vector<SLinea> aux)

この関数はパラメーターauxを値で受け取ります。つまり、引数として使用されているもののコピーを取得します。そこから持っていきましょう...

于 2012-05-26T02:38:28.830 に答える