Ir ao conteúdo

C++ Matriz trocando os valores sozinho


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

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
  • Solução
Postado

@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

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!