Ir ao conteúdo

C Programa para fazer multiplicação escalar de dois vetores


Ir à solução Resolvido por jcsomavilla,

Posts recomendados

Postado

Boa noite, estou precisando de um auxilio neste exercício.

Preciso fazer dois vetores em struct e usar ponteiros no decorrer do programa, e também utilizar funções.

O exercício solicita 2 vetores e o produto escalar entre eles ((x1*x2)+(y1*y2)+(z1+z2))

Desenvolvi este código abaixo, porém não estou conseguindo fazer os valores que o scanf armazena passar para a função para realizar as operações, alguém consegue me auxiliar?

#include <stdio.h>
float escalar (int *v1_x, int *v1_y, int *v1_z, int *v2_x, int *v2_y, int *v2_z){
    int mx, my, mz, result;
    mx = *v1_x * *v2_x;
    my = *v1_y * *v2_y;
    mz = *v1_z * *v2_z;

    result = mx+my+mz;
    printf("O produto escalar é %d", result);
}
int main(){
    struct vetor{
        int x;
        int y;
        int z;
    };
    struct vetor Vetor1, *ponteiro_Vetor1, Vetor2, *ponteiro_Vetor2;
    ponteiro_Vetor1 = &Vetor1;
    ponteiro_Vetor2 = &Vetor2;

  	printf("Insercao de dados do Vetor1:\n");
  
    printf("informe a coordenada X: ");
    scanf("%d", &ponteiro_Vetor1->x);

    printf("informe a coordenada Y: ");
    scanf("%d", &ponteiro_Vetor1->y);

    printf("informe a coordenada Z: ");
    scanf("%d", &ponteiro_Vetor1->z);

    printf("Inserção de dados do Vetor2:\n");

    printf("informe a coordenada X: ");
    scanf("%d", &ponteiro_Vetor2->x);

    printf("informe a coordenada Y: ");
    scanf("%d", &ponteiro_Vetor2->y);

    printf("informe a coordenada Z: ");
    scanf("%d", &ponteiro_Vetor2->z);

    escalar(ponteiro_Vetor1->x, ponteiro_Vetor1->y, ponteiro_Vetor1->z, ponteiro_Vetor2->x, ponteiro_Vetor2->y, ponteiro_Vetor2->z);
}

Desde já agradeço.

Postado
18 minutos atrás, jcsomavilla disse:

fazer dois vetores em struct e usar ponteiros no decorrer do programa, e também utilizar funções

 

Um pouco confuso isso que descreveu. Tem um enunciado mais preciso?

Seu programa está um pouco confuso e difícil de ler e acho que não atende ao lance dos vetores e struct. Não sei o que são "vetores em struct" ao certo :( 

 

Se você não tem nada mais específico, veja como pode ser mais simples:

struct origem
{
    int n;
    int vetor1[100];
    int vetor2[100];
};

struct destino
{
    int resultado[100];
};

int produto_escalar(int N, int* vetor1, int* vetor2, int* resultado);

 

Na struct origem tem os vetores vetor1 e vetor2 de tamanho n. E você vai calcular o produto escalar e gravar no destino na struct destino usando a função produto_escalar. Claro que só vai usar um n e aparentemente igual a 3 fixo no seu caso

 

Entenda que você pode declarar os vetores assim:

    struct origem  de = { 3, { 2,4,6 }, { 3,6,9 } };
    struct destino para;

E já testar sua função, antes de perder seu tempo digitando coisas para testar. Seu enunciado diz que tem que ler do teclado? 
 

Não acha mais simples? São vetores, estão dentro de structs, estão inicializados e pode chamar sua função diretamente:

    int v = produto_escalar(3, de.vetor1, de.vetor2, para.resultado);

E a função recebe os ponteiros e faz as contas. Claro que os 3 vetores tem a mesma dimensão e N não passando de 100 assim vai estar bem.

 

Postado

Mas o exemplo que mostrou apenas identifica um ponto no espaço. Mas pode usar o exemplo que te mostrei.

 

Não estou certo do que seja um vetor assim. Do modo como escreveu (x1,y1,z1) é um ponto e (x2,y2,z2) outro ponto e definem um segmento no espaço 3D

  • Confuso 1
Postado
struct vetor{
    float x;
    float y;
    float z;
};
typedef struct vetor Vetor;

float escalar(Vetor* v1, Vetor* v2);

x, y e z representam as magnitudes das projeções do vetor sobre as 3 dimensões X, Y e Z, e calcular o produto escalar é simples:

 

CodeCogsEqn.gif.d94c167bab76e44fc99cadd6eff94c8b.gif

 

  • Curtir 1
Postado

Evidente (para mim) que os ponteiros são de estruturas de uma coordenada cartesiana 3d, ou seja, vetor é um ponto no espaço.

 

Um Produto Escalar é ainda mais simples ...

16 horas atrás, jcsomavilla disse:

escalar entre eles ((x1*x2)+(y1*y2)+(z1+z2))

Em palavras,  uma soma dos produtos das coordenadas de pares ordenados.

 

 

Então deixou de acerta....

16 horas atrás, jcsomavilla disse:

float escalar (int *v1_x, int *v1_y, int *v1_z, int *v2_x, int *v2_y, int *v2_z)

Com a proposta do exercício que vem de um protótipo. Nós (alunos) temos liberdade para acrescentar, modificar nunca!

 

Postado
3 horas atrás, Mauro Britivaldo disse:

Evidente (para mim) que os ponteiros são de estruturas de uma coordenada cartesiana 3d, ou seja, vetor é um ponto no espaço.

 

Vetor não é um ponto... Vetor tem direção, sentido e magnitude, enquanto um ponto é apenas uma posição no espaço.

 

download.png.0431d2df0d67f8ca245b0ddc5527fd8e.png

 

O vetor u acima pode ser descrito de forma descomposta na direção dos vetores unitários i, j, k como:

CodeCogsEqn.gif.0e5e09d7c373acdd5a0157d6f2d0ea8d.gif

E as magnitudes x, y e z das decomposições do vetor u coincidem numericamente com as coordenadas do ponto A no espaço, mas o vetor u não é igual ao ponto A.

  • Confuso 1
Postado

No Gráfico tem um ponto A 🤪.

Acredito que tentou me dizer que o um vetor não é somente um ponto. E não afirmei que o vetor é somente um ponto, afirmei que por motiva de sua estrutura no código é um ponto.

 

Lê-se:

19 horas atrás, isrnick disse:

Evidente (para mim) que os ponteiros (vetor) são de estruturas de uma coordenada cartesiana 3d, ou seja (isto é), vetor é um ponto no espaço...

 

E no geral são primitivamente definidos a partir de um ponto!

Postado
20 horas atrás, isrnick disse:

coincidem numericamente com as coordenadas do ponto A

discordo, não se trada de uma coincidência. 

Mas sim de quem definiu o quê! 

        <>Se o ponto A é a extremidade do vetor no espaço (Vetor definiu o ponto).

        <>Se o vetor é definido no espaço a partir do ponto  (Geogebra usa 1 ou dois para Vetores).

 

(Somente vi isso agora)

 

 

Postado
1 hora atrás, Mauro Britivaldo disse:

discordo, não se trada de uma coincidência, mas sim de quem definiu o quê!  Se o ponto é a extremidade do vetor, ou se o vetor é definido a partir do ponto.

 

(Somente vi isso agora)

 

 

 

Veja os 2 vetores u e v no espaço 2D abaixo:

 

Vetores.JPG.f79b521e068324318f4bf929d0c195ca.JPG

 

Tem 4 pontos no plano:

A (0, 0) 

B (2, 3)

C (-2, 0)

D (0, 3)

 

Mas os vetores u e v são ambos definidos com:
u = 2 i + 3 j

v = 2 i + 3 j

 

B é o único ponto em que as coordenadas coincidem com as magnitudes das projeções dos vetores na direção dos vetores unitários i e j . Observe também que o vetor v não tem relação alguma com o ponto B.
 

Postado
46 minutos atrás, Mauro Britivaldo disse:

O vetor do ponto B é u;

 

Claramente não é.

 

Se quer definir relacionando pontos terá que dizer que uimage.png.9996d02b3b0afdce25bf97782c6b8c48.png.

Não há como descrever um vetor com apenas 1 ponto.

 

 

43 minutos atrás, Mauro Britivaldo disse:

O vetor v é a diferença dos pontos C, D ( vetor no ponto B )

 

?? Não entendi.

O vetor v não tem relação alguma com o ponto B.

Postado
1 hora atrás, Mauro Britivaldo disse:

Use esses comandos: 1 e 2 pontos.

 

O Vector((3, 2)) da imagem é apenas uma abreviação de Vector((0, 0), (3, 2)), é assumido que o vetor parte de um ponto na origem, logo sempre é necessária a existência de 2 pontos indicando início e fim do vetor para obter um vetor.

 

 

 

1 hora atrás, Mauro Britivaldo disse:

Evidente (para mim) que  u ==  v, B que é extremidade de ambos.

 

Nova definição matemática por @Mauro Britivaldo.

Publica a tese e fica famoso. 😆

  • Confuso 1
Postado
1 hora atrás, isrnick disse:

O Vector((3, 2)) da imagem é apenas uma abreviação de Vector((0, 0), (3, 2)), é assumido que o vetor parte de um ponto na origem, logo sempre é necessária a existência de 2 pontos indicando início e fim do vetor para obter um vetor

Um ponto é necessário para definir o vetor posição daquele ponto; só isso, precisa dessa enrolação toda?

 
1 hora atrás, isrnick disse:

Nova definição matemática por @Mauro Britivaldo.

Não é nova e se que é um, está evidente que os vetores são iguais e de mesma posição.

 

1 hora atrás, isrnick disse:

Evidente (para mim) que  u ==  v, B que é extremidade de ambos.

u é igual a v e ambos são vetores do ponto B.

 

1 hora atrás, isrnick disse:

Publica a tese e fica famoso. 😆

Dispenso sua piadinhas desnecessárias.

Postado
1 hora atrás, Mauro Britivaldo disse:

Um ponto é necessário para definir o vetor posição daquele ponto; só isso, precisa dessa enrolação toda?

 

Sim, precisa. A "enrolação" se chama rigor matemático.

Existe uma definição matemática dizendo exatamente o que é um vetor.

 

 

1 hora atrás, Mauro Britivaldo disse:

Não é nova e se que é um, está evidente que os vetores são iguais e de mesma posição.

 

1 hora atrás, Mauro Britivaldo disse:

Evidente (para mim) que  u ==  v, B que é extremidade de ambos.
u é igual a v e ambos são vetores do ponto B.

 

Me mostre uma fonte confiável que defina que vetores pertencem a 1 ponto, e que pode-se dizer que "vetor x é um vetor do ponto Y", e que todos os vetores paralelos e de mesma magnitude e sentido pertencem ao mesmo ponto, como você está afirmando.

 

Postado
1 hora atrás, isrnick disse:

Me mostre uma fonte confiável que defina que vetores pertencem a 1 ponto, e que pode-se dizer que "vetor x é um vetor do ponto Y", e que todos os vetores paralelos e de mesma magnitude e sentido pertencem ao mesmo ponto, como você está afirmando.

Por que? Por acaso u não é igual a v? o vetor posição do ponto B não é respectivamente igual os dois?

 

1 hora atrás, isrnick disse:

Sim, precisa. A "enrolação" se chama rigor matemático.

Existe uma definição matemática dizendo exatamente o que é um vetor.

Eu tratei isso bem antes, acho que até mesmo antes de suas postagens.
 
Em 11/05/2020 às 23:27, Mauro Britivaldo disse:

Se a origem é o ponto O(0,0,0) então um ponto v(x,y,z)  diferente de O define bem um vetor não nulo.

A dedução é que quaisquer que sejam os pontos V se a origem é O as coordenadas do vetor (O,V) é o ponto V, Ou bem melhor (para mim) é:

3 horas atrás, Mauro Britivaldo disse:

Um ponto é necessário para definir o vetor posição daquele ponto.

😒 No rigor dos matemáticos (abrindo mão da aritmética).

 

Olha só o que por acidente encontrei (da imagem Geogebra) não é um fonte cientifica, mas pra essa bobagem está ótimo um aplicativo confiável.

Geogebra.png

  • Solução
Postado
#include <stdio.h>
struct vetor{
    float x;
    float y;
    float z;
};

typedef struct vetor Vetor;


float escalar (Vetor* v1, Vetor* v2){
    float resultado;
    resultado = ((v1->x*v2->x)+(v1->y*v2->y)+(v1->z*v2->z));
    return resultado;
}
int main(){
Vetor v1, v2;

printf("preencha o primeiro vetor: \n");

printf("Valor de x: ");
scanf("%f", &v1.x);

printf("Valor de y: ");
scanf("%f", &v1.y);

printf("Valor de z: ");
scanf("%f", &v1.z);

printf("preencha o segundo vetor: \n");

printf("Valor de x: ");
scanf("%f", &v2.x);

printf("Valor de y: ");
scanf("%f", &v2.y);

printf("Valor de z: ");
scanf("%f", &v2.z);

printf("%f", escalar (&v1, &v2));

}

Pessoal, consegui finalizar a questão. Estou postando a resolução dela aqui. Muito obrigada pelo auxílio de todos vocês. :D

  • Curtir 2
  • Amei 1
Postado

@Mauro Britivaldo

Posição é relativa ao ponto de origem escolhido para o plano cartesiano XY, você pode escolher qualquer ponto no espaço como origem, escolhendo outro ponto diferente de A como origem as coordenadas do ponto B em relação a esta origem seriam diferentes, o que significa que o vetor de posição do ponto B mudaria, ou seja o vetor de posição de um ponto (como qualquer vetor) depende de 2 pontos: O próprio ponto e o ponto onde está a origem.

 

Note também que na nova origem os vetores u e v não mais seriam equipolentes/iguais ao vetor de posição do ponto B, logo é impossível dizer que u e v pertencem ao ponto B.

 

Aí você vai dizer que na nova origem os vetores u e v pertencem a outro ponto? Como qualquer ponto pode ser escolhido como origem, então u e v pertencem a todos os infinitos pontos do plano? Isso seria o mesmo que dizer que eles não pertencem a nenhum ponto...

Postado

Para mim está correta sua resposta @jcsomavilla .

 

-----------------------------------------------------------------------

 
1 hora atrás, isrnick disse:

@Mauro Britivaldo

Posição é relativa ao ponto de origem escolhido para o plano cartesiano XY, você pode escolher qualquer ponto no espaço como origem, escolhendo outro ponto diferente de A como origem as coordenadas do ponto B em relação a esta origem seriam diferentes, o que significa que o vetor de posição do ponto B mudaria, ou seja o vetor de posição de um ponto (como qualquer vetor) depende de 2 pontos: O próprio ponto e o ponto onde está a origem.

 

Note também que na nova origem os vetores u e v não mais seriam equipolentes/iguais ao vetor de posição do ponto B, logo é impossível dizer que u e v pertencem ao ponto B.

 

Aí você vai dizer que na nova origem os vetores u e v pertencem a outro ponto? Como qualquer ponto pode ser escolhido como origem, então u e v pertencem a todos os infinitos pontos do plano? Isso seria o mesmo que dizer que eles não pertencem a nenhum ponto...

Tem muitos pertences em sua postagem.  Não sei porque dizer que o vetor não pertence o ponto B invalida que os vetores são iguais ao vetor de posição do ponto B. 

 

 

Postado

@jcsomavilla Dois pontos não definem  dois vetores, mas seu programa está de acordo com o enunciado inicial: tem a função, a struct, os ponteiros e tal. Mas antes de entregar sugiro consultar quem quer se criou esse enunciado.

 

@Mauro Britivaldo bastante folclórico seu conceito e seu exemplo

 

Note que o trecho que mostrou, até vou reproduzir aqui

 

image.png.9df3ac2b53b8c644e6b7a0793cd305cc.png

Não tem um sentido matemático e nem tem essa aspiração. Geogebra se define assim

 

image.png.edd2ad75c4a60b0ac738393a34fdeb27.png

 

segundo eles próprios em geogebra.org. São ferramentas para aprendizado online. E você pode desenhar seus próprios grafos, E formas geométricas. E vetores.

 

Como você talvez não tenha se importado em ler no desenho que postou vou ressaltar: no caso do desenho que enviou ele fala de vetor e é um comando do pacote e por isso está escrito lá Comando de Vetor e aquele texto só faz sentido porque está falando do comando na ferramenta em si: Comando de vetor e por isso o título.

 

1 hora atrás, Mauro Britivaldo disse:

mas pra essa bobagem está ótimo um aplicativo confiável

 

Sim, confiável para aprender online sobre vetores e grafos e geometria e todas as ferramentas que tem lá.

 

Sobre vetores em si, acho que deve se atentar à extensa explicação que @isrnick tentou te dar. Mas citando GeoGEbra

 

image.thumb.png.d5945fd4cacc45c8f10ef9f2a6939d1c.png

 

Veja que lá mesmo, falando do tal COMANDO VETOR, você pode aprender como desenhar um vetor, escolhendo.... o ponto inicial e o ponto final.

 

Um vetor tem 3 atributos

  • direção 
  • sentido
  • módulo. Ou magnitude como prefere chamar @isrnick ou comprimento extensão ou qualquer nome que tenha essa acepção
1 hora atrás, Mauro Britivaldo disse:

o vetor posição do ponto B não é respectivamente igual os dois?

 

Pois é. "Vetor posição do ponto" seria o que fora do comando vetor da ferramenta vetor do GeoGebra? Posição do ponto envolve um sistema de coordenadas e... coordenadas. Apenas. Pode ser em latitude e longitude, coordenadas polares, coordenadas cartesianas ou o CEP da rua mais o número. 

 

2 horas atrás, isrnick disse:

Evidente (para mim) que  u ==  v, B que é extremidade de ambos.
u é igual a v e ambos são vetores do ponto B.

 

"Evidente" seria uma afirmação exagerada. "Evidente para mim" já é adequado... "vetores do ponto B" seria o que na sua visão de matemática?
 

4 horas atrás, Mauro Britivaldo disse:

Um ponto é necessário para definir o vetor posição daquele ponto; só isso, precisa dessa enrolação toda?

 

"Um ponto é necessário para definir o vetor posição daquele ponto" é um conceito interessante. Sem o ponto afinal não haveria um ponto e aí não haveria como ter um vetor contendo aquele ponto e ficaríamos então sem o vetor e sem o ponto

 

Talvez devesse considerar a matemática como tal. E o Geogebra como tal. 

definição de vetor

 

Tenho formação por coincidência em matemática e achei bem curiosa essa noção de "vetor posição de ponto".

 

Veja uma definição para estudantes sobre vetor na primeira página em https://brasilescola.uol.com.br/o-que-e/fisica/o-que-sao-vetores.htm 
 

image.png.3e8286aab612ab80122650d8b189eca2.png


Ou tente 

 

image.png.f4f61da7da4180ff29f96446faec94c8.png

 

Usando o Google mesmo. E busque por algo que reforce a sua ideia.

 

 

Postado

@arfneto Sua contribuição é prolixa.

 

Só li até aqui.

4 horas atrás, arfneto disse:

bastante folclórico seu conceito e seu exemplo

E é mesmo! Quem falou  que minha intenção e fazer tu acreditar! Eu mal notei sua contribuição inicial toda confusa.

 

***

Faz eu perdeu meu tempo não.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!