Ir ao conteúdo
  • Cadastre-se

C++ Matriz trocando os valores sozinho


Ir à solução Resolvido por devair1010,

Posts recomendados

Estou com um problema em um programa que calcula a área de uma figura que está no primeiro quadrante do sistema bidimensional. Percebi que a matriz que eu coloquei para armazenar as coordenadas vértices da figura está alterando o valor toda vez que é realizada uma operação. Tem casos que calcula certinho, mas a maioria não.

#include <iostream>

using namespace std;

int main() {

    int nvert, i, j;
    string fig;
    double a, bmenor, bmaior, h, area=0;
    cout << "Digite a quantidade de vertices: ";
    cin >> nvert;

    cout << "Do ponto 1 para o 2 a figura esta na (direita/esquerda): ";
    cin >> fig;

    double pto[nvert][2];

    for (i=0; i<nvert; i++){
        cout << "Insira as coordenadas do vertice " << i+1 <<" (x,y): ";
        cin >> pto[i][0] >> pto[i][1];
    }

    for (i=0; i<nvert; i++){
        for (j=0; j<2; j++){
                cout << pto[i][j] << " ";
        }
        cout << "\n";
    }

    i=0;
    double integral[i];

    while (i < nvert){

        if (i != nvert-1){

            a = (pto[i][1] - pto[i+1][1])/(pto[i][0] - pto[i+1][0]);
            bmaior = pto[i+1][1];
            h = pto[i+1][0] - pto[i][0];

        } else {

            a = (pto[i][1] - pto[0][1])/(pto[i][0] - pto[0][0]);
            bmaior = pto[0][1];
            h = pto[0][0] - pto[i][0];

        }

        if (fig == "esquerda"){
            h = -h;
        }

        cout << i << "\n" << "Coeficiente angular: " << a << "\n";

        bmenor = pto[i][1];

        integral[i] = (bmenor + bmaior) * h / 2;

        cout << "Altura: " << h << "\nIntegral: " << integral[i] << "\n\n";

        area+=integral[i];
        i+=1;
    }

    for (i=0; i<nvert; i++){
        for (j=0; j<2; j++){
                cout << pto[i][j] << " ";
        }
        cout << "\n";
    }

    cout << "Area: " << area << "\n";

    return 0;
}

Alguém sabe o que eu faço para manter os valores da matriz intactos?

Um exemplo de entrada com nvert = 8 e fig = esquerda e as coordenadas abaixo:

image.png.d62a57f7f367dae608a6837fa1eda5a2.png

Aqui a área tem que dar 7, mas não acontece isso.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@matheusvitor     seu código está bom ,  creio que precisa incluir as bibliotecas 

#include <cstring>
#include <cmath>

e o que está causando essa modificação na Matriz pto , é por você criou o vetor integral com a quantidade de elementos igual a zero , ali

double integral[i];

e assim o compilador não sabe onde colocar os valores inseridos nas posições desse vetor , assim ele sobrepõe os valores de pto , então você poderia colocar essa linha assim  :

double integral[nvert];

e mais , o resultado desse exemplo que você deu , está sendo igual  a  -7 , mas como não existe área negativa então consideremos que seja  7 , sem o sinal de menos , e para que apareça esse resultado certo , então você poderia usar a função  abs assim :

area = abs(area);

, pois assim se o resultado for negativo , será modificado para positivo .

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...