Ir ao conteúdo
  • Cadastre-se

Flávio Pedroza

Membro Pleno
  • Posts

    2.067
  • Cadastrado em

  • Última visita

Tudo que Flávio Pedroza postou

  1. Como dito nos posts anteriores, existem várias maneiras de interpretar o problema e também várias soluções. Oferece a solução de criar um vetor secundário no qual será escrito apenas os número não repetidos (o vetor original permanece inalterado - ou seja, na verdade não foram removidos os duplicado): #include <stdio.h> #include <stdlib.h> #include <string.h> /*Leia um vetor com 20 numeros inteiros. Escreva os elementos do vetor eliminando ele- B4 mentos repetidos. */ int main(){ int vet[5], i,j, k=0; int aux[5]; //vetor auxiliar bool rept; //variável auxiliar para indicar se existe número repetido for(i=0; i<5; i++){ printf("Digite o %do valor: ", i+1); scanf("%d", &vet[i]); } for(i=0; i<5; i++) { rept = false; for(j = i+1; j<5; j++){ if(vet[i] == vet[j]) { rept = true; //indica que o número está repetido break; } } if (!rept) //apenas transfere para o novo vetor os números não repetidos { aux[k] =vet[i]; k++; } } for(i=0; i<k; i++) { printf("%d ", aux[i]); } return 0; }
  2. Acho que estão faltando alguns fornecer o índice de alguns arrays no seu código. Por exemplo: Hash* hash_cria(void){ Hash* tab = (Hash*)malloc(sizeof(Hash)); int i; for(i = 0; i < N; i++){ tab->v[i] = NULL; //faltou [i] aqui } return tab; } void hash_imprime (Hash* tab){ int i; for(i = 0; i < N; i++){ if(tab->v[i] != NULL){ printf("Matricula: %d | Nome: %s | Departamento: %c | Salário: %.1f\n", tab->v[i]->matricula, tab->v[i]-> nome, tab->v[i]->departamento, tab->v[i]-> salario); } } } Use essa função para ordenar pelo nome antes de imprimir: void hash_ordena (Hash* tab){ int i,j; funcionario* temp; for(i = 0; i < N-1; i++) for (j = i+1; j < N ; j++) if ((tab->v[i] != NULL) && (tab->v[j] != NULL) && (strcmp(tab->v[i]->nome,tab->v[j]->nome) > 0)) { temp = tab->v[i]; tab->v[i] = tab->v[j]; tab->v[j] = temp; } }
  3. Tenta executar o comando externamente via código, com a saída redirecionada para um arquivo de texto. Daí, você lê o arquivo e pega a informação que deseja. Por exemplo, se estiver acesso a API do Windows você usa o ShellExecute: ShellExecute(0, "open", "cmd.exe", "/C ipconfig > out.txt", 0, SW_HIDE); O resultado do comando irá para o arquivo out.txt. você abre o arquivo e tem acesso a todo o conteúdo que o comando retorna. Não tive como testar, mas acredito que irá funcionar.
  4. Não entendi muito bem a sua questão. Temos que usar a formula dada, mas não node usar números com ponto flutuante (float e double)? Não vejo como, pois a raiz quadrada de 5 é irracional. De todo modo, abaixo tem um exemplo de função que calcula a sequência Fibonnaci usando números inteiros. void fibonnaci (int n) { unsigned long a = 0, b = 1, c=0; for (int i = 0; i < n; i++) { c = (a + b); printf (" %u", c); a = b; b = c; } }
  5. Usar intervalos no switch, acredito, não faz parte do padrão C. Portanto, a solução abaixo pode não funcionar em todo os compiladores. De todo modo, use "..." para definir intervalos: #include <stdio.h> #include <stdlib.h> int main (void) { char ch; printf ("Digite uma tecla e confirme com <ENTER >: ") ; ch = getchar() ; system ("cls") ; printf ("\nResultado\n"); switch (ch) { case 'a'...'z': printf ("voce digitou uma letra minuscula !\n"); break; case 'A'...'Z': printf ("voce digitou uma letra maiuscula !\n") ; break; case '0'...'9': printf ("voce digitou um digito !\n"); break; default: printf ("voce digitou um caracter especial !\n"); break; } return 0; }
  6. salario é um vetor bidimensional, você deve fornecer dois índices: void entradas() { int categoria; printf("Digite o numero de funcionarios da empresa\n"); scanf("%d", &n); for(i=0; i<n; i++) { printf("Digite o numero do funcionario %d\n", i+1); scanf("%d", &numero[i]); printf("Digite o nome do funcionario %d\n", i+1); scanf("%s", &nome[i]); printf("Digite o numero de dias que o funcionario %d trabalhou\n", i+1); scanf("%d", &dias[i]); printf("Digite a categoria do funcionario: 1 - A, 2 - B, 3 - C, 4 - D\n"); scanf("%d", &categoria); if (categoria==1) salario[i][0]=1800; if (categoria==2) salario[i][0]=1500; if (categoria==3) salario[i][0]=1200; if (categoria==4) salario[i][0]=800; } } void saidas() { for(i=0; i<n; i++) { printf("O funcionario %s com o numero %d\n", nome[i], numero[i]); printf("Vai receber %.2f de salario liquido\n", salario[i][5]); printf("Descontou %.2f de IRS\n", salario[i][1]); printf("Descontou %.2f de CGA\n", salario[i][2]); printf("Descontou %.2f de SS\n", salario[i][3]); printf("Vai receber %.2f de SR\n", salario[i][4]); } } Para saber o maior do salários, crie uma variável auxiliar salmaior e compare com os valores no do salário liquido, se for maior então este salário passar a ser o de maior valor: int main() { float mediasalario=0; float salmaior = 0; entradas(); for(i=0; i<n; i++) { salario[i][1]=salario[i][0]*0.23; salario[i][2]=salario[i][0]*0.075; salario[i][3]=salario[i][0]*0.085; salario[i][4]=dias[i]*8; salario[i][5]=salario[i][0]-salario[i][1]-salario[i][2]-salario[i][3]+salario[i][4]; mediasalario=mediasalario+salario[i][5]; if (salario[i][5] > salmaior) salmaior = salario[i][5]; } system ("cls"); saidas(); printf("Salario medio da empresa=%.2f\n", mediasalario/n); printf("Maior salario liquido=%.2f\n", salmaior); return 0; } Veja se consegue fazer para calcular o valor do menor salário.
  7. Tenta usar o comando SetCurrentDir('C:\'); antes de executar o .bat;
  8. Posta o código do que você já fez, por favor.
  9. Para acusar erro no caso de letras, basta você checar o retorno da função scanf. Se for diferente de 1, é porque foi digitado algo diferente de um número: if (scanf ("%d",&nr) != 1) { printf ("\nErro, apenas numeros"); } else { (...) }; Para prevenir números fracionários é mais complicado. Eu recomendo ler o número do tipo ponto flutuante e verificar se ele é igual a sua parte inteira, caso contrário o número tem parte fracionária. float nraux; //vai precisar dessa variavel if (scanf ("%f",&nraux) != 1) //você vai ler tipo float { printf ("\nErro, apenas numeros"); } else { nr = nraux; // transformar de float para inteiro (ignorar parte decimal) if (nr != nraux) // o número inteiro é diferento do float, então existe parte decimal { printf ("\nErro, apenas numeros inteiros"); } else { //O número é ok! //O código para verificar se o número é par ou impar vai aqui } }
  10. i = 1; while (i <= num) { fat *=i; i++; }
  11. você testou com +10 elementos? Eu acho que ainda há erro quando você digita mais de 10 elementos. Testa aí e confirmar. Se for esse o caso, a possível solução seria somar o faturamento já dentro do laço principal, algo assim: float vTot[10]; for (i=0;i<10;i++){ vTot[i]=0; } for(i=0;i<X;i++){ printf("\n\n\nCodigo do produto...............: "); scanf("%d",&produto); if (produto<0) break; valor=vVal[buscaI(vPro,4,produto)]; printf("\nQuantidade......................:"); scanf("%d",&quantidade); printf("\nLoja............................:"); scanf("%d",&lojaDigitada[i]); int indice = buscaI(vLoj,10,lojaDigitada[i]); imposto=vImp[vCod[indice]-1]; valorSemImposto[i]=(valor*quantidade)/(1+(imposto/100)); vTot[indice]+=valorSemImposto[i]; // SOMAR AQUI } for (i=0;i<10;i++){ printf("\nFaturamento liquido da loja %2d..: R$ %.2f",vLoj[i],vTot[i]); }
  12. você definiu X como 200, sendo que o vetore vLoj e vlojas só têm dez elementos. for (i=0;i<X;i++){ vlojas [i]=buscaI(vLoj,X,viAuxc[i]); } Tem que resolver isso. Coloque também a lógica para quebrar o laço caso o código seja menor que zero, conforme solicitado no enunciado: for(i=0;i<X;i++) { printf("\n\n\nCodigo do produto...............: "); scanf("%d",&produto); if (produto < 0) break; Testei com cinco elementos e funcionou: Loja.....: 20 / Estado...: 1 / Imposto..: 10.00 Loja.....: 8 / Estado...: 2 / Imposto..: 1.20 Loja.....: 34 / Estado...: 2 / Imposto..: 1.20 Loja.....: 22 / Estado...: 5 / Imposto..: 6.00 Loja.....: 14 / Estado...: 3 / Imposto..: 3.40 Loja.....: 52 / Estado...: 4 / Imposto..: 9.30 Loja.....: 16 / Estado...: 6 / Imposto..: 3.10 Loja.....: 55 / Estado...: 4 / Imposto..: 9.30 Loja.....: 41 / Estado...: 5 / Imposto..: 6.00 Loja.....: 28 / Estado...: 6 / Imposto..: 3.10 Produto..: 203 / Valor....: R$110.00 Produto..: 120 / Valor....: R$3.00 Produto..: 340 / Valor....: R$25.00 Produto..: 220 / Valor....: R$70.00 Codigo do produto...............: 203 Valor do produto................: R$ 110.00 Quantidade......................:100 Valor da compra ................: R$ 11000.00 Loja............................:20 Valor do Imposto no estado 20...: 10.00 Valor sem imposto...............: 10000.00 Codigo do produto...............: 203 Valor do produto................: R$ 110.00 Quantidade......................:100 Valor da compra ................: R$ 11000.00 Loja............................:20 Valor do Imposto no estado 20...: 10.00 Valor sem imposto...............: 10000.00 Codigo do produto...............: 203 Valor do produto................: R$ 110.00 Quantidade......................:100 Valor da compra ................: R$ 11000.00 Loja............................:9 8 Valor do Imposto no estado 8...: 1.20 Valor sem imposto...............: 10869.57 Codigo do produto...............: 120 Valor do produto................: R$ 3.00 Quantidade......................:100 Valor da compra ................: R$ 300.00 Loja............................:8 Valor do Imposto no estado 8...: 1.20 Valor sem imposto...............: 296.44 Codigo do produto...............: 203 Valor do produto................: R$ 110.00 Quantidade......................:100 Valor da compra ................: R$ 11000.00 Loja............................:8 Valor do Imposto no estado 8...: 1.20 Valor sem imposto...............: 10869.57 Loja: 20 / Total: 10000.00 Loja: 20 / Total: 10000.00 Loja: 8 / Total: 10869.57 Loja: 8 / Total: 296.44 Loja: 8 / Total: 10869.57 Faturamento liquido da loja 0..: R$ 20000.00 Faturamento liquido da loja 0..: R$ 22035.57 Faturamento liquido da loja 1..: R$ 0.00 Faturamento liquido da loja 1..: R$ 0.00 Faturamento liquido da loja 1..: R$ 0.00 Faturamento liquido da loja -1..: R$ 0.00 Faturamento liquido da loja -1..: R$ 0.00 Faturamento liquido da loja -1..: R$ 0.00 Faturamento liquido da loja -1..: R$ 0.00 Faturamento liquido da loja -1..: R$ 0.00 Apenas tem um pequeno erro na hora de imprimir o resultado, mas se você somar verá estão corretos os resultados. Tenta resolver, se não conseguir posta aqui. Quando tento mais de 10 elementos, dá erro de segmentação.
  13. 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; }
  14. float encontraMenor(int numEmp, float *vetorSal){ float menorSal=vetorSal[0]; int i; menorSal tem que ser float também, já que está comparando com outra variável do tipo float;
  15. 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))); }
  16. Eu faria assim: void encontraDoisVals (int limInf, int limSup, int *dig1, int *dig2) { int n[2]; for (int i=0; i < 2; i++) { do { printf("\nDigite um valor inteiro %d.......................: ", i+1); scanf("%d",&n[i]); } while ((n[i] >= limInf) && (n[i] <= limSup)); } *dig1=n[0]; *dig2=n[1]; }
  17. Como isrnick sugeriu, lenha os dados fora da função int main(void) { int agencia, dig1; int conta, dig2; while (1) // Loop infinito { //Botar aqui código para ler dados de entrada if (!agencia) break; //se agencia == 0 sai do laço neste ponto calcDigitos(&conta,&agencia,&dig1,&dig2); printf("\nAgencia:............. %d - %d",agencia,dig1); printf("\nConta:............... %d - %d",conta,dig2); } return 0; }
  18. Remova o ";", pois caso contrário o código entre {} não vai ser executado dentro do while. while (getline (inFile, line)) { i++; cout << line <<'\n'; cout << i << endl; }
  19. Se for um método puramente virtual (=0), não precisa colocar no CPP, caso contrário é como você disse no seu post inicial, fazer do mesmo jeito que um método normal.
  20. você tem que tirar o "[5]" do construtor do classe "player": :player(_simbolo, _nome, _escolhas, _numjogadas)
  21. "Porque que às vezes é usado . e noutras ->" Quando se usa variáveis do tipo ponteiros, derivadas de estruturas ou classes, você deve "de-referenciar" antes de acessar seu membros. Usar "->" é um forma de se fazer isso, porém não é obrigatório, a outras formas de se fazer isso. Veja o exemplo abaixo: #include <iostream> using namespace std; #define MAX_STRING 256 struct utilizador { unsigned long id; char nome[MAX_STRING + 1]; }; int main() { utilizador *teste = new utilizador();//variável do tipo apontador int a; //As formas abaixo são equivalentes para de-referenciar o ponteiro teste teste->id = 5; //com -> (*teste).id += 1; //com . (teste[0].id) += 2; //com [], útil quando se sabe que o variável na verdade é um vetor do tipo cout<<teste->id; return 0; } Tentar procurar algum tutorial na net sobre ponteiros, referência e de-referência
  22. Se você colocar "=0" o método fica virtual (e consequentmente a classe fica abstrata). class JogG { virtual void Lancar()=0; }; Não sei se era essa sua dúvida...
  23. A classe "jogador" não está implementado todos as funções declaradas. Será que você não esqueceu de implementar alguma função virtual da classe pai "player"? A classe "player" é abstrata não é? você tem que implementar TODAS as funções virutais da classe pai na filha, caso contrário a filha também será considerada abstrata. Exemplo: #include <iostream> using namespace std; class pai { virtual int funcao() = 0; }; class filho : pai { }; int main() { filho teste; cout<<"Hello World"; return 0; } Dá o mesmo erro, porque "pai" é abstrata e "filho", derivada de "pai", não implementou a função "funcao", e, portanto, é considerada abstrata também. Para consertar, basta implementar a função virtual: #include <iostream> using namespace std; class pai { virtual int funcao() = 0; }; class filho : pai { int funcao() {return 0;} }; int main() { filho teste; cout<<"Hello World"; return 0; } Agora não dá mais o erro. Espero ter ajudado.
  24. Dentro desse "wihle", faça uma lógica para verificar se o número é maior que zero ou menor. Se for maior, você soma ao num1, se for menor, você soma ao num2.
  25. Não sei se é a melhor solução, mas baseado no seu código fiz a seguinte solução. Testei e parece funcionar. A ideia e você verificar se um número já existe antes de adicioná-lo a vetor2. Alternativamente você poderia já eliminar os repetidos no laço de leitura. #include <iostream> #include <string.h> using namespace std; int main(void) { int i, j, vetor[10], vetor2[10], index = 0; bool achei = false; for(i=0 ; i<10; i++) { printf("%i - Digite um numero: ", i+1); scanf("%i", &vetor[i]); } memset (vetor2, 0, sizeof(int)*10); //zera o vetor 2 for(i=0; i<10; i++) { for(j=0; j<10 ; j++) //procura por valores repetidos { if (vetor[i] == vetor2[j]) //achei um valor que já existe no vetor2[j] { achei = true; break; } } if (!achei) vetor2[i] = vetor[i]; // se não achei o número, então posso adicioná-lo ao vetor2. achei = false; } for(i=0 ; i<10; i++) printf("%i-", vetor2[i]); return 0; }

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!