Ir ao conteúdo
  • Cadastre-se

jcgs98

Membro Pleno
  • Posts

    80
  • Cadastrado em

  • Última visita

posts postados por jcgs98

  1. #include <stdio.h>
    
    #define X 200
    
    void zeraI (int *v, int n){
    	int i;
    	for (i=0;i<n;i++){
    	v[i]=0;
    	}
    }
    
    void zeraF (float *v, int n){
    	int i;
    	for (i=0;i<n;i++){
    	v[i]=0;
    	}
    }
    
    
    int buscaI (int *v, int n, int chv){
    	for (int i=0;i<n;i++){
    		if (v[i]==chv) return i;
    		}
    	return -1;
    }
    
    
    float buscaF (float *v, int n, int chv){
    	for (int i=0;i<n;i++){
    		if (v[i]==chv) return i;
    		}
    	return -1;
    }
    
    int buscaI_ (int *v, int n, int chv){
    	for (int i=0;i<n;i++){
    		if (v[i]==chv) return v[i];
    		}
    	return -1;
    }
    
    
    float buscaF_ (float *v, int n, int chv){
    	for (int i=0;i<n;i++){
    		if (v[i]==chv) return v[i];
    		}
    	return -1;
    }
    
    
    int carrega_prods (int *v1, float *v2, int n){
    	v1[0]=203;v2[0]=110.0;
    	v1[1]=120;v2[1]=03.0;
    	v1[2]=340;v2[2]=25.0;
    	v1[3]=220;v2[3]=70.0;
    	return 4;
    }
    	
    
    int carrega_lojas (int *v1, int *v2, int n){
    	v1[0]=20;v2[0]=1; 
    	v1[1]=8	;v2[1]=2;
    	v1[2]=34;v2[2]=2;
    	v1[3]=22;v2[3]=5;
    	v1[4]=14;v2[4]=3;
    	v1[5]=52;v2[5]=4;
    	v1[6]=16;v2[6]=6;
    	v1[7]=55;v2[7]=4;
    	v1[8]=41;v2[8]=5;
    	v1[9]=28;v2[9]=6;
    }
    
    
    int carrega_est (float *v1){
    	v1[0]=10.0;
    	v1[1]=1.2;
    	v1[2]=3.4;
    	v1[3]=9.3;
    	v1[4]=6.0;
    	v1[5]=3.1;
    }
    
    int main (void){
    	
    	int i, cod, qtd, loj,z;
    	
    	int produto,quantidade;
    	float c, d, imposto, valor;
    	
    	int vPro[4], vLoj[10], vCod[10],viAuxa[X],viAuxb[X],viAuxc[X];
    	
    	float vVal[4],vImp[6],fat[10],vfAuxb[X],vfAuxa[X];
    	
    	zeraI (vPro,4);
    	zeraF (vVal,4);
    	
    	zeraF (vfAuxa,X);
    	zeraF (vfAuxb,X);
    	zeraI (viAuxa,X);
    	zeraI (viAuxb,X);
    	zeraI (viAuxc,X);
    	
    	zeraF (fat,10);
    	
    	zeraI (vLoj,10);
    	zeraI (vCod,10);
    	
    	zeraF (vImp,6);
    	
    	carrega_prods (vPro,vVal,4);
    
    	carrega_lojas (vLoj,vCod,10);
    
    	carrega_est (vImp);
    	
    	for (i=0;i<10;i++){
    		printf("\nLoja.....: %3d / Estado...: %d / Imposto..: %.2f",vLoj[i],vCod[i],vImp[vCod[i]-1]);
    	}
    	
    	for (i=0;i<4;i++){
    		printf("\nProduto..: %d / Valor....: R$%.2f",vPro[i],vVal[i]);
    	}
    	
    	for(i=0;i<X;i++)
    	{	
    	printf("\n\n\nCodigo do produto...............: ");
    	scanf("%d",&produto);
    	valor=vVal[buscaI(vPro,4,produto)];
    	printf("\nValor do produto................: R$ %.2f",valor);
    						
    	printf("\nQuantidade......................:");
    	scanf("%d",&quantidade);
    	printf("\nValor da compra ................: R$ %.2f",valor*quantidade);
    	
    		
    	printf("\nLoja............................:");
    	scanf("%d",&viAuxc[i]);
    	
    	imposto=vImp[vCod[buscaI(vLoj,10,viAuxc[i])]-1];
    	
    	printf("\nValor do Imposto no estado %d...: %.2f",buscaI_(vLoj,10,viAuxc[i]),imposto);
    	
    	c=(valor*quantidade)/(1+(imposto/100));
    	
    	printf("\nValor sem imposto...............: %.2f",c);
    	vfAuxa[i]=c;
    	}
    	
    	for(i=0;i<X;i++){
    		
    		printf("\nLoja: %d / Total: %.2f",viAuxc[i],vfAuxa[i]);
    	}
    
    	
    	int vlojas [10];
    	float vTot[10];
    
    	for (i=0;i<10;i++)
    	{
    		vTot[i]=0;
    		vlojas [i]=0;
    	}
    
    	for (i=0;i<X;i++){
    		vlojas [i]=buscaI(vLoj,X,viAuxc[i]);
    	}
    	
    	
    	for (i=0;i<10;i++)
    	{
    		if (vfAuxa[i]!=0)
    		vTot[vlojas[i]]+=vfAuxa[i];
    	}
    
    	for (i=0;i<10;i++)
    	{
    		printf("\nFaturamento liquido da loja %d..: R$ %.2f",vlojas [i],vTot[i]);
    	}
    
    	return 0;
    }

    Não está funcionando a totalização.

  2. 14 horas atrás, Flávio Pedroza disse:

    Acredito que esta solução está funcionando. Basta você adicionar a implementa para tratamento de códigos inexistentes (quando busca retornar <0). Atente também para o fato da função "zera" aceitar apenas vetores do tipo float. Portanto, não pode usá-la para vetores do tipo int;

    
    int main (void){
    	
    	int i, cod, qtd, loj;
    	
    	int vPro[4], vLoj[10], vCod[10], vEst[10];
    	
    	float vVal[4],vImp[6];
    	
    	//zera (vPro,4);
    	zera (vVal,4);
    	
    	//zera (vLoj,10);
    	//zera (vCod,10);
    	
    	zera (vImp,6);
    	
    	carrega_prods (vPro,vVal,4);
    
    	carrega_lojas (vLoj,vEst,10);
    
    	carrega_est (vImp);
    
        
    	while (1)
    	{
    	    printf("\nCodigo do produto....:");
    		scanf("%d",&cod);
    		
            if (cod < 0) break;
            i = busca (vPro, 4, cod);	
    		float preco = vVal[i]; //Preco do produto
    		printf ("\nPreco:%f", preco);
    		
    	    printf("\nQuantidade...........:");
    		scanf("%d",&qtd);
    		
    		printf("\nLoja.................:");
    		scanf("%d",&loj);
    		i = busca (vLoj, 10, loj);
    		printf ("\nLoja:%d", vLoj[i]);
    		
    		float imposto =  vImp[vEst[i]-1]; // imposto
    		printf ("\nImposto:%f", imposto);
    		float faturamento = preco*qtd * (1 - (imposto/100));
    		printf ("\nFaturamento.......:%f", faturamento);
    	}
    	
    	
    
    
    
    return 0;
    }

     

    Eu modifiquei para aceitar float e int, fiz zeraI e zeraF;

     

    Não poderia usar o "while(1)" porque no enunciado o número de entradas é limitado em 200.

     

    Obrigado pela ajuda!

    • Curtir 1
  3. Boa tarde!

     

    Essa tá f...

     

    Comecei assim:

     

    #include <stdio.h>
    
    #define X 200
    
    void zera (float *v, int n){
    	int i;
    	for (i=0;i<n;i++){
    	v[i]=0;
    	}
    }
    
    
    int busca (int *v, int n, int chv){
    	for (int i=0;i<n;i++){
    		if (v[i]==chv) return i;
    		}
    	return -1;
    }
    
    
    int carrega_prods (int *v1, float *v2, int n){
    	v1[0]=203; v2[0]=10.0; v1[1]=120; v2[1]=3.0; v1[2]=340; v2[2]=25.0; v1[3]=220; v2[3]=70.0; return 4;
    }
    	
    
    int carrega_lojas (int *v1, int *v2, int n){
    	v1[0]=20; v2[0]=1; v1[1]=8; v2[1]=2; v1[2]=34; v2[2]=2; v1[3]=22; v2[3]=5; v1[4]=14; v2[4]=3;v1[5]=52; v2[5]=4;
    	v1[6]=16; v2[6]=6;v1[7]=55; v2[7]=4;v1[8]=41; v2[8]=5;v1[9]=28; v2[9]=6;
    }
    
    
    int carrega_est (float *v1){
    	v1[0]=2.0; v1[1]=1.2; v1[2]=3.4; v1[3]=9.3; v1[4]=6.0; v1[5]=3.1;
    }
    
    int main (void){
    	
    	int i, cod, qtd, loj;
    	
    	int vPro[4], vLoj[10], vCod[10];
    	
    	float vVal[4],vImp[6];
    	
    	zera (vPro,4);
    	zera (vVal,4);
    	
    	zera (vLoj,10);
    	zera (vCod,10);
    	
    	zera (vImp,6);
    	
    	carrega_prods (&vPro,&vVal,4);
    
    	carrega_lojas (&vLoj,&vEst,10);
    
    	carrega_est (&vImp);
    	
    	printf("\nCodigo do produto....:");
    	scanf("%d",&cod);
    	
    	while (cod>=0&&i<X){
    		for (i=0;i<X;i++){
    		busca (vPro, 4, cod);										
    		
    		printf("\nQuantidade...........:");
    		scanf("%d",&qtd);
    		
    		printf("\nLoja.................:");
    		scanf("%d",&loj);
    		
    		printf("\nCodigo do produto....:");
    		scanf("%d",&cod);
    		}
    	}
    	
    	
    
    
    
    return 0;
    }

     

    2017_q3.PNG

    • Amei 1
  4. Isso. Dei mole.

    adicionado 2 minutos depois

    @Flávio Pedroza

    3 horas atrás, Flávio Pedroza disse:
    
    void encontraDoisVals (int limInf, int limSup, int *dig1, int *dig2)
    {
     int n[2];
     for (int i=0; i < 2; i++)
     {
      while (1)
      {
       printf("\nDigite um valor inteiro %d.......................: ", i+1);
       scanf("%d",&n[i]);
       if (n[i] < limInf) && (n[i] > limSup) break;
      } 
     }
     *dig1=n[0];
     *dig2=n[1];
    }

     

    adicionado 2 minutos depois

    Alternativamente, se você puder ler os dois número de uma só vez:

     

    
    void encontraDoisVals (int limInf, int limSup, int *dig1, int *dig2)
    {
     do
     {
       printf("\nDigite dois valores inteiros.......................: ");
       scanf("%d %d",dig1, dig2);
      } while (((*dig1 >= limInf) && (*dig1 <= limSup)) || ((*dig2 >= limInf) && (*dig2 <= limSup)));
     
    }

    Acho que o correto é esse mesmo que você fez agora. Foi isso que a questão pediu.

     

  5. Perfeito!

    Esse eu acho que peguei o jeito:

     

    #include <stdio.h>
    
    
    float encontraMenor(int numEmp, float *vetorSal){
    	
    	int menorSal=vetorSal[0],i;
    	
    	for (i=0;i<numEmp;i++){
    		
    	if (menorSal>vetorSal[i]) menorSal=vetorSal[i];
    	}
    	
    	return menorSal;
    	
    }
    
    
    float exibeDifMenorRetornaSoma (float vMenorSal, int numEmp, int *vetorInsc, float *vetorSal){
    	
    	int i;
    	float somaDif;
    		
    	for (i=0;i<numEmp;i++){
    		
    	printf("\n\nFuncionario %d - Diferenca do salario ..: R$ %.2f",vetorInsc[i],vetorSal[i]-vMenorSal);
    		
    		somaDif=somaDif+(vetorSal[i]-vMenorSal);								
    	}
    	
    	printf("\n\nSoma das diferencas .......................: R$ %.2f",somaDif);
    }
    
    
    int main (void){
    
    int vInsc[6]={1010,1020,1030,1040,1050,1060};
    
    float vSal[6]={1000.00,4020.00,900.00,10400.00,20000.00,1000.00};
    
    float menorSal;
    
    menorSal=encontraMenor(6,vSal);
    
    printf("\n\nO menor salario e ........................: R$ %.2f",menorSal);
    
    exibeDifMenorRetornaSoma (menorSal, 6, vInsc, vSal);
    
    return 0;
    }

     

    2017_q2.PNG

  6. Bom dia.

     

    Minha dúvida está na função.

     

    Teria outra maneira de verificar os números digitados sem ter que repetir o "while"?

     

    #include <stdio.h>
    
    int encontraDoisVals (int limInf, int limSup, int *dig1, int *dig2){
    
    	int n1,n2;
    	
    	printf("\nDigite um valor inteiro.......................: ");
    	scanf("%d",&n1);
    	
    	while (n1>limInf&&n1<limSup){
    	
    	printf("\nDigite um valor inteiro.......................: ");
    	scanf("%d",&n1);
    	}
    	
    	*dig1=n1;
    	
    	printf("\nDigite um valor inteiro.......................: ");
    	scanf("%d",&n2);
    	
    	while (n2>limInf&&n2<limSup){
    	
    	printf("\nDigite um valor inteiro.......................: ");
    	scanf("%d",&n2);
    	}
    	
    	*dig2=n2;
    }
    
    
    int main(void){
    	
    	int limI, limS, dig1, dig2;
    	int soma;
    	int i;
    	
    	printf("\nDigite o limite inferior......................: ");
    	scanf("%d",&limI);
    	
    	printf("\nDigite o limite superior......................: ");
    	scanf("%d",&limS);
    	
    encontraDoisVals (limI, limS, &dig1, &dig2);
    
    	soma=dig1+dig2;
    	
    	printf("\nSoma dos valores digitado fora do intervalo...: %d",soma);
    		
    		
    return 0;
    }

     

    2017_q1.PNG

    adicionado 5 minutos depois

    Função é "void" não 'int".

  7. Entendi, mas a função "exibeDiferencaAB" só pode receber 2 vetores.

    adicionado 5 minutos depois
    33 minutos atrás, isrnick disse:

    A função exibeDiferencaAB também deveria receber os comprimentos dos vetores A e B como parâmetros.

     

    E uma boa indentação do código é um requisito, senão dá muito trabalho identificar o que está acontecendo no código.

    E existem várias ferramentas para indentar códigos automaticamente, uma boa ferramenta online que eu uso é essa:

    https://www.tutorialspoint.com/online_c_formatter.htm

     

    E falando em facilitar a compreensão do código isso é mais uma recomendação do que uma necessidade: Código é feito para ser lido por outras pessoas, então usar nomes de variáveis descritivos e/ou colocar comentários ajuda a próxima pessoa a compreender seu código.

     

    Veja o código modificado:

    
    #include <stdio.h>
    
    # define X 10
    # define Y 15
    
    int busca (int numero, int n, int *vetor) {
        int i;
        for (i=0; i<n; i++) {
            if (vetor[i]==numero) return 1;
        }
        return 0;
    }
    
    void exibeDiferencaAB (int n1, int *vetor1, int n2, int *vetor2) {
        int achou, i;
    
        for (i=0; i<n1; i++) {
            achou=busca(vetor1[i], n2, vetor2);
            if (!achou) //se nao achou o numero
                printf("%d, ",vetor1[i]);
        }
    }
    
    int main(void) {
        int vetor1[X]= {1,4,3,7,99,14,17,16,11,13};
        int vetor2[Y]= {4,2,3,9,1,1,5,16,11,33,44,55,66,23,5};
    
        exibeDiferencaAB (X, vetor1, Y, vetor2);
    
        return 0;
    }

     

    Não entendi os "n". Na verdade entendi, mas não a necessidade. Apenas para organização?

  8. Boa tarde!

    Eu outra vez...

    Podem criticar meu código?

     

    Obrigado!

     

    #include <stdio.h>
    
    # define X 10
    # define Y 15
    
    int busca (int n, int vetor1, int *vetor2){
    	int i;
    	for (i=0;i<n;i++){
    		if (vetor2[i]==vetor1)return 1;
    		}
    		return 0;}
    
    void exibeDiferencaAB (int *vetor1, int *vetor2){
    
    	int a,i;
    
    	for (i=0;i<X;i++){
    		a=busca (Y, vetor1[i], vetor2);
    		if (a==0)printf("%d ",vetor1[i]);}
    }
    
    int main(void){
    	
    int vetor1[X]={1,4,3,7,99,14,17,16,11,13};
    int vetor2[Y]={4,2,3,9,1,1,5,16,11,33,44,55,66,23,5};
    
    exibeDiferencaAB (vetor1, vetor2);
    		
    return 0;}

     

    IMG_20181213_102021s.jpg

    • Obrigado 1
  9. 12 minutos atrás, isrnick disse:

    Como falei se o scanf estiver fora da função você pode fazer um scanf para obter o primeiro valor de agência antes do while por exemplo...

    Sim, achei que tivesse outro jeito para não ter que repetir as linhas no código.

    Pelo que vocês falaram, o código ficaria assim:

    #include <stdio.h>
    
    
    int somaAl (int num){
    int t=0;
    while (num>0){
    t+=num%10;num=num/10;
    }return t;}
    
    
    void calcDigitos(int conta, int agencia, int *dig1,int *dig2){
    
    int n1,n2;
    
    n1=somaAl(agencia);n2=somaAl(conta);
    
    if(n1>n2){
    *dig1=n1%9;*dig2=n2%6;
    }
    else
    if(n2>n1){
    *dig1=n1%9;*dig2=n2%7;
    }
    else{
    *dig1=n1%3;*dig2=n2%5;}}
    
    
    int main(void){
    	
    int agencia, dig1, conta, dig2;
    
    	printf("\nDigite a agencia:.... ");
    	scanf("%d",&agencia);
    
    while (agencia!=0){
    	
    	printf("\nDigite a conta:...... ");
    	scanf("%d",&conta);	
    
    	calcDigitos(conta,agencia,&dig1,&dig2);
    
    	printf("\nAg: %d-%d cta: %d-%d\n\n",agencia,dig1,conta,dig2);
    	
    	printf("\nDigite a agencia:.... ");
    	scanf("%d",&agencia);
    	
    }return 0;}

    Os ponteiros estão corretos?

    • Curtir 1
  10. 6 minutos atrás, isrnick disse:

     

    Pela imagem ela exigiu que a somaAlg fosse calculada na função, não que os scanfs estivessem dentro da função.

     

     

    Será????

    adicionado 3 minutos depois
    6 minutos atrás, isrnick disse:

     

    Não encerra não, o scanf para obter o valor inicial de agencia deve vir antes de fazer a primeira comparação para checar se agencia!=0 .

    Se eu não fizer "age=1" acontece isso:

     

    Capturar.PNG

  11. Boa tarde!

     

    Poderiam me ajudar com a questão abaixo?

     

    Fiz o código, funcionou, mas não gostei dele.

     

    Como poderia ficar melhor?

     

    Por exemplo:

     

    Como parar assim que digitar "agência 0"?

     

    Como fazer para não precisar colocar "agencia =1"?


    Obrigado!

     

     

    #include <stdio.h>
    #include <stdlib.h>
    
    int somaAl (int num)
    {
    int t=0;
    while ( num > 0){
    t+=num%10;
    num=num/10;
    }
    return t;
    }
    
    
    void calcDigitos(int *conta, int *agencia, int *dig1,int *dig2)
    {
    int i,age=1, n1;
    int cta, n2;
    
    printf("\nDigite a agencia:.... ");
    scanf("%d",&age);
    
    n1=somaAl (age);
    *agencia=age;
    
    printf("\nDigite a conta:...... ");
    scanf("%d",&cta);
    
    n2=somaAl (cta);
    *conta=cta;
    
    if(n1>n2)
    {
    *dig1=n1%9;
    *dig2=n2%6;
    }
    else
    if(n2>n1)
    {
    *dig1=n1%9;
    *dig2=n2%7;
    }
    else
    {
    *dig1=n1%3;
    *dig2=n2%5;
    }
    
    }
    
    
    int main(void)
    {
    int agencia=1, dig1;
    int conta, dig2;
    
    while (agencia!=0)
    {
    calcDigitos(&conta,&agencia,&dig1,&dig2);
    
    printf("\nAgencia:............. %d - %d",agencia,dig1);
    printf("\nConta:............... %d - %d",conta,dig2);
    }
    return 0;
    }

    IMG_20181213_102021.jpg.f032ae0c365f1bcd2e36399929beba53.jpg

  12. Mas nesse caso, só vai totalizar as 6 primeiras posições do vetor vNota

    #include <stdio.h>
    #include <stdlib.h>
    
    int main (void)
    
    {
    
    float vNota[25]  =  {1,1,2,10,10,3,4,6,7,7,8,9,3,10,4,5,2,7,5,9,8,4,6,8,9};
    
    float vAtend[25] = {1,2,3,4,5,6,2,3,4,5,1,2,3,6,4,5,4,6,1,3,4,5,6,2,4};
    
    
    
    int vCont [6];
    float vTot[6];
    int func;
    int i;
    
    //zera (vtot);
    //zera (vCont);
    
    for (i=0;i<6;i++)
    {
    	vTot[i]=0;
    	vCont[i]=0;
    }
    
    
    for (i=0;i<25;i++)
    {
    	func=vAtend[i]-1;
    	vCont[func]++;
    	vTot[func]+=vNota[func];
    }
    
    for (i=0;i<6;i++)
    {
    	if (vCont[i]!=0)printf ("\nMedia...:%.7f",vTot[i]/vCont[i]);
    }
    
    return 0;
    }

     

    Capturar.PNG

    • Curtir 1

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!