Ir para conteúdo
Fórum Script Brasil
  • 0

Mesmo Código | Diferentes Resultados


renan_j

Pergunta

Pessoal, fiz um código com a informação de vendas de uma loja, no período de 30 dias. O código varre todos os valores e imprime o i) DIA e ii) Maior QTD desse período. 

A dúvida:
- quando eu altero de 30 para 29 dias, o código roda normalmente;

- quando eu altero de 29 para 28 dias, o código roda normalmente;

- quando eu altero de 28 para 27 dias, o código roda normalmente;

- quando eu altero de 27 para 26 dias, o código roda normalmente;

- quando eu altero de 26 para 25 dias, o código tem um PROBLEMA na SAIDA!

 

No 1 caso (com 30 dias) ele mostra a seguinte saída:

i: 0

qtd_venda: 0

dia_venda: 0

 

 

O dia de maior venda foi o 8, com a quantidade de 8999992

 

No 2 caso (com 25 dias) ele mostra a seguinte saída:

 

i: 0

qtd_venda: 0

dia_venda: 0

 

 

O dia de maior venda foi o 32767, com a quantidade de 0

 

 

 

Tentei rodar diversas vezes para encontrar a resposta mas não achei. Parece ser alguma coisa em relação e memória. Eu até mandei imprimir os valores para saber o que acontece quando eu altero de 26 pata 25 e na variável "dia_venda"aparece o valor 32767 (nos anteriores aparecia 0!).

Alguém consegue me ajudar nessa?

-------------------- CÓDIGO 1 (OK)--------------------

# include <stdlib.h>
# include <stdio.h>

int main () {

        int dia[30];

        dia[0] = 11;
        dia[1] = 23;
        dia[2] = 54;
        dia[3] = 77;
        dia[4] = 13;
        dia[5] = 2;
        dia[6] = 26;
        dia[7] = 8999992;
        dia[8] = 40;
        dia[9] = 218;
        dia[10] = 2319;
        dia[11] = 3438;
        dia[12] = 99995;
        dia[13] = 3;
        dia[14] = 23;
        dia[15] = 23;
        dia[16] = 23;
        dia[17] = 23;
        dia[18] = 23;
        dia[19] = 23;
        dia[20] = 23;
        dia[21] = 23;
        dia[22] = 23;
        dia[23] = 23;
        dia[24] = 23;
        dia[25] = 23;
        dia[26] = 23;
        dia[27] = 23;
        dia[28] = 23;
        dia[29] = 23;

 

    for (int i = 0; i < 30; i++){
        printf("%d_", dia);
}


        int i =0;
        int qtd_venda = 0;
        int dia_venda;


        printf("\n\ni: %d\n", i);
        printf("qtd_venda: %d\n", qtd_venda);
        printf("dia_venda: %d\n\n\n", dia_venda);

 


        for (int i; i < 30; i++){


            if (dia > qtd_venda){
                    dia_venda = (i + 1);
                    qtd_venda = dia;
            }
        
        }

        printf("O dia de maior venda foi o %d, com a quantidade de %d\n", dia_venda, qtd_venda);


return 0;

}

 

 

-------------------- CÓDIGO 2 (PROBLEMA)--------------------

# include <stdlib.h>
# include <stdio.h>

int main () {

        int dia[25];

        dia[0] = 11;
        dia[1] = 23;
        dia[2] = 54;
        dia[3] = 77;
        dia[4] = 13;
        dia[5] = 2;
        dia[6] = 26;
        dia[7] = 8999992;
        dia[8] = 40;
        dia[9] = 218;
        dia[10] = 2319;
        dia[11] = 3438;
        dia[12] = 99995;
        dia[13] = 3;
        dia[14] = 23;
        dia[15] = 23;
        dia[16] = 23;
        dia[17] = 23;
        dia[18] = 23;
        dia[19] = 23;
        dia[20] = 23;
        dia[21] = 23;
        dia[22] = 23;
        dia[23] = 23;
        dia[24] = 23;
 

 

    for (int i = 0; i < 25; i++){
        printf("%d_", dia);
}


        int i =0;
        int qtd_venda = 0;
        int dia_venda;


        printf("\n\ni: %d\n", i);
        printf("qtd_venda: %d\n", qtd_venda);
        printf("dia_venda: %d\n\n\n", dia_venda);

 


        for (int i; i < 25; i++){


            if (dia > qtd_venda){
                    dia_venda = (i + 1);
                    qtd_venda = dia;
            }
        
        }

        printf("O dia de maior venda foi o %d, com a quantidade de %d\n", dia_venda, qtd_venda);


return 0;

}

Editado por renan_j
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Olá!

 

Sou inciante em C, mas acho que posso ajudar . . .

 

Não sei se esse seu código é o certo, mas aqui ele não rodou legal não, e pelos seguintes fatores:


- |48|warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]| - este alerta este lhe alertando para que o código de formatação %d espera um valor inteiro, enquanto que neste caso ( dia ) é um ponteiro, neste caso o ponteiro para o vetor ( dia ), sendo assim você vai ter de indicar o índice do vetor que você deseja acessar:

 

printf ( "\n%d", dia [ i ] );

 

- |63|warning: comparison between pointer and integer [enabled by default]| - esse alerta também é causado pelo mesmo motivo, ele está dizendo que você está fazendo uma comparação direta entre um ponteiro e um inteiro:


if ( dia > qtd_venda )

 

quando o correto seria fazer a comparação entre o inteiro e o valor armazenado no índice do ponteiro:


if ( dia [ i ] > qtd_venda )


- |66|warning: assignment makes integer from pointer without a cast [enabled by default]| - esse alerta é similar ao do anterior, ele está dizendo que você esta tentando atribuir um ponteiro ( ou o suposto valor armazenado em seu índice ):

 

qtd_venda = dia;

 

onde o correto seria:

 

qtd_venda = dia [ i ];

 

- |58|warning: ‘dia_venda’ is used uninitialized in this function [-Wuninitialized]| - aqui este alerta está lhe dizendo que você está usando uma variável, sem que a mesma tenha sido inicializada previamente com algum valor:

 

int dia_venda;

printf ( "dia_venda: %d\n\n\n", dia_venda );

 

é só iniciá-la com um valor para o alerta sumir!

 

 

Bom com as alterações o código rodou apropriadamente aqui, pelo menos para o problema que você citou . . .

 

Ubuntu 14.04  GCC 4.8  CodeBlocks 13.12
 

Espero Ter Ajudado ! ! !

Editado por Felipe222
Link para o comentário
Compartilhar em outros sites

  • 0
13 horas atrás, Felipe222 disse:

Obrigado, pela resposta Felipe. Fiz novamente o código com as sugestões que você falou mas mesmo assim o erro insiste.

olha só:

****Mudei um pouco o printf para ficar fácil de ver a saída!!!

 

..........CÓDIGO 1 (OK)..........

 

# include <stdlib.h>
# include <stdio.h>

int main () {

        int dia[30];

        dia[0] = 11;
        dia[1] = 23;
        dia[2] = 54;
        dia[3] = 77;
        dia[4] = 13;
        dia[5] = 2;
        dia[6] = 26;
        dia[7] = 8999992;
        dia[8] = 40;
        dia[9] = 218;
        dia[10] = 2319;
        dia[11] = 3438;
        dia[12] = 99995;
        dia[13] = 3;
        dia[14] = 23;
        dia[15] = 23;
        dia[16] = 23;
        dia[17] = 23;
        dia[18] = 23;
        dia[19] = 23;
        dia[20] = 23;
        dia[21] = 23;
        dia[22] = 23;
        dia[23] = 23;
        dia[24] = 23;
        dia[25] = 23;
        dia[26] = 23;
        dia[27] = 23;
        dia[28] = 23;
        dia[29] = 23;

 

    for (int i = 0; i < 30; i++){
        printf("%d_%d",i,  dia[ i]);
}


        int i =0;
        int qtd_venda = 0;
        int dia_venda = 0;


        printf("\n\ni: %d\n", i);
        printf("qtd_venda: %d\n", qtd_venda);
        printf("dia_venda: %d\n\n\n", dia_venda);

 


        for (int i; i < 30; i++){


            if (dia[ i] > qtd_venda){
                    dia_venda = (i + 1);
                    qtd_venda = dia[ i];
            }
        
        }

        printf("O dia de maior venda foi o %d, com a quantidade de %d\n", dia_venda, qtd_venda);


return 0;

}

 

..........CÓDIGO 2 (PROBLEMA)..........

 

# include <stdlib.h>
# include <stdio.h>

int main () {

        int dia[26];

        dia[0] = 11;
        dia[1] = 23;
        dia[2] = 54;
        dia[3] = 77;
        dia[4] = 13;
        dia[5] = 2;
        dia[6] = 26;
        dia[7] = 8999992;
        dia[8] = 40;
        dia[9] = 218;
        dia[10] = 2319;
        dia[11] = 3438;
        dia[12] = 99995;
        dia[13] = 3;
        dia[14] = 23;
        dia[15] = 23;
        dia[16] = 23;
        dia[17] = 23;
        dia[18] = 23;
        dia[19] = 23;
        dia[20] = 23;
        dia[21] = 23;
        dia[22] = 23;
        dia[23] = 23;
        dia[24] = 23;
        dia[25] = 23;
 
 

 

    for (int i = 0; i < 26; i++){
        printf("%d_%d", i, dia[ i]);
}


        int i =0;
        int qtd_venda = 0;
        int dia_venda = 0;


        printf("\n\ni: %d\n", i);
        printf("qtd_venda: %d\n", qtd_venda);
        printf("dia_venda: %d\n\n\n", dia_venda);

 


        for (int i; i < 26; i++){


            if (dia[ i]> qtd_venda){
                    dia_venda = (i + 1);
                    qtd_venda = dia[ i];
            }
        
        }

        printf("O dia de maior venda foi o %d, com a quantidade de %d\n", dia_venda, qtd_venda);


return 0;

}

 

======================================================

======================================================

 

SAÍDA DO 1 CÓDIGO:

0_11

1_23

2_54

3_77

4_13

5_2

6_26

7_8999992

8_40

9_218

10_2319

11_3438

12_99995

13_3

14_23

15_23

16_23

17_23

18_23

19_23

20_23

21_23

22_23

23_23

24_23

25_23

26_23

27_23

28_23

29_23

 

i: 0

qtd_venda: 0

dia_venda: 0

 

 

O dia de maior venda foi o 8, com a quantidade de 8999992

SAÍDA DO 2 CÓDIGO:

0_11

1_23

2_54

3_77

4_13

5_2

6_26

7_8999992

8_40

9_218

10_2319

11_3438

12_99995

13_3

14_23

15_23

16_23

17_23

18_23

19_23

20_23

21_23

22_23

23_23

24_23

25_23

 

i: 0

qtd_venda: 0

dia_venda: 0

 

 

O dia de maior venda foi o 0, com a quantidade de 0

 

 

======================================================

======================================================

 

Obrigado!!!

 

 

 

Editado por renan_j
Link para o comentário
Compartilhar em outros sites

  • 0

Cara, eu fiz as modificações que você falou mas não o motivo qd coloco "Dia[COLCHETESCOLCHETES]" aqui ele dá pau, só aparece "Dia"aqui no site...  Eu arrumei no código mas tive que colocar um espaço para não sumir (NÃO PODE COPIAR E COLAR O CÓDIGO sem arrumar este espaço)... Aqui no site ficou assim, exemplo: "Dia[ i]"

Enfim,  fiz todas as modificações que você falou em relação ao ponteiro e referenciais ao dia com o i... Mas continua dando o erro de saída... 

Editado por renan_j
Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

 

Bom, aqui com o exemplo que você passou, com os valores do ( vetor ) e dos laços ( for )sendo alterados para ( 26 ) o programa retornou os seguintes valores:

 

i: 0
qtd_venda: 0
dia_venda: 0

O dia de maior venda foi o 8, com a quantidade de 8999992

 

Ate ai tudo bem, o programa aparentemente está fazendo o que ele deveria fazer, pelo menos aqui, porem o programa ao final da execução reporta um ( erro - alerta - mensagem ):

 

segmentation fault ( core dumped )

Process returned 139 ( 0 x 8b )

 

- Eu vou pesquisar mais sobre isso, porque não faço a mínima ideia do que pode estar causando essa mensagem ao final de execução do programa, fora isso o programa parece estar, OK . . . em um primeiro momento . . .

 

- Se possível tente observar, se o seu Compilador ou se a sua IDE retornam qualquer mensagem de erro ou alerta, e se retornarem poste para o pessoal do fórum dar uma olhada, porque aqui com as suas especificações, o meu Compilador e a IDE não retornaram nada!

 

- Tente também observar a janela na qual o programa é executado, tente verificar e se possivel postar qualquer mensagem que apareça no fim do programa, como mostrei que aconteceu comigo.

 

- Além, disso, tente postar informações do seu computador, mais especificamente:


O Compilador, a IDE e o Sistema Operacional que você está usando, e se possível qual a versão deles.

 

Obs.: não acredito que faça alguma diferença no seu caso, entretanto, no seu laço ( for ) que exibe os dias e os valores, você deixou um underline _ logo apos o primeiro ( %d ) a não ser que ele tenha alguma funcionalidade que eu desconheça, eu recomendo retirá-lo . . .

 

Atualizando: erro meu, a falha - segmentation fault ( core dumped ) foi causada, porque com o vetor dias possuindo apenas ( 26 ) posições, ao tentar atribuir um valor as posições seguintes dias [ 26 ] = 23; o sistema envia uma mensagem de falha de segmentação, ao tentar acessar uma posição de memoria não reservada ao programa, erro bobo da minha parte.

Quanto ao que está causando o erro no seu programa por hora vou ficar devendo . . .

 

Ubuntu 14.04  GCC 4.8  CodeBlocks 13.12

 

Ate logo ! ! !

Editado por Felipe222
Link para o comentário
Compartilhar em outros sites

  • 0

Salve,

Estou enferrujado para C/C++ mas lá vai...


/* programa.c */

#include <stdlib.h>
#include <stdio.h>

int main()
{
    //  determino o número de dias do mes
    const int DIAS_DO_MES = 26;

    //  monto um array de dias no mes
    int mes[DIAS_DO_MES];

    //  preenchendo as vendas nos dias do mês
    mes[0] = 0;         //  conceitualmente, não existe este dia no calendário :D
    mes[1] = 23;
    mes[2] = 54;
    mes[3] = 77;
    mes[4] = 13;
    mes[5] = 2;
    mes[6] = 26;
    mes[7] = 8999992;
    mes[8] = 40;
    mes[9] = 218;
    mes[10] = 2319;
    mes[11] = 3438;
    mes[12] = 99995;
    mes[13] = 3;
    mes[14] = 23;
    mes[15] = 23;
    mes[16] = 23;
    mes[17] = 23;
    mes[18] = 23;
    mes[19] = 23;
    mes[20] = 23;
    mes[21] = 23;
    mes[22] = 23;
    mes[23] = 23;
    mes[24] = 23;
    mes[25] = 23;

    //  aqui vamos guardar o dia do mes que teve a maior venda
    int dia_do_mes_maior_venda = 0;

    //  aqui vamos guardar o maior valor da venda
    int valor_da_maior_venda = 0;

    //  vamos declarar um contador
    int i = 0;

    do
    {
        if( mes[i] >= valor_da_maior_venda )
        {
            valor_da_maior_venda = mes[i];
            dia_do_mes_maior_venda = i;
        }
        i += 1;
    }while( i < DIAS_DO_MES);

    printf("O dia de maior venda foi o %d, com a quantidade de %d\n", dia_do_mes_maior_venda, valor_da_maior_venda);

    //  retorno do programa (sistema operacional)
    return 0;
}

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...