Ir ao conteúdo

Posts recomendados

Postado

Escreva a função saoInvertidos que recebe dois vetores e respectivas quantidades de elementos e retorna 1 se estão
invertidos ou 0 caso contrário.

 

tento rodar este codigo e da um erro que eu desconheço venho tirando duvidas pelo forum e tem ajudado bastante mas sigo um leigo em vetores e funçoes. no caso a minha ideia era mostrar que se o numero for menor que 2( considertando que coloquei apenas os numeros 1 e 2 dentro do meu vetor) o vetor estar na posiçao correta.

 

#include <stdio.h>
#include <stdlib.h>
#define TAM 2

void saoInvertidos(int v1[], int v2[], int qt1, int qt2){
    int i, j;
    for (i = 0; i < 2;) {
            printf("0- não estão invertidos");

return saoInvertidos;
    }
    int main()
{
    int v1[2] = {1,2}, v2[2] ={1,2};
    saoInvertidos(2, v1);

    return 0;
}
}

  • Curtir 1
Postado
#include <stdio.h>
#include <stdlib.h>
#define TAM 2

int saoInvertidos(int v1[], int v2[], int qt1, int qt2){
  //implementar aqui o código para verificar se sao invertidos
  //caso afirmativo, return 1;
  return 0;//não sao invertidos
}
int main()
{
    int v1[TAM] = {1,2}, v2[TAM] ={2,1};
    if (saoInvertidos(v1,v2, TAM, TAM) == 1) printf("São invertidos\n"); 
    else printf("Não são invertidos\n");

    return 0;

}

A estrutura de seu código estava incorreta. 

Basta agora você implementar a parte para verificar se os vetores estão invertidos.

  • Curtir 1
  • Obrigado 1
Postado

po cara ai que esta a minha duvida, como fazer essa comparaçao utilizando os elementos de dentro dos vetores? Usando somente:

int i, j;
    for (i = 0; i < 2;) {
            printf("0- não estão invertidos");

 

da errado e u acredito que seja porque eu teria que usar os valores do vetor dentro deste codigo e não i e j, talvez sejam até eles mas exemplicando os vetores e seus valores.

  • Obrigado 1
Postado

@alan.modesto     para ver se os números vetores são iguais use o comando  if  , e testando o segundo loop de trás para frente ou do finaL para o começo , 

#include <stdio.h>
#include <stdlib.h>
#define TAM 2
int     saoInvertidos(int v1[TAM], int v2[TAM], int qt1, int qt2 ); 
                        // protótipo das funcoes , para usa las no finaL
int main()
{
    int v1[TAM] = { 1,2 },
        v2[TAM] = { 1,2 };
    int ret = saoInvertidos( v1,v2,2,2 );
    if( ret == 0) printf("Os vetores n%co est%co invertidos",131,131);
    else
        printf("Os vetores est%co invertidos", 131);
    printf("\n\n\n");
    return 0;
}
int     saoInvertidos(int v1[TAM], int v2[TAM], int qt1, int qt2 )
{                                   // melhor colocar as funcaoes no finaL 
    qt2--;                          // Depois da main
    int i, j;
    for (i = 0; i < qt1; i++)
    {
        for (j = qt2; j >= 0; j--)
        {
            if (v1[i] != v2[j])
            {
                printf("v1[i]= %d  v2[j]= %d\n",v1[i],v2[j]);//  só para testar
                return 0;
            }
        }
    }
    return 1;
}

 

Postado

@devair1010 Opa tenho algumas duvidas na montagem da funçao, vou sinalizar aqui.

int     saoInvertidos(int v1[TAM], int v2[TAM], int qt1, int qt2 )
{                                   // melhor colocar as funcaoes no finaL
    qt2--;                          // Depois da main
    int i, j;
    for (i = 0; i < qt1; i++)
    {
        for (j = qt2; j >= 0; j--)
        {
            if (v1[i] != v2[j])
            {
                printf("v1[i]= %d  v2[j]= %d\n",v1[i],v2[j]);//  só para testar
                return 0;
            }
        }
    }
    return 1;

 

Onde voce deu valor a Qt1 e Qt2

 

e como J e qt1 funciona nesse sentido?

  • Obrigado 1
Postado

@alan.modesto   ora , o vetor foi criado e inicializado lá na função main , e esse mesmo foi enviado por parâmetro para a função   saoInvertidos   ,  e lá pode ser acessado e escrever ou testar o conteúdo de cada elemento presente nas várias posições do vetor . ,    j é o controle do segundo loop  que começa do final do vetor e vai para o começo dele que ó na posição zero ,  e qt1 [e o total de elementos do vetor v1 , assim o lop vai de zero até o limite desse vetor  v1 que é de dois elementos ,,.,

Postado

Se os vetores tem sempre o mesmo tamanho não precisa colocar outro parâmetro para a quantidade. E a função pode ter só um loop,

int invertidos(int A[], int B[], int quantidade){
    for(int i = 0; i < quantidade; i += 1){
        if(A[i] != B[quantidade - 1 - i]){
            return 0;            
        }
    }
    return 1;
}

 

  • Curtir 1
Postado
Em 01/12/2021 às 21:29, alan.modesto disse:

@devair1010 Opa tenho algumas duvidas na montagem da funçao, vou sinalizar aqui.

int     saoInvertidos(int v1[TAM], int v2[TAM], int qt1, int qt2 )
{                                   // melhor colocar as funcaoes no finaL
    qt2--;                          // Depois da main
    int i, j;
    for (i = 0; i < qt1; i++)
    {
        for (j = qt2; j >= 0; j--)
        {
            if (v1[i] != v2[j])
            {
                printf("v1[i]= %d  v2[j]= %d\n",v1[i],v2[j]);//  só para testar
                return 0;
            }
        }
    }
    return 1;

 

Onde voce deu valor a Qt1 e Qt2

 

e como J e qt1 funciona nesse sentido?

   a variável qt1 e qt2  receberam os valores enviados desde lá da função main , Quando foi realizado essa chamada para essa função :

int main()
{
    int v1[TAM] = { 1,2 },  // criou e inicializou o veror v1 de dois elementos
        v2[TAM] = { 1,2 };  // criou e inicializou o veror v2 de dois elementos
    int ret = saoInvertidos( v1,v2,2,2 ); // chamou a funcao e enviou os 2 vetores
                                          // com os numeros dentro dele e o numero 2
                                          // para o qt1 e também o numero 2 para qt2
    // assim ao chegar La na funcao aquelas variaveis receberao cada uma um desses valores
    if( ret == 0) printf("Os vetores n%co est%co invertidos",131,131);
    else
        printf("Os vetores est%co invertidos", 131);
    printf("\n\n\n");
    return 0;
}

j é a variável de controle do segundo loop , e não tem nada a ver  com qt1 , esse jota poderia ser qq outra variável válida ,  mas o qt2 sim tem haver pois o j começa em zero e vai até enquanto for menor que qt2 , e sendo que nessa situação , qt2 recebeu o valor 2 , que foi enviado lá da função  main , então vai acessar o conteúdo do vetor nas posições 0 e 1 .,,.,

Postado

 

 

 

Em 01/12/2021 às 00:01, alan.modesto disse:

e retorna 1 se estão
invertidos ou 0 caso contrário.

 

Em 01/12/2021 às 00:01, alan.modesto disse:

void saoInvertidos(int v1[], int v2[], int qt1, int qt2){
    int i, j;
    for (i = 0; i < 2;) {
            printf("0- não estão invertidos");

return saoInvertidos;

 

Sua função não retorna nada.... isso é o significa do de void.

 

Se o enunciado diz que deve retornar 0 ou 1 melhor reconsiderar...

 

E você está retornando o próprio nome da função numa função que não retorna nada???

 

     return saoInvertidos; 

 

Esse loop 

 

 for (i = 0; i < 2;) {
            printf("0- não estão invertidos");

 

qual o sentido? 

 

Considere: se i = 0 então i é zero. Zero é menor que 2, o tempo todo. Então nunca vai rodar o loop.

 

Declare i DENTRO do for.

 

E não escreva uma linha de programa sequer sem uma intenção, um plano. Não basta compilar. 

 

 

 

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