Ir ao conteúdo
  • Cadastre-se

C Incoerencia dos resultados em uma questão de vetores


Buzina Lopes

Posts recomendados

#include<stdio.h>
#include<stdlib.h>
/*	Dados 2 vetores inteiros, obtenha o vetor resultante que contenha nesta
ordem: o menor elemento do segundo vetor, a parte inteira da media dos elementos
do primeiro vetor, o menor par negativo do segundo vetor e o maior impar positi-
vou do primeiro vetor, suponha que exista pelo menos uma ocorrencia de cada situ-
ação*/
//Menor elemento vetor 2
int MenorElemVetor2(int v2[], int n1)
{
	int i, menor = v2[0];
	for(i = 0; i < n1; i++)
	{
		if(menor > v2[i])
		{
			menor = v2[i];
		}
	}
	return menor;
}
//Media elemento vetor 1
int MediaElemVetor1(int v1[], int n1)
{
	int i, media = 0;
	for(i = 0; i < n1; i++)
	{
		media = media + v1[i];
	}
	return media / n1;
}
//Menor, par e negativo vetor 2
int MenorParNegaVetor2(int v2[], int n2)
{
	int i, mpn = 0, mpn1 = 0;
	for(i = 0; i < n2; i++)
	{
		if(v2[mpn] > v2[i])
		{
			mpn = i;
		}
	}
	if((v2[mpn] < 0)&&(v2[mpn] % 2 == 0))
	{
		mpn1 = v2[mpn];
	}
	return mpn1;
}
//Maior, impar e positivo vetor 1
int MaiorImparPositivoVetor1(int v1[], int n1)
{
	int i, mip = 0, mip1 = 0;
	for(i = 0; i < n1; i++)
	{
		if(v1[i] > v1[mip])
		{
			mip = i;
		}
	}
	if((v1[mip] % 2 != 0) && (v1[mip] > 0))
	{
		mip1 = v1[mip];
	}
	return mip1;
}
void BotaNolugar(int vres[], int MeVet2, int MediaVet1, int MenPaNegVet2, int MaiImpaPosVet1)
{
	vres[0] = MeVet2;
	vres[1] = MediaVet1;
	vres[2] = MenPaNegVet2;
	vres[3] = MaiImpaPosVet1;
}
void PrintaVetor(int vres[])
{
	int i;
	for(i = 0; i < 4; i++)
	{
		printf("Resultado da %d condicao: %d\n", i, vres[i]);
	}
}
int main()
{
	int n1, n2, *v1, *v2, *vres, i;
	printf("Digite o tamanho do primeiro vetor:\n");
	scanf("%d", &n1);
	printf("Digite o tamanho do segundo vetor:\n");
	scanf("%d", &n2);
	v1 = (int*)malloc(n1 * sizeof(int));
	v2 = (int*)malloc(n2 * sizeof(int));
	vres = (int*)malloc((n1 + n2) * sizeof(int));
	printf("Digite os elementos do primeiro vetor:\n");
	for(i = 0; i < n1; i++)
	{
		scanf("%d", &v1[i]);
	}
	printf("Digite os elementos do segundo vetor:\n");
	for(i = 0; i < n2; i++)
	{
		scanf("%d", &v2[i]);
	}
	int MeVet2 = MenorElemVetor2(v2, n1);
	int MediaVet1 = MediaElemVetor1(v1, n1);
	int MenPaNegVet2 = MenorParNegaVetor2(v2, n2);
	int MaiImpaPosVet1 = MaiorImparPositivoVetor1(v1, n1);
	BotaNolugar(vres, MeVet2, MediaVet1, MenPaNegVet2, MaiImpaPosVet1);
	PrintaVetor(vres);
}

Não sei porque mas a terceira condição não está funcionando direito

Link para o comentário
Compartilhar em outros sites

@Buzina Lopes Na verdade está funcionando, já que ela só retorna 0 ou um numero negativo par. Tenta entrar com um -4 no segundo vetor. Segue o código, sem muita mudança:

#include<stdio.h>
#include<stdlib.h>
/*      Dados 2 vetores inteiros, obtenha o vetor resultante que contenha nesta
ordem: o menor elemento do segundo vetor, a parte inteira da media dos elementos
do primeiro vetor, o menor par negativo do segundo vetor e o maior impar positi-
vou do primeiro vetor, suponha que exista pelo menos uma ocorrencia de cada situ-
ação*/
//Menor elemento vetor 2
int MenorElemVetor2(int v2[], int n1)
{
        int i, menor = v2[0];
        for(i = 0; i < n1; i++)
        {
                if(menor > v2[i])
                {
                        menor = v2[i];
                }
        }
        return menor;
}
//Media elemento vetor 1
int MediaElemVetor1(int v1[], int n1)
{
        int i, media = 0;
        for(i = 0; i < n1; i++)
        {
                media = media + v1[i];
        }
        return media / n1;
}
//Menor, par e negativo vetor 2
int MenorParNegaVetor2(int v2[], int n2)
{
        int i, mpn = 0, mpn1 = 0;
        for(i = 1; i < n2; i++)
        {
                if(v2[mpn] > v2[i])
                {
                        mpn = i;
                }
        }
        if((v2[mpn] < 0)&&(v2[mpn] % 2 == 0))
        {
                mpn1 = v2[mpn];
        }
        return mpn1;
}
//Maior, impar e positivo vetor 1
int MaiorImparPositivoVetor1(int v1[], int n1)
{
        int i, mip = 0, mip1 = 0;//retorna esse se não tiver valor negativo
        for(i = 0; i < n1; i++)
        {
                if(v1[i] > v1[mip])
                {
                        mip = i;
                }
        }
        if((v1[mip] % 2 != 0) && (v1[mip] > 0))
        {
                mip1 = v1[mip];
        }
        return mip1;
}
void BotaNolugar(int vres[], int MeVet2, int MediaVet1, int MenPaNegVet2, int MaiImpaPosVet1)
{
        vres[0] = MeVet2;
        vres[1] = MediaVet1;
        vres[2] = MenPaNegVet2;
        vres[3] = MaiImpaPosVet1;
}
void PrintaVetor(int vres[])
{
        int i;
        for(i = 0; i < 4; i++)
        {
                printf("Resultado da %d condicao: %d\n", i, vres[i]);
        }
}
int main()
{
        int n1, n2, *v1, *v2, *vres, i;
        printf("Digite o tamanho do primeiro vetor:\n");
        scanf("%d", &n1);
        printf("Digite o tamanho do segundo vetor:\n");
        scanf("%d", &n2);
        v1 = (int*)malloc(n1 * sizeof(int));
        v2 = (int*)malloc(n2 * sizeof(int));
        vres = (int*)malloc((n1 + n2) * sizeof(int));
        printf("Digite os elementos do primeiro vetor:\n");
        for(i = 0; i < n1; i++)
        {
                scanf("%d", &v1[i]);
        }
        printf("Digite os elementos do segundo vetor:\n");
        for(i = 0; i < n2; i++)
        {
                scanf("%d", &v2[i]);
        }
        int MeVet2 = MenorElemVetor2(v2, n2);//mudei aqui
        int MediaVet1 = MediaElemVetor1(v1, n1);
        int MenPaNegVet2 = MenorParNegaVetor2(v2, n2);
        int MaiImpaPosVet1 = MaiorImparPositivoVetor1(v1, n1);
        BotaNolugar(vres, MeVet2, MediaVet1, MenPaNegVet2, MaiImpaPosVet1);
        PrintaVetor(vres);
}

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Buzina Lopes.

 

1 hora atrás, Buzina Lopes disse:

Não sei porque mas a terceira condição não está funcionando direito

 

O quê não está funcionando? você precisa especificar qual o problema.

 

 

PS: ao final do programa, seria bom imprimir um texto demonstrando o que é cada resposta, algo como:

- menor elemento do segundo vetor                       : XXX
- parte inteira da media dos elementos do primeiro vetor: XXX
- menor par negativo do segundo vetor                   : XXX
- maior ímpar positivo do primeiro vetor                : XXX

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @TYSQUARE89.

 

57 minutos atrás, TYSQUARE89 disse:

@Simon Viegas Não concordo por ter apagado meu post, já que não postei código pronto, apenas postei o código dele comentado.

 

Acho que interpretei errado, peço desculpa... nesse sentido, vou reaprovar a postagem e peço a gentileza explicar quais mudanças foram feitas e o porquê delas.

 

Abraços

 

 

Link para o comentário
Compartilhar em outros sites

@Simon Viegas não precisa pedir desculpas, acontece. Como eu disse, não modifiquei quase nada, segue o que alterei:

 

Abaixo, ele havia colocado (v2, n1), mas como é apenas para o 2 vetor, e se ele colocasse tamanhos diferentes poderia dar erro de segmento.

int MeVet2 = MenorElemVetor2(v2, n2);

 

Em relação ao terceiro elemento, eu expliquei que na verdade está funcionando, já que ela só retorna 0 ou um numero negativo par. Tenta entrar com um -4 no segundo vetor. Isso acontece por causa dessa parte:

//altera o retorno se for:
//. menor que zero
//. par
if((v2[mpn] < 0)&&(v2[mpn] % 2 == 0)) {
	mpn1 = v2[mpn];
}

 

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