Ir ao conteúdo
  • Cadastre-se

vangodp

Membro Pleno
  • Posts

    1.752
  • Cadastrado em

  • Última visita

Tudo que vangodp postou

  1. Eu n entendo nada desses cálculos matemáticos doidos sheuseu, mas o erro n pode ser por " if (delta = 0)" quando deveria ser "if (delta == 0)"? adicionado 1 minuto depois e também preste atenção porque sqrt retorna floats, e você ta guardando em int, isso causa perda de dados ja que descarta a parte decimal.
  2. Isso só acontece se você rodar o programa desde codeblocks, se você rodar ele diretamente desde seu exe o programa não pausará, a menos que tenha um system pause, getchar ou qualquer outro sistema para pausar. É o codeblocks que pausa o programa por você para que lhe de tempo de ver o código de retorno.
  3. Use um vetor como diz aqui: Para armazenar as notas do vetor necessita um laço for que itere 6 vezes, pedindo uma por uma cada uma das 6 notas. Agora: -Guarde a soma de todas as posições do vetor em uma variável chamada soma. Obviamente você deve usar um laço for para somar. -Uma vez feito o anterior você terá uma variável com todos os valores somados, agora divida por 6 e guarde isso em outra variável, você pode chamar ele de "media", essa é a media. -Para apresentar as notas abaixo da media, pegue o vetor e passe ele por um laço for, compare cada posição do vetor com a media e só imprima se o valor desta mesma posição do vetor se for menor que a media, para comparar use if. Algo como if (notas[x] < media){ imprima notas[x] }. É só pedir para o usuario indicar um numero, conferir que esse numero esteja entre 0 e 5, lembrando que em C, os vetores iniciam em 0, se o usuário indicar 1, na realidade ele esta indicando a posição 0 de notas. Tente fazer seguindo esses passos e já lhe vão prestando ajuda. Está proibido fazer exercícios para outras pessoas aqui no fórum, é regra. Mesmo porque se outro fizer seus deveres você nunca avançará como programador.
  4. @Noobia De passo posso explicar algumas coisas. quando tiver isso: Faixa de consumo em KW: R$ pagos por kW: 0 - 30 0,0423 31 - 100 0,0725 101 - 200 0,1087 Acima de 200 0,1208 ...E uma variável que tomará um desses valores no meio do seu programa seja pelo processo que seja e você quiser criar a condição de um if por exemplo, use sua voz, não é descabelado você programar falando com seu computador. Se você pegar "if ( num >= 0 && num <= 30 ) {...}else{...}" e trocar todos os simbolos por palavras verá que programar é algo lógico e bem parecido a falar com o computador. Se substituir todas os simbolos por frases tipo: if "se" num "numero" >= " é maior ou igual a" 0 "zero" && "e" num "numero" <= "é menor ou igual a" 30 "trinta" "fazer isso" -> {...} else "senão fazer esse outro" -> {...} E se juntar tudo a magia acontece... "Se"+"numero"+"é maior ou igual a "+"zero"+"e"+"numero"+"é menor ou igual a"+"trinta"+"fazer isso" -> {...}+"senão fazer esse outro" -> {...} Explique ao seu computador o que fazer em cada momento, todo mundo vai achar que você ta doida, e nem fazem uma ideia HAHAHAH. Brincadeirinha
  5. Não é nenhum transtorno, é que o olho agradece >_<. Da um minutinho para analisar o seu problema. adicionado 27 minutos depois #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> #include <math.h> int main() { setlocale ( LC_ALL, "Portuguese" ); float quadro; int num; char categoria; printf ( "Olá! Você deseja ver os números pares de 0 a 200 ou verificar o consumo de energia?" ); printf ( "\nInforme 1 para os números pares, informe 2 para o consumo de energia: " ); scanf ( " %c", &categoria ); switch ( categoria ) { case '1': printf ( "\nOs números pares de 0 a 200 são:" ); printf ( "\n2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200" ); break; case '2': printf ( "\n\nPois bem, vamos verificar seu consumo de energia.\n" ); printf ( "Precisamos saber onde você se enquadra, então, vamos começar." ); printf ( "\nIremos lhe informar a tabela de gasto e seus respectivos enquadramentos, só pra você poder se orientar melhor: " ); printf ( "\n\n0 - 30 quadro 1 " ); printf ( "\n31 - 100 quadro 2" ); printf ( "\n101 - 200 quadro 3" ); printf ( "\nAcima de 200 quadro 4" ); printf ( "\n\nDigite o quanto você gastou: " ); scanf ( "%d", &num ); if ( num >= 0 && num <= 30 ) { //0 - 30 = 0,0423 quadro = 0.0423 * ( float ) num; printf ( "\nVocê deverá pagar %.2f", quadro ); } else if ( num >= 31 && num <= 100 ) { //31 - 100 = 0,0725 quadro = 0.0725 * ( float ) num; printf ( "\nVocê deverá pagar %.2f", quadro ); } else if ( num == 101 && num <= 200 ) { // 101 - 200 = 0,1087 quadro = 0.1087 * ( float ) num; printf ( "\nVocê deverá pagar %.2f", quadro ); } else if ( num > 200 ) { // Acima de 200 = 0,1208 quadro = 0.1208 * ( float ) num; printf ( "\nVocê deverá pagar %.2f", quadro ); } break; default: break; } return 0; } Faça a prova e veja se ele rodou bem. Logo compare com o seu, se tiver duvida pergunte e diga em que partes tem maior dificuldade. Não sei se esta correto totalmente, mas se tiver dando erros avise.
  6. Ola. Seja bem-vinda. adicionado 0 minutos depois Antes de nada de uma olhada aqui-> adicionado 4 minutos depois Isso facilita a compreensão do seu código, agilizando para todos, já que nenhum de nós recebemos $$ por ajudar, ajudamos de bom agrado. E isso também lhe ajudará a receber atenção mais rapidamente, pois se você facilitar a vida dos outros usuários, certamente vai receber ajuda mais rápido.
  7. Você deveria usar ponteiros duplos. Tal como você esta fazendo é passando uma copia de enderecoAnitta a novaCasa, ao tentar alterar novaCasa você n esta alterando enderecoAnitta. Em outras palavras se você tiver isso: void MudouPara(char *novaCasa){...} int main(){ char *enderecoAnitta; MudouPara( enderecoAnitta ); return 0; } ... é o mesmo que fizer isso no main: int main(){ char *enderecoAnitta; char *novaCasa; novaCasa = enderecoAnitta; return 0; } você esta fazendo uma copia do valor de enderecoAnitta em novaCasa, mas se imprimir enderecoAnitta nada mudou porque na função você altera novaCasa e não enderecoAnitta, lembre que são 2 variáveis diferentes. Se você quer alterar o ponteiro(enderecoAnitta) indiretamente através de novaCasa, deve usar ponteiros múltiplos, neste caso duplos. Busque em internet algum bom tutorial de ponteiros duplos, triplos etc, se ainda não souber esse tema. Seu problema resolvido é assim: void MudouPara(char **novaCasa){ char *novoEndereco = "Rua Piaui, 718"; *novaCasa = novoEndereco; } int main(){ char *enderecoAnitta; enderecoAnitta = "Rua da Mantiqueira"; cout << "Antigo: " << enderecoAnitta << endl; MudouPara( &enderecoAnitta ); cout << "Novo: " << enderecoAnitta << endl; return 0; } note que no parametro agora tenho ponteiro duplo, e que na hora de invocar a função eu passo o endereço do ponteiro. Se você ja tava revoltado antes com ponteiros agora você vai morder quem estiver ao lado sheuhsuehsuehsuh
  8. o cin tem a "má" costume de ler até encontrar um espaço(' '), o enter('\n') ou um tabulador('\t') isso faz com que cin deixe de ler imediatamente, ou seja se você tiver uma string e tentar ler um nome junto com sobrenome por exemplo, certamente ele só vai liberar o nome para a variavel. Vou tentar explicar melhor.... Quando você tiver... string nome; ...e tentar ler "Luiz Henrique"... cin>>"Luiz Henrique"; ...você vai digitar "Luiz Henrique" e apertar o enter para informar que terminou de digitar, saiba que no buffer você tem a seguinte string "Luiz Henrique\n" que basicamente é composto por isso-> Luiz+espaço+Henrique+enter(Luiz+' '+Henrique+'\n') Quando o programa detectar que o \n(Enter) entrou no buffer automaticamente começa a "descarregar" os dados para as variáveis que você criou. O problema é que será liberado os dados em "pedaços" separados pelos 3 caracteres que citei lá no começo, ou seja, o espaço(' '), o enter('\n') ou o tabulador('\t'). Então será liberado "Luiz" para a variável nome porque logo depois ven um espaço, o resto permanecerá no buffer esperando outras variáveis para ser descarregadas, e olha que sorte... logo depois vem o cpf. XD Adivinha o que vai parar no cpf... Rode ele ai no seu computador e comprove: #include <iostream> using namespace std; int main () { string nome; string cpf; cout << "Digite \"Luiz Henrique\" e aperte o enter normalmente: "; cin >> nome; cin >> cpf; //<-vai pular e cpf vai guardar henrique XD cout << "No nome tem: " << nome << endl; //vai imprimir só Luiz cout << "E no cpf acredito que tem Henrique verdade?: " << cpf << endl; //E o Henrique vai estar aqui!!! return 0; } Agora que entendeu mais ou menos qual o problema, ou pode que não shuehsuesuhe, que se pode fazer? Para ler linhas inteiras você pode usar o getline(cin, nome); Então a resposta é, use o getline para ler frases que contenham espaços(strings com espaços)... e cin para palavras simples(strings que contenham somente 1 única palavra sem espaços nem tabuladores), dados básicos como int, float ou char, etc. Se continuar com duvidas pergunte.
  9. #include<iostream> #include <stdio.h> #include <stdlib.h> using namespace std; struct funcionario { string nome/*[50]*/; float salario; }; typedef struct funcionario funcionario_t; //nomeia a struct funcionario para funcionario_t void cadastra_funcionario ( funcionario_t lista_funcionario[], int tamanho_lista ) { funcionario_t novo_funcionario; //tamanho_lista = 0; cout << ( "Digite o nome do funcionario: " ) << endl; cin >> novo_funcionario.nome; cout << ( "Insira o salario do funcionario: " ) << endl; cin >> novo_funcionario.salario; lista_funcionario[tamanho_lista] = novo_funcionario; } void maior_salario ( funcionario_t lista_funcionario[], int tamanho_lista ) { //função para maior salario if ( tamanho_lista > 0 ) { int i, maior_indice; float maior_salario = 0; for ( i = 0; i < tamanho_lista; i++ ) { if ( lista_funcionario[i].salario > maior_salario ) { maior_salario = lista_funcionario[i].salario; maior_indice = i; } } //TENTEI USAR COUT AQUI, MAS DEU ERRO //cout<< "Nome do Funcionario: " << ista_funcionario[maior_indice]; //cout<< "Maior salario: " << maior_salario; printf ( "Nome do Funcionario: %s\n", lista_funcionario[maior_indice].nome.c_str() ); printf ( "Maior Salario: %f\n", maior_salario ); } } int main ( void ) { funcionario_t lista_funcionario[50]; int tamanho_lista = 0; int continuar = 1; char opcao; do { cout << ( "===============================" ) << endl; cout << "Tecle 1 para CADASTRAR: " << endl << "Tecle 2 para MAIOR SALARIO: " << endl << "Tecle 0 para SAIR: " << endl; cin >> opcao; switch ( opcao ) { case '1': //chama a função cadastra_funcionario cadastra_funcionario ( lista_funcionario, tamanho_lista ); tamanho_lista++; break; case '2': // chama a função maior salario maior_salario ( lista_funcionario, tamanho_lista ); break; case '0': //encerra continuar = 0; break; default: // encerra se nenhum numero for informado continuar = 0; } } while ( continuar == 1 ); { getchar(); return 0; } }; basicamente o tamanho_lista = 0 dentro da função cadastra_funcionario que ta causando erro, e o tamanho_lista++ também é meio que inutil ai dentro. também fiz umas correções. tipo imprimir string com printf usando o especificadar %s, precisa usar .c_str() para converter de string(classe) para string de C e poder usar o printf. O correto é usar cout para tudo ja que se trata de c++
  10. Eu não estou 'atrasadinho' pois as implementações que eu imaginei para a linguagem ainda não ocorreram. Nem vão ocorrer shuehsuhseh adicionado 7 minutos depois É verdade... Mas o que adiantaria termos um programa com alta performance que demora 20 anos para ser escrito? Não exagere, para controladores todo mundo sabe que C é "perfeito", por isso nunca vão ocorrer "implementações" nem mudanças.
  11. Neste caso tenho para dizer que nem em uma, duas ou dez variáveis o tempo é imperceptível, mas quantas menos variáveis reservar melhor, porque reservar também leva tempo. Se tiver que reservar milhares de variáveis, tente fazer da forma mais "econômica", mas realmente para esse exemplo das duas formas está correto. O tempo vai depender de muitas coisas, potencia do computador, programas que estiverem rodando ao mesmo tempo, tamanho do seu programa, etc. Meu conselho é que agora mesmo, por enquanto estiver estudando, não se preocupe muito com essas coisas. Tente se concentrar em fazer seus programas funcionarem... logo sempre há tempo para otimizações. você n4ao pode ser um chef sem saber fritar ovos primeiro. >_< Sempre faça que seu programa funcione corretamente antes que nada, se um dia ele for lento para suas necessidades devido a um aumento significativo em linhas de código, então você sempre poderá mudar umas quantas linhas e faze-lo mais rápido, com o tempo você saberá como faze-lo. Mas neste caso 2 variáveis é mais correto que 1, porém menos pratico. Eu diria que neste caso o que for mais pratico para você pois se trata de um programa para estudos.
  12. Amiguinho... Pra começar, fopen faz parte de C, em c++ se usa streams e n ponteiros, você parece ser "um crack" em praticamente tudo o que faz, um ser superior, divino de luz, inclusive mais inteligente que o criador da linguagem, e de tudo entende, deveria saber disso e não usar exemplos desnecessários e fazer a todos os usuários perder tempo. Eu vejo utilidade no caso do fopen, outra coisa é que você não consiga ver. Se tiver mais consultas escreva, ou mais casos de mal uso de ponteiros, bota ai, ou não nos faça perder mais tempo. sinceramente acredito que este tema n leva a parte alguma e já ta tardando em ser moderado. adicionado 2 minutos depois não... o faremos em java que é muito melhor. >_<
  13. uma coisa é certa... eu n estou aqui para lhe convencer usar c++. Talvez para você seja mais avançado usar o java, ou portugol. Lá não tem ponteiros... ou sim? Referente a ponteiros e trilhas, e sei lá que mais coisas você falou... você é livre de usar qualquer coisa que bem entender nos seus programas, globais, retorno de valores e etc, só n sei se vai fazer muita graça a quem lhe financie. Se achar que ponteiros é muito hard deixe eles de lado ou volte a estudalos. Sobre todas essas coisas de ^ laranjas e cebolas nem ligue se você programar de forma padrão. Por outro lado se você tiver que usar visual c++, então melhor buscar uma boa guia.
  14. vou responder a ultima... as outras deixo pros expert hehe FILE é algo como isso aqui: #ifndef _FILE_DEFINED struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE; #define _FILE_DEFINED #endif e ta no arquivo wchar.h A função fopen realiza certas operações e preenche uma variável file INTERNA com certas informações, posição do inicio do arquivo entre outras coisas menos relevantes e retorna ela pro main. Qual o problema? você ja tentou retornar uma variável criada em outra função pro main? Certamente sim não é? A resposta é N$AO!!! quando você fizer algo tipo int foo(){int a; return a;} e no main fizer algo como int main(){ int var = foo(); } var vai receber uma copia... e justo depois a variável "a" dentro de foo vai ser destruída!!! Tá mas qual o problema, eu tenho ela no main? Sim...!!!! mas se tiver que passar var para outra função desde main vai ter que criar um ponteiro certo? porque se passar por cópia vai ter vários clones de var e vai ser um problema alterar 1 só delas, se fosse um ponteiro isso tudo se simplificaria. Resumindo... Desde quando fopen for chamada, e conseguir abrir com êxito o tal arquivo, será criado uma variável dinamicamente do tipo FILE, na qual pode ser manipulada desde qualquer lugar no seu programa(qualquer outra função), porque é um ponteiro. TENDEU? então..... SIM!!!! É necessário porque você ta mexendo com um ponteiro que indica em que posição do arquivo você está. Não sei se deu para entender... mas faça a prova no seu pc. Passe variáveis desde uma função a outra e tente manipular uma só instância delas, ou seja, quando tiver uma struct, que somente uma delas esteja manipulada.
  15. falta um flush depois de pedir idade também adicionado 1 minuto depois ...mesmo assim ainda n entendo como ensinam o uso do ffluch junto com stdin
  16. Para ler as 2 linhas que você colocou #include<stdio.h> #include <stdlib.h> int main(){ FILE * file; file = fopen ( "arquivo.txt", "r"); char nome[1024] = {0}; char buffer[1024] = {0}; if(file == NULL){ perror("Erro: "); getchar(); exit(1); } //Lemos um int e o descartamos com %*i, lemos uma string que contenha somente letras minusculas e maiusculas com %[A-Z a-z] e lemos o resto dos elementos da linha como uma string com %[^\n]%*c(Espaços incluidos) fscanf(file, "%*i %[A-Z a-z] %[^\n]%*c", nome, buffer); puts(nome); //Agora lemos a segunda linha. É a mesma coisa que acima porém não ha necesidade de ler o resto da segunda linha para este exemplo por isso somente lemos um int e o nome fscanf(file, "%*i %[A-Z a-z]", nome); puts(nome); getchar(); return 0; } A coisa é repetir esse fscanf para ler linha por linha até acabar o arquivo, e ir comparando com o nome que você quer buscar. O arquivo para teste esta assim: arquivo.txt 3401 LUCIA GONCALVES 0017786001 00000 BRL000000000000000000000000016182 00000 3402 MARTA PEREIRA DOS SANTOS 0017786002 00000 BRL000000000000000000000000010283 00000
  17. Primeiro não confundir declarar com implementar, isso é muito importante. Declarar é "avisar" ao compilador de que existirá certas variáveis. É justo no implementar que as variáveis ganham espaço na memória, e é então quando você já pode usar ditas variáveis. adicionado 0 minutos depois #include <iostream> using namespace std; class soma { public: soma(){} ~soma(){} static int adicao(int um_a, int um_b){ seu_a = um_a; seu_b = um_b; return (seu_a + seu_b); } private: //Aqui declaramos que existirá esses dados, mas realmente ainda não estão na memoria. static int seu_a; static int seu_b; }; //Aqui definimos. Aqui é onde se aloca espaço. Sei não fizer isso não será possivel chamar soma::adicao(int, int) int soma::seu_a; int soma::seu_b; int main (){ cout << soma::adicao(10,5); cin.ignore(); return 0; }
  18. vangodp

    C++ numeros impares ate 150

    Se o objetivo é saber os ímpares a forma mais eficiente é só mostrar os ímpares acredito. #include<iostream> using namespace std; int main () { for ( int i = 1; i < 150; i+=2 ) { cout << "Numero impares: " << i << endl; } return 0; }
  19. Algo bem complexo para explicar em poucas linhas. Como tudo em C/C++ são bibliotecas, isso é o que você deve buscar... "uma biblioteca". Deixo uma busca no google que talvez lhe ajude. https://www.google.com/search?client=firefox-b-d&q=http+get+c%2B%2B+example
  20. A firma da função deve ser igual tal como comentou Pedrosa, é dizer que se na classe abstracta Node você declarou a firma da função firtual tal como "virtual int compareTo(Node *Node) = 0;", na implementação da função da classe derivada a firma deve igual "int Person::compareTo(Node *node){...}". você pode perfeitamente passar um objeto Person mesmo que essa função espere o tipo Node, seguindo o principio de uma coisa chamada "object slicing"(Perdoe se não sei como se traduz em ptbr), recomendo buscar isso por internet. A única pega é que você precisa ter declarado esse objeto dinamicamente(O objeto Person que vai ser recebido nos parâmetros de compareTo deve ser declarado com new) e logo fazer o cast usando dynamic_cast. Para você fazer uma ideia aqui deixo a função que sobre escreve compareTo da classe abstrata na classe Person. /********************************** * VIRTUAL FUNCTIONS * **********************************/ int Person::compareTo(Node *p){ //Recebe Person Person * person = dynamic_cast<Person *>(p); //Casting de Node a Person int equal; if (this->id < person->id){ equal = -1; } else if (this->id == person->id){ equal = 0; } else{ equal = 1; } return equal; } Vou lhe deixar o meu projeto de codeblocks abstractor.rar Tive que mudar um pouco os includes pois você teria separado por pastas e eu simplesmente coloquei tudo junto. Se tiver dúvidas pergunte. Lhe recomendo que busque no google "Object Slicing" para entender o tema. Se não encontrar nada, talvez seja possível gravar um video explicando o tema, quando tiver algum tempo livre claro.
  21. Nesta pagina de aqui-> https://sourceforge.net/projects/gnuplot/files/gnuplot/5.2.7/ Baixa a versão gp527-win32-mingw.7z https://sourceforge.net/projects/gnuplot/files/gnuplot/5.2.7/gp527-win32-mingw.7z/download
  22. também acho que esse R ta sobrando mas n conheço muito de Linux >_<. Si tiver subpastas também vão sair no arquivo
  23. você bem pode seguir a estratégia que lhe referiu isrnick que é usar a função rename: rename("arquivo.txt", "subpasta/arquivo.txt"); Ou bem você pode simplesmente abrir esse tal arquivo, e copiar ele byte a byte na nova pasta, e logo borrar ele com a função remove, mas certifique-se que antes de borrar ele você o tenha fechado com fclose, ou não conseguirá borra-lo. Prove e me diga o que lhe pareceu.

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!