Ir ao conteúdo

C Como calcular progressão aritimética?


Ir à solução Resolvido por devair1010,

Posts recomendados

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

@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

 

Postado

@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
Postado
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
Postado

@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
Postado

@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 "="  .

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

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

Postado

@PROG105  mas se você rodou e entendeu sabe que as parcelas são aquelas da lista e o total é aquele número que aparece depois de "Soma:"  nos exemplos que te mostrei. Então o que está faltando para você entender a questão?

 

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!