Ir para conteúdo
Fórum Script Brasil

vangodp

Membros
  • Total de itens

    884
  • Registro em

  • Última visita

Tudo que vangodp postou

  1. Essa linha esta mal: while ( cod_produto = 1 && cod_produto <= 9999 ) na parte cod_produto = 1, sempre se vai executar pois cod_produto sempre vai valer 1. Não seria cod_produto >= 1?. Essa linha esta errada tambem: printf ( "O preço total da compra foi de %.2f x %d = %f", preco_custo = preco_custo * quantidade ); você tem 3 especificadores, %.2f, %d e %f, porem preco_custo = preco_custo * quantidade se trata de uma só expressão, é como si fosse: preco_custo = preco_custo * quantidade printf ( "O preço total da compra foi de %.2f x %d = %f", preco_custo ); ... O preço_custo vai parar no %.2f, os outros 2 especificadores estão esperando suas respectivas variáveis. Talvez seja: printf ( "O preço total da compra foi de %.2f x %d = %f", preco_custo, quantidade, preco_custo * quantidade ); A mesma coisa acontece na linha de abaixo: printf ( "O preço de venda da compra foi de %.2f x %d = %f", preco_venda = preco_venda * quantidade );
  2. Com essa funcionou?: O primeiro parâmetro da função membro open espera um const char*, nome.c_str() devolve o string convertido em const char*. Outra coisa que me dei conta... tire o std::ios::binary, é para arquivos binários. Al parecer deveria produzir um cast implícito o algo, coisa que no meu computador sim se produziu, porem no seu al parecer não.
  3. Que compilador você esta usando? Me funciona perfeito. Prove: nome = nome + ".txt"; file.open ( nome, std::ios::in | std::ios::binary ); ou nome = nome + ".txt"; file.open ( nome.c_str(), std::ios::in | std::ios::binary );
  4. você pode fazer uso da função membro is_open(); que te retorna um "true" caso o arquivo tenha sido aberto corretamente, ou você pode usar as exceptions(excepções), nesse caso é algo complicado. Un exemplo com manejo excepções: #include <iostream> #include <fstream> int main() { int i; std::ifstream file; //crie um archivo na mesma pasta e ponha um int dentro na primeira linha. std::string nome; try { //tentamos abrir e ler std::cout << "indique o nome do arquivo: "; std::cin >> nome; file.open( (nome+".txt"), std::ios::in | std::ios::binary ) ; if ( !file ){ throw std::ios::failure ( "Erro ao abrir o arquivo!" ); //seteamos um aviso caso nao seja possivel abrir } // sem erro desde aqui file >> i; //si chegamos aqui lemos um inteiro // ... } catch ( const std::exception& e ) { std::cerr << e.what() << '\n' ; //Si nao abriu lançamos o aviso, podemos terminar o programa com um return, leberar memoria antes de sair etc etc } std::cout << i; file.close(); return 0; } is_open(): #include <iostream> #include <fstream> int main() { int i; std::ifstream file; //crie um archivo na mesma pasta e ponha um int dentro na primeira linha. std::string nome; std::cout << "indique o nome do arquivo: "; std::cin >> nome; file.open ( ( nome + ".txt" ), std::ios::in | std::ios::binary ) ; if ( file.is_open() ) { file >> i; std::cout << i; file.close(); }else{ std::cout << "Nao foi possivel abrir o arquivo" << std::endl; } return 0; } Crie um arquivo de texto com o nome que você quiser, ponha um um int na primeira linha para fazer uma prova, logo quando o programa perguntar o nome ponha o nome sem o .txt.
  5. E qual sua duvida? porque ver seu código sem saber o que você quer fazer é um pouco assim dahhhh!!
  6. Tá... mas ele vai separado por espaços, virgulas etc etc?
  7. comparte o arquivo de texto, é mais importante que mostrar seu código.
  8. ao parecer o sprintf dentro de main da problemas na hora de asignar o valor de retorno a funçao hora o string horaSistema. Eu troquei sprintf ( horaSistema, "%s", hora() ); por strcpy(horaSistema,(char*)hora()); e funcionou corretamente, mas não sei por que isso. #include <iostream> #include <string.h> #include <time.h> /* Função format - Retornar um ponteiro para uma variavel do tipo char com o valor da conversão */ char *format ( int number ) { char *retorno; char ret[100]; if ( number < 10 ) { sprintf ( ret, "0%d", number ); /* Retorna o resultado em uma variável */ retorno = ret; return retorno; } else { sprintf ( ret, "%d", number ); retorno = ret; return retorno; } } /* Fim Função Format */ /* Função que retorna a hora */ char *hora ( void ) { int hora; int minuto; int segundo; char varHora[100]; char varMinuto[100]; char varSegundo[100]; char varHoraFormatada[100]; char *retornoHoraFormatada; struct tm *local; time_t t; t = time ( NULL ); local = localtime ( &t ); /* Obter hora, minuto e segundo e os alocar em uma variavel do tipo */ hora = local -> tm_hour; minuto = local -> tm_min; segundo = local -> tm_sec; /* Converter os valores retornados pelos ponteiros da função em variaveis do tipo char */ sprintf ( varHora, "%s", format ( hora ) ); sprintf ( varMinuto, "%s", format ( minuto ) ); sprintf ( varSegundo, "%s", format ( segundo ) ); /* criar a variavel de retorno dos dados e cria um ponteiro para essa variavel */ sprintf ( varHoraFormatada, "%s:%s:%s", varHora, varMinuto, varSegundo ); /* Retorna hora no formato hh:mm:ss com um ponteiro */ retornoHoraFormatada = varHoraFormatada; return (char*)retornoHoraFormatada; } /* Fim Função Hora */ int main() { char horaSistema[100]; //sprintf ( horaSistema, "%s", hora() ); strcpy(horaSistema,(char*)hora()); printf ( "%s\n", horaSistema ); std::cin.ignore(); return 0; }/* Mudar o Fuso Horário */Prove e me diga si funciona. o programa retorna um string com a hora atual do sistema, nada mais.
  9. vangodp

    Duvida no Scanf

    troque scanf("%s", &nome[cont]); por scanf("%s", nome[cont]);. Não precisamos por & quando se trata de usar %s, nome é considerado um ponteiro, si você não estudou ponteiros não ligue, simplesmente recorde que não tem que por o & quando for usar %s ;)
  10. vangodp

    Ajuda com Ex

    você esqueceu de por o código?
  11. vangodp

    Criar Funcao

    te disse que use strtok. na pagina de referencia http://www.cplusplus.com/reference/cstring/strtok/, tem um exemplo que com um minimo retoque serve perfeitamente para seu exemplo. /* strtok example */ #include <stdio.h> #include <string.h> int main () { char str[] ="- This, a sample string."; char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); pch = strtok (str," ,.-"); while (pch != NULL) { printf ("%s\n",pch); pch = strtok (NULL, " ,.-"); } return 0; }Ele pega a frase "- This, a sample string." e imprime ela: This a sample stringsi você modificar a linha printf ("%s\n",pch);...retirando o \n ele vai imprimir tudo junto sem espaços na mesma linha, pois os tokens são " ,.-", em outras palavras são espaço, vírgula, ponto e traço alto, o programa vai dividir toda a frase justo no ponto que encontrar esses caracteres excluindo-lhes da frase.
  12. Primeiro é tomar nota das variaveis que seu proprio programa te estao indicando : //inteiros (ints) -leituraInicial -leituraFinal -valeTransporteMeiaPassagem -valeTransportePassagemInteira //floats ou doubles -valorAtualPassagem -valorValeTransporteMeiaPassagem -valorValeTransportePassagemInteira comece dando valores a essas coisas que você sabe quais tem um valor já estabelecido. Essas são: valorAtualPassagem, valorValeTransporteMeiaPassagem que sabemos que é a metade do valor da passagem e valorValeTransportePassagemInteira que custa o mesmo porem não é dinheiro. Logo informe o valor inicial da catraca do transporte... vamos supor que inicia em 750, logo o valor final, vamos por 1000, então já temos 2 valores mais que são leituraInicial e leituraFinal, para saber quantas pessoas andarão, é só restar leiturainicial de leituraFinal, vai sobrar 250 que foram os passageiros que entraram no transporte nesse viagem, esse valor você tem que guardar em uma variavel chamada por exemplo totalPassagensVendidas = leituraFinal - leiturainicial, vamos chamar ela simplesmente de total. Agora que já temos o valor total precisamos saber quantas passagens foram vale transporte, de meia passagem(desconto) e quantas de passagem inteira, ou seja que precisamos de 2 variáveis mais, nValesIntegors e nValesDesconto ou como queira chamar. Esses valores você vai ter que inventar, pense si temos 250 passageiros, 50 entraram com vale integro, e sei lá, 30 com desconto que pagam só a metade. Uma vez que temos esse valor teríamos total, integrais, e descontos, esses são os valores importantes porque são eles que vão te dizer quanto tem que pagar em dinheiro. Agora faça o calculo.... Comece por descontar os vales inteiros do total total = total - nValesIntegros; //ou seja a 250 restamos 50 Agora a mesma operaçao mas para vales desconto total = total - nValeDescontos // 200 - 30 total vai ficar com 170 passageiros que pagaram com dinheiro. você pode obter o valor disso com multiplicar total * valorAtualPassagem. O mesmo acontece para meias passagens, nValeDescontos * (valorAtualPassagem/2) (Vale desconto paga a metade). Somando os 2 valores obtidos é o que o trocador tem que render contas em dinheiro. Tome nota disso e tente fazer, não precisa ser estrutura, são variáveis simples, porem alguns desses valores você tem que pedir por teclado, e no final informar quanto em dinheiro tem que pagar. Anote essas variáveis em um papel e faça os cálculos, logo translade isso a código, pense que você é a condutora, vamos iniciar um trajeto, primeiro passo tomar nota da catraca, tipo inicia em X, logo pergunte quantos passageiros entraram com desconto, e quantos com vale integro.... É como criar uma historia, mentalize e tome notas. ;) si tiver mais duvidas pergunte aqui.
  13. vangodp

    Criar Funcao

    use strtok para separar elas, e logo vaia guardando elas em um string sem espaços com sprintf.
  14. por que em vez de usar cont você não usa o i?? Invocar a função não é garantia de imprimir, você deve usar cout para mostrar o resultado, também não vejo isso. Costume a pegar seu código atual e erros de compilação. Outro conselho que lhe dou é que aprenda a usar o depurador, pois com ele você pode ir vendo e controlando a execução, e os erros linha por linha.
  15. por que a função par recebe um inteiro 22, 1, 32, 1000.... O que você quiser. ela vai dizer si 22 é par, porem pode ser qualquer outro numero inteiro.
  16. Não confie muito no meu programa... Eu tenho quase certeza que ele tem falhos e não esta devolvendo o que você quer. Isso é por causa que eu não sou tão bom matemático como programador XD. Sobre sua pergunta de como melhorar, eu te diria que si você tem um calculo complexo o melhor sistema é descompor ele num papel anotando os passos e numerando os passos que você ve repetitivos, pense no seu código como passos. No seu exemplo (S = 2 / 50 + 2² / 48 + 2³ / 46 + ... + 2²³ / 2), eu entendi que S vai acumulando o valor de: de cada repetição dessas: 2 elevado a 0 dividido por 50... //note que do exponente zero ao dois da um salto de 2, porem os seguintes dão saltos de 1 em um... isso me confundiu algo. 2 elevado a 2 dividido por 48... //logo daqui em diante de 1 em 1. 2 elevado a 3 dividido por 46... O que é que você vai notando??? que o exponencial vai aumentando, de um em um a partir da segunda avaliação(essa parte não entendi) e o dividendo vai reduzindo em 2 até chegar ao 2, essa é a condiçao de parada do loop while: 2 elevado a 23 dividido por 2. Os passos repetitivos são loops e certamente podem ser resolvidos com um while o um for. Meu conselho é... Descomponha a expressão em partes mais pequenas, faça num papel, vaia anotando em passos como resolver, compare o resultado do papel com o seu código para ver si o resultado coincide. Si você tiver um grande problema, você divide ele em partes mais pequenas, isso é aplicável a toda a programação. Infelizmente você deve praticar com todas as funções matemáticas para ao menos saber que fazem e poder recorrer a elas quando seja necessário. As funções matemáticas pertencem a math.h, de uma olhada e veja os exemplos. Aqui tem uma descrição em português. Si você descompor os passos para mim eu posso fazer ele melhor. Minha intenção é que você aprenda a caminhar por suas próprias pernas, espero que tenha sorte ;)
  17. os erros são: ||=== Build file: "no target" in "no project" (compiler: unknown) ===| C:\Documents and Settings\killdozer\Escritorio\main.cpp||In function 'int inv(int, int*)':| C:\Documents and Settings\killdozer\Escritorio\main.cpp|8|error: invalid conversion from 'int*' to 'int' [-fpermissive]| C:\Documents and Settings\killdozer\Escritorio\main.cpp||In function 'int main()':| C:\Documents and Settings\killdozer\Escritorio\main.cpp|31|error: invalid conversion from 'int' to 'int*' [-fpermissive]| ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===| Somente nos reparamos nas letras negritas. na função int inv(int, int*), na linha 8 do seu programa, você tem uma conversão invalida de int* a int... Por que acontece isso? sua função tem o tipo de retorno de int, sem porem vet é um ponteiro, si não veja na linha do erro In function 'int inv(int, int*)', o segundo parâmetro "int*" que você declarou é um ponteiro. Isso int vet[] é a mesma coisa que int *vet, o compilador confirma isso no erro. então ao fazer return vet; sua função você declarou como que ia devolver um inteiro, porem você retorna um ponteiro. Isso você pode consertar mudando o tipo de retorno para int* inv(...), Automaticamente o segundo erro se soluciona, pois como você pode ver o erro é na linha 31(int *veti = inv(p,vet);), seu ponteiro esta esperando a direção e você le retorna o int, ao mudar o tipo de função de int a int* a função retorna a direção, ou seja, retorna um ponteiro, isso é o que retorna int *inv(...). Prove arrumar isso e depois comente ;).
  18. kkk o tema já tem mais de um ano. Certamente nunca mais ele volte por aqui XD
  19. #include <stdio.h> int main() { float f = 82; // graus Fahrenheit float c = 0; //para Centígrados c = (f-32)/(float)1.8; printf("%2.2f\n", c); return 0; }
  20. não sei si é o que você quer >_< #include<stdio.h> #include <math.h> main() { //S = 2 / 50 + 2² / 48 + 2³ / 46 + ... + 2²³ / 2 double s = 0; int i = 50; int e = 0; while( i>2 ){ s += pow( (double)2, e++ ) / 50; printf ( "%d/%d\n", (int)pow( 2, e-1 ), i ); i-=2; } printf ( "\ns=%d/%d <-Isso???\n", (int)pow( 2, e-1 ), i ); }
  21. vangodp

    Material De Estudo

    string status = "ligado"; cout << "O motor" << (( status == "ligado" )? " esta ligado." : " esta desligado.") << endl;
  22. vangodp

    Dúvida - Classes

    você esta criando um projeto para isso? Si não for assim, de a file->new->project... e escolha console aplication(codeblocks), siga os passos, escolha C++ tatata e pronto, logo vaia criando os arquivos e que esses estejam incluídos no menu da direita, si não aparecer aperte maiuscula+F2. Certamente você só criou o main e colocou esses 2 arquivos juntos, apesar de estar correto, o codeblocks não sabe o que fazer para linkar(ligar) esses arquivos, por isso precisa de um projeto. Ao incluir o calculo.h dentro de "" você esta dizendo a main que o "calculo.h" esta na mesma pasta, porem tanto main.cpp, como calculo.h não sabem nada de calculo.cpp, porque dentro da classe só esta a declaração, porem a definição é como si não existisse. Ao estar dentro de um projeto, codeblocks busca automaticamente entre todos os .cpp a definição de todas as funções e por isso não precisamos fazer includes de arquivos .cpp. Nem tente fazer includes de arquivos cpp, é incorreto ok. Resumindo, é impossível trabalhar em projetos algo grandes sem fazer uso de um projeto que é o que nos ajuda a manter tudo organizado. Outra coisa que você pode fazer é a função setXYZ como inline.
  23. você esta omitindo o uso dos índices[] em muitas linhas. vetorX é um array, você nunca poderá fazer vetorX = 10 ou vetorX == 10, isso ta errado, você precisa usar ¡¡¡¡¡¡SEMPRE!!!!!! o índice, tipo... vetorX ou vetor[0]. Nos scanfs ademais você deve por o & adiante de &vetorX como qualquer outro inteiro. Assim que tudo que for vetorX sem [] ta errado, corrija isso. ;) pense nisso... Que sentido tem você pedir um numero P para comparar vetorX com vetorX[P]??? E ainda isso tudo vai dentro de um for??? não será vetorX == vetorX[P]?? Fica a dica, arrume isso. Fui....
×
×
  • Criar Novo...