Ir ao conteúdo
  • Cadastre-se

C exercicio de Funçoes e Vetores


alan.modesto

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

#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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

@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;
}

 

Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

 

 

 

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