Ir para conteúdo
Fórum Script Brasil

Assissi

Membros
  • Total de itens

    9
  • Registro em

  • Última visita

Posts postados por Assissi

  1. Oi, acho que o teu erro se deve a comparares o i com o n, como primeiro comparas e depois é que incrementas o valor de i, então só depois de escreveres o 102 é que ele compara. Podes fazer das seguintes formas:

    printf("Multiplos: %d\n",i);

    while(i<=n)
        {    
            printf("Multiplos: %d\n",i);
            m = m + 1;
             i = x * m;
        }

    ou então(uma das formas como eu faria)

     while(m<=n)
        {    
            i = x * m;
            printf("Multiplos: %d\n",i);
            m = m + 1;
            
        }

     

    PS: Tenta compreender, qualquer dúvida avisa.

    Assissi

  2. Boa dia, este exercício é para iniciantes mas que requer uma certa linha de pensamento(tabela ASCII).

    Neste exercício pretende-se criar um código em C que:

    1. Lê nº reais sendo caracteres;
    2. Estes números são sempre feitos desta forma : aaa,aa(3 algoritmos na parte inteira e outra na parte 2) ;
    3. Se  colocarmos algo diferente de um número o programa deve sair;
    4. têm de ser feito com o auxilio de um ciclo;
    5. De cada vez que o ciclo corre é lemos um carácter;
    6. Por fim, escreve-se o valor do  float final, tanto na forma normal como cientifica.

    Já tinha visto este exercício feito online algumas vezes, mas como todos que guardavam  caracteres em variáveis diferentes, acho que consegui chegar a forma mais eficaz( menos variáveis) de resolver o mesmo. Por isso, decidi partilhar o mesmo:

    /* Leitura de caracteres na forma de um float (aaa,aa)*/
    
    #include<stdio.h>
    #include <stdlib.h> /*exit(1)*/
    
    int main () {
      char c;
      int i;
      float m=1000, r=0;
      printf("Escreva um numero com casas até às centenas e 2 casas decimais: ");
      for(i=0;i<6;i++){
    	 scanf("%c",&c);
    	 if (((c<'0') && (c>'9'))&& ((i!=3)&& (c!=','))){
    	 	printf("Não introduziu um numero com as caracteristicas pedidas\n");
    		exit(1);
    	 }
    	if(i!=3){
    		m=m/10.;
    		r=((int)(c-'0'))*m+r;/*tabela ASCII*/
    		printf("\n %.2f \n",r);
    	}
      }
      printf("\n O numero é  %.2f ou na forma cientifica %.4E \n",r,r);
    }
    /*Linha 17 comentada: Pretendeu-se criar um float(r) à medida que se ia recebendo 
     cada caracter c. Para isso multiplicamos o número por m( que varia à medida que 
     deslocamos à direita do número, ou seja , ((int)(c-'0'))*100 dá o algorismo das
     centenas. Além disso, como os números são lidos em caracteres então o inteiro a 
     que corresponde ao nosso caracter é diferente do valor que ele corresponde caso 
     fosse um inteiro, por exemplo (o caracter 1= 49 inteiro) daí se subtrair o caracter
     anterior a este(0).Assim, já passamos a ter o caracter que corresponde ao número 
     inteiro que pretendemos.O int é para passar esse caracter(c-'0') para o inteiro 
     correspondente. Por fim, soma-se a r o valor anterior de r. Dando assim, 
     r=((int)(c-'0'))*m+r.
    ******************************Assissi**********************************************  

    Obrigado, espero que tenham gostado

    Assissi

  3. Pelo o que estou a ver no teu texto tens um if com duas instruções e por isso deverias ter metido { }, pois se não fizeres tens um if  seguindo por uma instrução e depois tens um printf independente do if, logo para o compilador a função if acabou antes do printf. Fazendo que quando o compilador vê o else não tenha nenhum if associado antes dele.

    Concluindo, poderias ter feito dessa forma se só tivesses uma instrução que é o caso das outras condições else que tens e nunca metas outras coisas que não tenham haver entre um if e um else. Se quiseres vai ao meu perfil e na publicação Módulos de números em C está lá um if else num código que fiz. Pode ser que ajude a que entendas melhor o que estou a dizer.

    Espero que tenha ajudado, 

    Assissi

  4. Boa tarde, ainda não tenho muita experiência com C e linux, estou a tentar Mudar a cor do Terminal do Linux usando C, mas ainda não consegui. Sei que funciona para DEV C++ mas no linux ainda não consegui. Tentei utilizar a biblioteca stdio.h com o seguite código: 

    1. system("color 10");
    2. system("color 15B");

    Tentei também por conio.h, mas não funcionou. Gostaria de saber se estou a fazer um erro ou se existe alguma forma de mudar a cor?

     Obrigado

  5. Boa tarde, estava a criar um programa para saber a diferença dos tempos, como a diferença poderia dar valores negativos decidi utilizar o módulo.

    Assim, utilizei a biblioteca 

    1. #include <math.h>

    e o seguite código: 

    1. tempo= tempo1 -tempo2;
    2. tempo= abs(tempo);

    O programa que fiz para saber a diferença entre tempos para quem esteja interessado foi o seguinte:

    #include <stdio.h>
    #include <math.h>/*funçoes matematica*/
    
    int main() {
    	unsigned int d1/*dia_1*/,h1/*hora_1*/,m1/*minuto1_*/,s1/*segundo_1*/,d2/*dia_2*/,h2/*hora_2*/,m2/*minuto_2*/,s2/*segundo_2*/;
    	unsigned long int tempo,tempo1,tempo2;
    
    	printf(" Introduza o tempo no.1 (dia)d (hora)h (minuto)m (segundo)s:\n ");
    	scanf("%ud %uh %um %us",&d1,&h1,&m1,&s1);
    
    	printf(" Introduza o tempo no.2 (dia)d (hora)h (minuto)m (segundo)s:\n ");
    	scanf("%ud %uh %um %us",&d2,&h2,&m2,&s2);
    
    	/*Converter o tempo em segundos*/
            tempo1= ((d1*24 + h1)*60 +m1)*60 +s1;
            tempo2= ((d2*24 + h2)*60 +m2)*60 +s2;
    
    	/*Obrigar a lidar no máximo 1000dias*/
    	if( tempo1<=86400000 && tempo2<=86400000 ){ 
    
    		/*Subtração dos tempos*/
    		tempo= tempo1 -tempo2;
    		tempo= abs(tempo);/*modulo do tempo*/
    
    		/*Tempo final*/
    		d1= tempo/86400;
    		h1= (tempo/3600)-(d1*24);
    		m1= (tempo/60)-(h1*60);
    	        s1= (tempo/60)-(m1*60);
    		/*resposta final*/
    		printf("A diferença entre os dois tempos é de %lu segundos = %ud %uh %um %us\n",tempo,d1,h1,m1,s1);
    	}
    	else
    		printf("Desculpe, mas o numero maximo para cada um dos tempos é de 1000dias.Tende novamente");
    }

    Espero que tenham gostado, 

    ASSISSI

×
×
  • Criar Novo...