Flávio Pedroza
Membro Pleno-
Posts
2.067 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
Tudo que Flávio Pedroza postou
-
C Eliminar elementos repetidos do VETOR
Flávio Pedroza respondeu ao tópico de kamiLuke12 em C/C#/C++
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; } -
C Código com dificuldades em impressão de nomes em ordem algabética
Flávio Pedroza respondeu ao tópico de Tecprogram em C/C#/C++
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; } } -
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.
-
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; } }
-
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; }
-
C++ Preciso que este programa diga qual o maior e menor salário liquido
Flávio Pedroza respondeu ao tópico de Oliveira003 em C/C#/C++
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. -
Delphi Erro execução de .BAT
Flávio Pedroza respondeu ao tópico de Blumer Celta em Programação - outros
Tenta usar o comando SetCurrentDir('C:\'); antes de executar o .bat; -
Posta o código do que você já fez, por favor.
-
C Algoritmo em C que leia a pena números inteiros pares e ímpares
Flávio Pedroza respondeu ao tópico de A.M.M. em C/C#/C++
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 } } -
i = 1; while (i <= num) { fat *=i; i++; }
-
C operação com vetores. condicional. operadores lógicos. faeterj. fac. av2. 2017.
Flávio Pedroza respondeu ao tópico de jcgs98 em C/C#/C++
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]); } -
C operação com vetores. condicional. operadores lógicos. faeterj. fac. av2. 2017.
Flávio Pedroza respondeu ao tópico de jcgs98 em C/C#/C++
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. -
C operação com vetores. condicional. operadores lógicos. faeterj. fac. av2. 2017.
Flávio Pedroza respondeu ao tópico de jcgs98 em C/C#/C++
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; } -
C Funçao com ponteiros, vetores, laços e condicionais. FAETERJ. 2017. FAC. AV2.
Flávio Pedroza respondeu ao tópico de jcgs98 em C/C#/C++
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; -
C Funçao com ponteiros, vetores, laços e condicionais. FAETERJ. 2017. FAC. AV2.
Flávio Pedroza respondeu ao tópico de jcgs98 em C/C#/C++
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))); } -
C Funçao com ponteiros, vetores, laços e condicionais. FAETERJ. 2017. FAC. AV2.
Flávio Pedroza respondeu ao tópico de jcgs98 em C/C#/C++
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]; } -
C Funçao com ponteiros, vetores, laços e condicionais. FAETERJ. 2018. FAC. AV2.
Flávio Pedroza respondeu ao tópico de jcgs98 em C/C#/C++
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; } -
C++ C++ Problemas com leitura de arquivo txt
Flávio Pedroza respondeu ao tópico de Joanderson Pereira em C/C#/C++
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; } -
C++ como declarar um metodo virtual no ponto cpp
Flávio Pedroza respondeu ao tópico de _rsd_17 em C/C#/C++
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. -
você tem que tirar o "[5]" do construtor do classe "player": :player(_simbolo, _nome, _escolhas, _numjogadas)
-
C Porque a declaração de user como um apontador dentro da estrutura review?
Flávio Pedroza respondeu ao tópico de fabiopires010 em C/C#/C++
"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 -
C++ como declarar um metodo virtual no ponto cpp
Flávio Pedroza respondeu ao tópico de _rsd_17 em C/C#/C++
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... -
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.
-
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.
-
C Leia um vetor com 10 números inteiros. Escreva os elementos do vetor eliminando
Flávio Pedroza respondeu ao tópico de Yumini em C/C#/C++
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