Jump to content
Fórum Script Brasil
  • 0

Mesmo Código | Diferentes Resultados


renan_j
 Share

Question

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;

}

Edited by renan_j
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 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 ! ! !

Edited by Felipe222
Link to comment
Share on other 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!!!

 

 

 

Edited by renan_j
Link to comment
Share on other 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... 

Edited by renan_j
Link to comment
Share on other 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 ! ! !

Edited by Felipe222
Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...