Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Buzina Lopes

C Incoerencia dos resultados em uma questão de vetores

Recommended Posts

#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

Compartilhar este post


Link para o post
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);
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

Editado por Simon Viegas
PS

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

 

Editado por Simon Viegas

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×