Ir ao conteúdo
  • Cadastre-se

C Como calcular progressão aritimética?


PROG105
Ir à solução Resolvido por devair1010,

Posts recomendados

19 horas atrás, PROG105 disse:

Por que você colocou "return 32768"

 

Está retornando de main().

 

main() foi declarada int()(void)  então retorna  int. Considerando o comum int de 4 bytes pode retornar entre INT_MIN e INT_MAX, no popular
 

    #define INT_MIN     (-2147483647 - 1)
    #define INT_MAX       2147483647

 

em limits.h. Pode retornar qualquer valor que caiba nesse intervalo.

 

Há uma convenção em C de retornar zero para sucesso e -1 ou qualquer outro código negativo para erro, e existem até essas constantes

 

    #define EXIT_SUCCESS 0
    #define EXIT_FAILURE 1

 

Em stdlib.h

 

de modo que muitos programas terminam por
 

    return EXIT_SUCCESS;

 

Em muitos casos são usados códigos positivos de retorno indicando sucesso mas ajudando a ver por onde foi que o programa terminou ;) 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Em 30/07/2021 às 21:49, devair1010 disse:

@PROG105      será que o que você Quer fazer seja assim  :

#include <stdio.h>
void pausar( float );
int main(void)
{
    int soma = 0,x;
    for ( x = 0;; x += 1)
    {
        int contador = x + x + x + 1; /// o contador armazena o valor da soma
        printf("%3d%c = %3d\n"   ,
               x+1,166,contador);     /// aqui vai escrever o valor do
                                      /// contador todas as vezes que o loop for se repetir
        pausar ( 0.51 );              /// esperar por um tempo
        if (contador > 148)
        {
            printf("\nSomah ----> %3d\n", soma);
            printf("Contador -> %3d",
                         contador);   /// aqui dentro do if , só vai escrever o valor do contador QuanDo
                                      /// o contador for maior que 148
            break;                    /// sair desse Loop For
        }
        soma += contador;
    }
    printf("\n\n\n");
    return 32768;                     /// E retornaR para o Windows
}
void pausar( float a)
{
    int i,j;
    for(i=0; i<a*60000; i++)
        for(j=0; j<a*6000; j++);
}

 

 

E o void pausar (float a) em diante, para que serve?

@devair1010 void pausar( float a)

{ int i,j; for(i=0; i<a*60000; i++)

for(j=0; j<a*6000; j++); }

 

ele serve pra que? Ele é realmente necessário?

 

 

printf("%3d%c =%3d\n" +1,166,contador);  Poderia me explicar por que "+1,166"?

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@PROG105     como você não incluiu a biblioteca 

#include <Windows.h>

coloquei essa função para ter um retardo na apresentação dos números ,  e ela não é necessária , pode deletar ,  

esses 3d significam que os números serão escritos na tela em colunas , isto é todos terão três espaços para escrever e sendo organizados pela terceira coluna , assim se o número tiver só hum dígito será escrito dois espaços em branco e depois o tal dígito ,  se tiver 2 dígitos vai escrever hum espaço em branco e depois os outros dois dígitos ,  e se tiver tres então escreverá todos os tres dígitos ,   e o %c é para escrever um caractere especiaL ,  que é  o ' ª ' ,  dos numerais ordinais ,    como em primeira , que é 1ª ,  e esse caractere corresponde ao valor 166 na tabela ASCII , 

6 horas atrás, PROG105 disse:

printf("%3d%c =%3d\n" +1,166,contador);  Poderia me explicar por que "+1,166"?

 

que nessa linha que você postou ficou faltando o x , que no código estava assim  :

printf("%3d%c = %3d\n",x+1,166,contador);  // o x é a variavel de controle do loop 
                                           // e +1 pois vai escreve começando da primeira
                                           // assim zero + 1 = 1 que a 1ª
                                           // o 166 é codigo ASCII do caractere ª (letra A  pequeninha de primeira)
                                           // contador é o valor do contador

 

Link para o comentário
Compartilhar em outros sites

@devair1010 for (x = 0;; x += 1) 

 

Eu entendi que o 0 é o valor inicial de x, e o x+=1, é o valor máximo que x pode ser, é isso?

@devair1010 int contador = x + x + x + 1;

 

O primeiro x vai ocupar o valor da soma e vai somar com os outros que equivalem a 1?

 

ex: 0+0+0+1 = 1

      1+1+1+1 = 4

       4+1+1+1 = 7

 

É assim?

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, PROG105 disse:

@devair1010 for (x = 0;; x += 1) 

 

Eu entendi que o 0 é o valor inicial de x, e o x+=1, é o valor máximo que x pode ser, é isso?

@devair1010 int contador = x + x + x + 1;

 

O primeiro x vai ocupar o valor da soma e vai somar com os outros que equivalem a 1?

 

ex: 0+0+0+1 = 1

      1+1+1+1 = 4

       4+1+1+1 = 7

 

É assim?

 

 

Estou certo?

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@PROG105    creio que você esteja se referindo a variável  x  , sendo assim  :  os ponto_e_vírguLa marcam o final de uma instrução , e ali no loop  for  são do mesmo jeito  , e então nesse loop for o que significa é :    para x começando com valor zero e depois do ";"  seria enquanto x for menor que algum número , "mas como não tem nenhum número nem nada , até o próximo "; " , então vai  repetir ethernamente ,   e o x += 1 , significa um incremento de x , ou o mesmo que x++ ,  e isso faz é somar mais 1 á variáveL x .

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@PROG105    Desculpe mas na verdade eu não tinha entendido muito bem o que você estava querendo dizer ,  e então o x não vai receber nenhum valor , não ,  a variável que vai receber as somas é a contador  , pois até tem um sinaL de igual que significa "recene" , e assim o significado do que está escrito ali é  :    contador recebe o valor que x contiver + esse mesmo valor de  x e   + esse mesmo valor de x e + 1 ,  assim o contador será igaul ao veio depois do sinal "="  .

Link para o comentário
Compartilhar em outros sites

2 horas atrás, PROG105 disse:

@devair1010 int contador = x + x + x + 1;

 

Por que só o primeiro x vai receber o valor da soma e por que os outros só recebem o valor de 1, sendo que é a mesma variável?

 

Lembrando do que eu escrevi no tópico #2, https://www.clubedohardware.com.br/forums/topic/1554946-como-calcular-progressão-aritimética/?tab=comments#comment-8233104

 

A função é algo como y = 3x +1, certo?  1,4,7,10.....

 

E como eu mostrei no #22 https://www.clubedohardware.com.br/forums/topic/1554946-como-calcular-progressão-aritimética/?tab=comments#comment-8234801

 

duas soluções

 

A segunda era 
 

#include <stdio.h>
int main(void)
{
    int soma = 0;
    for (int x = 0;; x += 1)
    {
        int parcela = x + x + x + 1;
        if (parcela > 148)
        {
            printf("\n\n\tSoma: %d\n", soma);
            return (0);
        }
        else
        {
            printf("%d ", parcela);
        };
        soma += parcela;
    };
    return (0);
}

 

e mostra

 

1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52\
55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100 103\
106 109 112 115 118 121 124 127 130 133 136 139 142 145 148 

        Soma: 3725

 

 

Você rodou esse programa? E  o outro? entendeu?

 

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@PROG105    veja que  x  eh uma variavel ,  e ela armazena um  valor ,  e ali no loop for esse  x  recebe o valor zero e a cada passo será icrementado  em uma unidade ,   pois ali esta escrito  x += 1    ,  e isso significa    x  =  x +  1       ,    ou  em  portugues:     x recebe o valor dele mesmo  e mais 1 e entao a cada passo o contador vai receber o valor que a variavel x tiver multiplicado por 3 e + 1 ,  e entao poderia ainda ser assim  :     int contador = x * 3 + 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!