Ir para conteúdo
Fórum Script Brasil

vangodp

Membros
  • Total de itens

    883
  • Registro em

  • Última visita

Tudo que vangodp postou

  1. vangodp

    Ajuda com if

    somente vejo que falta os break nos casos por default, o resto esta bem.
  2. si você por ponto e virgula depois de um if o else você esta separando a instruçao do seu corpo. Tipo si eu tenho: if (opcao ==1) { contador++; } ...si eu colocar ponto e virgula depois do if tipo: if (opcao ==1); //<-ponto e virgula { contador++; } O corpo do if fica separado do if, é simplesmente um exemplo para ilustrar o que acho que pode estar acontecendo no seu código. É como dizer... Si opção é igual a 1 não faça nada. XDD
  3. mais importante que mostrar seu código é mostrar o formato que terá seu arquivo txt. você está usando C ou C++? Porque vejo tudo misturado aí >_<.
  4. busque algum parser de html para C, ou use regx.
  5. fflush ( stdin ); não é a forma adequada para limpar o buffer nunca. Isso é uma gambiarra XDDD fflush foi concebido para trabalhar com o buffer de saída(stdout). O fato de que ele funcione com stdin é pura sorte, pois essa função em particular pode dar resultados imprevistos, e não sou eu quem falou não, si não os próprios caras que criaram ela. Em C++ estamos de sorte pois temos algo mais "padrão" para isso, me estou referindo a um método membro da classe cin chamado sync. Logo depois que você fizer um cin >> algo;, chame o método cin.sync(); justo na linha seguinte. A função fflush pode dar ainda mais erros quando se tratar de strings. Agora vamos ao tema principal. Ao se tratar de "alunos" suponho que sua estrutura representa um aluno. Sendo assim não é o metodo correto de abordar o problema. O que você precisa é de um vetor de alunos, algo como isso: struct Notas { char nome [30]; float A; float B; float C; int Matricula; }; int main(){ Notas aluno[30]; ...Então nesse caso você dispõe de 30 alunos máximo tal como pediu no seu enunciado. Para mudar o nome do primeiro aluno seria algo como: cin >> aluno[0].nome; . E para mudar o nome do ultimo seria: cin >> aluno[29].nome. Dai já da para ter uma ideia de como mudar o resto dos dados. Para a tal pesquisa que você necessita, você tem que percojer todos os alunos e comparar com o que você estiver buscando, algo tipo: int i = 0; while ( i < 30 ){ if ( strcmp( aluno[i].nome, nomeBuscado){ //encontrado!!! break; } i++; }Com isso você encontra o nome no meio de 30 alunos. =) Tente implementar isso. Sorte!
  6. vangodp

    matriz dinamica

    A resposta esta em descobrir em uma coluna a quantidade de casas que tem um numero, por exemplo, na ultima linha desse seu exemplo: Vamos pegar a ultima coluna: ----------- .....| 100| ----------- .....| 1| ----------- .....|1000| ----------- seria usar a função que pertence a tal biblioteca iomanip, que se chama setw, e fazer algo como isso: #include <iostream> // std::cout, std::endl #include <iomanip> // std::setw int main () { std::cout << '|' << std::setw(4) << 100 << '|' << std::endl; std::cout << '|' << std::setw(4) << 1 << '|' << std::endl; std::cout << '|' << 1000 << '|' << std::endl; return 0; }Que de saída gera algo como: | 100| | 1| |1000|Conclusão... setw estabelece uma "largura" que se mede em letras, std::setw(4) quer dizer que eu quer usar uma largura de 4 letras para cada numero que eu colocar std::setw(4) adiante. Essa linha: std::cout << '|' << std::setw(4) << 100 << '|' << std::endl; ...é como dizer, imprime '|', depois imprime 100 como si tivesse 4 letras, evidentemente si não tem 4 letras o setw preenche com espaços, e logo depois pinte '|' novamente. O sewt somente afeta ao seguinte que vai ser impresso, si não a barra sairia 3 espaços mais adiante. Então como falei antes, descobre quantas casinhas tem o maior numero da coluna e use isso valor de parâmetro para setw. Um exemplo para saber o maior numero da coluna é: #include <iostream> // std::cout, std::endl #include <iomanip> // std::setw int main () { int num = 1000; int digitos = 1; // um digito sempre deve ter, nem que seja o zero ;) while ( (num / 10) > 0 ) { num = num / 10; digitos++; } std::cout << "num contem " << digitos << " Digitos" << std::endl; std::cout << '|' << std::setw ( digitos ) << 100 << '|' << std::endl; std::cout << '|' << std::setw ( digitos ) << 1 << '|' << std::endl; std::cout << '|' << std::setw ( digitos ) << 1000 << '|' << std::endl; return 0; } Mas o anterior não serve para seu exemplo, você quer buscar o maior valor de cada coluna, e logo usar o setw antes de imprimir um valor que esta em uma linha e não em uma coluna, sendo assim montei esse exemplo: #include <iostream> // std::cout, std::endl #include <iomanip> // std::setw using namespace std; int main (){ const int coluna = 3; const int linha = 3; //Guarde os valores da coluna aqui desde mesma forma, si vai guardar uma matriz maior nao se esqueça de mudar os atributos de linha e coluna para que funcione perfeitamente os loops. int matriz [linha][coluna]= { {10,100, 100}, {1 , 1, 1}, {1 , 10,1000} }; int maior[coluna]={0}; //buscamos o maior valor de cada coluna: for ( int i = 0; i < coluna; i++ ){ for (int z = 0; z < linha; z++){ if ( matriz[z][i] > maior[i] ){ maior[i] = matriz[z][i]; } } } //mostra o maior valor de cada coluna:(Essa parte pode ser borrada sem problemas, é somente informativa.) cout << "O maior valor que tem em cada coluna." << endl; for ( int n: maior){ cout << n << ", "; } //Agora só usar o explicado antes para imprimir, mas nao será moleza. cout << "\n" << endl; for ( int i = 0; i < linha; i++ ) { int aux = maior[i]; // Guardamos o maior valor de cada coluna em uma variavel auxiliar para reutilizar o proprio vetor para albergar a quantidade de digitos que tem o maior numero que pertence a cada coluna, faremos isso uma vez por cada coluna para saber a quantidade de digitos que tem o maior numero de cada coluna. ;) maior[i] = 1; while ( ( aux / 10 ) > 0 ) { aux = aux / 10; maior[i]++; // Como vemos, agora maior[i] ja contem a quantidade de digitos que éo que precisamos saber para poder usar setw na hora de imprimir. } } //mostra a quantidade de cifras que vai ter cada coluna, essa parte pode ser borrada sem problemas, é somente informativa. cout << "Quantidade de cifras que tem o maior valor em cada coluna." << endl; int x = 0; for ( int n: maior){ cout << setw( maior[x] ) << n; x++; } //E agora tudo certo... Só falta imprimir =) cout << endl; for ( int i = 0; i<linha; i++ ){ for( int z = 0; z < coluna; z++ ){ cout << '|' << setw(maior[z]) << matriz[i][z]; } cout << '|' << endl; } cin.ignore(); return 0; }É só mudar a matriz, e só mudar os atributos de coluna e linha para uma matriz diferente. ;) Não tenho muito tempo Assim que perdoe si não posso explicar bem, mas deixei o código mais ou menos bem comentado. Veja mais info aqui: http://www.cplusplus.com/reference/iomanip/setw/
  7. vangodp

    Ponteiros

    você não inicializou as variáveis com seus valores corretos, elas contem resíduos. A negativos deverias atribuir um valor de 0, a maior também deverias atribuir um valor de zero, porem menor deveria se inicializada com o maior valor para assim ir decrementando até chegar no menor numero, nesse caso você tem 2 opções, ou você atribui a ela o maior valor permitido por um inteiro, ou você atribui a ela o maior valor na hora de ler com cin e um processo similar ao de descobrir qual o maior numero.
  8. vangodp

    Ponteiros

    Alocar: int *p = new int[tamanho]; sendo tamanho uma variável que você leu com cin anteriormente. Não se esqueça de adicionar delete[] p; antes de sair do programa para liberar a memoria. Pode usar isso igual que um vetor normal, ou seja, p[0]=1;. O resto acho que você sabe como fazer não? Comece o programa e diga as partes que você tem mais problema.
  9. vangodp

    Fila e Linked List

    #include <iostream> using namespace std; class nodo { public: nodo ( int v, nodo *sig = NULL ) { valor = v; siguinte = sig; } private: int valor; nodo *siguinte; friend class fila; }; typedef nodo *pnodo; class fila { public: fila() : primeiro ( NULL ), ultimo ( NULL ) {} ~fila(); void Adicionar ( int v ); int Ler(); private: pnodo primeiro, ultimo; }; fila::~fila() { while ( primeiro ) Ler(); } void fila::Adicionar ( int v ) { pnodo nuevo; /* Criar um nodo novo */ /* Este este sempre vai ser o ultimo nodo, nunca deve ter siguinte*/ nuevo = new nodo ( v ); /* Si a fila nao estava vazia, adicionamos o novo a continuação do ultimo */ if ( ultimo ) ultimo->siguinte = nuevo; /* Agora o último elemento da fila é o novo nodo */ ultimo = nuevo; /* Si primeiro é NULL, a fila estava vazia, agora o primeiro vai apontar ao novo nodo*/ if ( !primeiro ) primeiro = nuevo; } int fila::Ler() { pnodo nodo; /* variavel auxiliar para manipular o nodo */ int v; /* variavel auxiliar para o retorno */ /* Nodo aponta ao primeiro elemento da fila */ nodo = primeiro; if ( !nodo ) return 0; /* Si não ha nodos na fila retornamos 0 */ /* Atribuimos ao primeiro nodo a direcão do segundo nodo */ primeiro = nodo->siguinte; /* Guardamos o valor de retorno */ v = nodo->valor; /* Borrar o nodo */ delete nodo; /* Si a fila ficou vazia, ultimo deve ser NULL tambem*/ if ( !primeiro ) ultimo = NULL; return v; } int main() { fila fila; cout << "Adicionar(10)" << endl; cout << "Adicionar(20)" << endl; //adicionamos 2 inteiros fila.Adicionar ( 10 ); fila.Adicionar ( 20 ); //lemos 3 inteiros porem o terceiro vai ser zero pois nao ha mais nada que ler, somente tinha 2 elementos na fila. cout << "Ler: " << fila.Ler() << endl; cout << "Ler: " << fila.Ler() << endl; cout << "Ler: " << fila.Ler() << endl; // cin.get(); return 0; }Isso é um modelo funcional de uma fila, si você atribuir 2 valores inteiros a essa fila você pode fazer 2 leituras, as leituras são destrutivas, isso quer dizer que ao ler você esta extraindo o inteiro da fila. Faça um menu e estude o código para aprender.
  10. vangodp

    Pesquisa em vetor

    Não tem problema companheiro, sempre que eu estiver errado lhe convido que me corrija, sou uma pessoa que fazer coisas erradas é natural em mim, é levantar, tomar um café e começam a aparecer coisas erradas todo o dia >_<. Sorte! Por certo... Tu eres professor? =)
  11. vangodp

    Pesquisa em vetor

    pois sim... a coisa é que eu fiz algumas provas e ele funcionou correto. pff Já corrijo ele e subo novamente, obrigado por informar. =) #include <stdio.h> #define MAX 10 int main() { int i = 0, x, encontrado = 0, sair = 0; int v[10]={0}; while ( i < MAX ) { printf("v[%d]: ", i); scanf("%d%*c", &v[i]); x = 0; sair = 0; while ( x < i && sair != 1 ) { if ( v[x] == v[i] ){ printf( "Numero ja esta presente no vetor. " ); encontrado = 1; } x++; if ( encontrado == 1 ){ printf( "Entre novamente com v[%d]: ", i); scanf("%d%*c", &v[i]); encontrado = 0; x=0; //<---faltou isso!!! =D } } i++; } printf( "\n\n"); for( i=0; i < MAX; i++ ) printf("v[%d]=%d\n", i, v[i]); return 0; } Basicamente é por que esqueci de estabelecer o x a zero no final do loop interno antes de começar uma nova busca.
  12. vangodp

    Pesquisa em vetor

    #include <stdio.h> #define MAX 10 int main() { int i = 0, x, n, encontrado = 0, sair = 0; int v[10]; while ( i < MAX ) { printf("v[%d]: ", i); scanf("%d%*c", &n); x = 0; sair = 0; while ( x < i && sair != 1 ) { if ( v[x] == n ){ printf( "Numero ja esta presente no vetor. " ); encontrado = 1; }else { x++; } if ( encontrado == 1 ){ printf( "Entre novamente com v[%d]: ", i); scanf("%d%*c", &n); encontrado = 0; } } v[i] = n; i++; } printf( "\n\n"); for( i=0; i < MAX; i++ ) printf("v[%d]=%d\n", i, v[i]); return 0; }Estude o código até entender. Si tiver duvidas pergunte.
  13. Ficou bem legal. Da para fazer muita coisa interessante com esse tipo de menu. =) A API de windows é bem complexa de manipular mas é muito potente, eu costumo fazer jogos, porem não na winapi, utilizo algo mais portável como SFML. Essas são algumas das coisas que podemos fazer com SFML: https://www.youtube.com/watch?v=LrEvoKI07Ww Também uso miniwin para coisas mais levianas, simples eventos de mouse, teclado, pintar linhas, círculos, retângulos, texto simples.... Porem SFML é bestial para tudo, é a que mais gosto. Todos os programas do video traz os exemplos, podemos encontrá-los na descrição do video por si os interessa dar uma olhada. Deixo claro que não são meus esses programa, quem dera haha, esse tipo é um gênio e eu sou um mais do montão, simplesmente deixo constância dessa muito boa biblioteca multimídia SFML.
  14. Que parte? você pegou todo o código, porem citou struct Produto lista[N_PRODUTOS]; lista.codigo Uma Lista pois é isso... uma lista dahhh XD!! você não faz um array de inteiros? Pois você pode criar um array de estruturas, a diferença esta na forma de acessar os elementos, em um array de chars por exemplo, si o declaramos como char palabra[11]="Alo mundo!" podemos ir direto para a 5ª letra desta forma palavra[4], pois em um array de estruturas( struct Produto lista[N_PRODUTOS];) podemos fazer a mesma coisa, si queremos ir a 5ª estrutura de esse array(lista) fazemos lista[4] e depois acessamos o que tem dentro com '.' mais o nome do membro, exemplo lista[4].código, lembre-se que que o sistema é primeiro acesso a estrutura e logo ao membro com o operador de seleçao de membro '.' seguido do nome da variavel membro da estrutura, não se trata de uma só estrutura, si não de N_produtos (numero de produtos) que vale 100. Pense em uma lista como isso: 001 2.50 3.00 002 3.05 4.00 ... 099 0.70 1.00 100 0.70 1.00 Isso é uma lista. Quando eu quero ler a ultima linha a olho que eu faço? sigo com meu olho até a ultima linha, depois vejo o valor não é? Então! sigo com meu olho até a ultima linha lista[99]. Agora que já localizei a ultima linha leio seu conteúdo, por exemplo, valor de compra: lista[99].compra, lembra que lista[99].compra esta composto por 2 partes, lista[99] + .compra, acesso primeiro a estrutura e depois ao dado interno da estrutura, tudo junto fica lista[99].compra, porem são 2 ações conjuntas. não sei si essa é sua duvida pois é o que eu entendi. Si não for isso pergunte novamente e pegue o texto exato, comentando ao lado sua duvida naquelas linhas que achar conveniente. Si achar melhor, pode me adicionar no skype e te explico melhor. Sorte!
  15. flag é como quando tu lês números até que n != 0. Algo tipo: int n=-1, flag=0, contador=0, media=0, positivos=0; while ( n != flag ){ scanf("%d", n); if ( n%2==0){ par++; }else{ impar++; } if( n>0 ) positivos++; media+=n; contador++; } Com isso dai você tem quase tudo o necessário para calcular tudo o que se esta pedindo. a) A quantidade de números positivos e negativos; é o if else b) A média dos valores positivos; //utilizar regra do 3... tipo: si contador é 100%, positivos é X% c) O percentual de números pares lidos. //mesma coisa... si contador é 100%, par é X%? Pense em um flag como uma bandeira que se levanta(se ativa) quando acontece uma certa ação, em corridas de formula1por exemplo, o flag(Ou bandeira) se levanta quando um carro cruza a linha de chegada. No seu caso o flag se ativa quando n é igual a zero. Porem acho um pouco errôneo dizer que vamos usar flags com esse exemplo. Um exemplo muito interessante de uso para um flag é por exemplo, quando queremos que uma ação se leve a cabo uma só vez dentro de um bucle while, siga o exemplo: int flag = 0; int i = 0; while ( i < 10){ if ( flag == 0 ){ printf("Smente se imprime uma vez"); flag++; } printf( "\nIsso se vai imprimir 10 vezes" ); i++; }
  16. #include <stdio.h> int main (){ int grau; printf ("Digite o grau do polinomio: "); scanf ("%d", &grau); int GrauAntigo = grau; float coeficiente[grau]; int expoente[grau], ExpNovo[grau]; char sinal[grau]; while (grau > 0){ printf ("\nSINAL: "); scanf ("%[^\n]%*c", &sinal[grau]); printf ("COEFICIENTE: "); scanf ("%f%*c", &coeficiente[grau]); printf ("EXPOENTE: "); scanf ("%d%*c", &expoente[grau]); ExpNovo[grau] = coeficiente[grau] -1; grau--; } while (GrauAntigo > 0){ printf ("%s", sinal[GrauAntigo]); printf ("%f", coeficiente[GrauAntigo]); printf ("%d", expoente[GrauAntigo]); printf ("%d\n", ExpNovo[GrauAntigo]); GrauAntigo--; } system ("pause"); return 0; }
  17. vamos pensar um pouco com a cabeça, o que você esta tentando é um pouco LOL XD. Não posso ver sua função sinal pois não sei qual o valor de retorno, porem não faz falta, preste atenção no que te vou explicar. A função scanf espera sempre 1 ou mais parâmetros, sendo o primeiro sempre um const char* que serve para que scanf saiba como tem que tratar os seguintes parâmetros. Nos seguintes parâmetros scanf espera a direção de memoria onde ela tem que enviar os dados, eles serão tratados conforme indicamos no primeiro parâmetro. Até aí nada novo baixo al sol, porem o que nos interessa é o comportamento dessas 2 funções trabalhando juntas, não vou negar que possa ter alguma utilidade, porem é um pouco sem sentido o que você tenta fazer, agora vamos nos focar sobre seus comportamentos. Quero que você execute esse código a continuação: #include <stdio.h> char* foo(char *c){ printf("\nrecebi: %c\n\n", *c); return c; } int main() { char c = 'd'; printf("Escreva uma letra: "); scanf("%c", foo( &c ) ); printf("%c", c); getchar(); return 0; } Si você executou o código sem "erros" >_<, você vai ver algo como: Escreva uma letra:Recebi: d_Passamos a analisar o que aconteceu detalhadamente para entender o que acontece. Dentro da função main justo na linha 11 pedimos un texto, logo depois usamos scanf, scanf esta esperando un char conforme indicamos com nosso const char* "%c", ele espera a direção de memoria onde enviar o char que recebeu do stdin(entrada padrão), aqui nesse ponto não compreendo sua lógica, pois não sei si o que você esta esperando é enviar o que recebeu para a função para algum processo de validação ou sei lá o que você quer fazer dentro de sinal(), lembre-se de sempre adjuntar seu código pois não podemos adivinhar o que você quer por mais obvio que pareça. Continuando... Agora estamos no ponto critico, como falei não sei o que você espera fazer, porem eu te vou explicar o que realmente acontece, logo você saque suas conclusões. Si você pensava que podia enviar o que você recebeu para sinal() você está se enganando, isso não é possível, e agora eu vou lhe demostrar. Si você observar minuciosamente o resultado que obteve depois de executar meu código você pode se dar conta da ordem em que acontecem os sucessos. E a ordem de sucessos é essa: Declaro um char e inicializo ele com uma letra 'd' na linha 9; Na linha 11 o programa pede que se escreva uma letra: Na seguinte linha 12 chamamos scanf com a intenção de ler um char, e eu ainda esperava enviar esse char para a função foo, porem não se comportou como eu queria. Em vez de enviar o que eu recebi de scanf direto para a função foo(), o que foi enviado para essa função foi a letra inicial 'd' que lhe resignei a variável c, pois si você já percebeu, dentro da função aparece "recebi: d", antes de que possa ler, ou seja que a função foo() se executa antes de scanf, e por esse motivo é meio que inútil esse enunciado. Agora temos que se fazer a pergunta... Então onde vai parar a letra que eu entrei por teclado? Porque no final sim que sai corretamente imprimido no printf da linha 14, a resposta a essa pergunta é simples. A função scanf sobrescreve a variável retornada pela função foo()! Em outras palavra o que acontece é justo : foo( &c ); scanf("%c", &c ); Esse é o resultado que você obtêm de fazer : scanf("%c", foo( &c ) ); Pode que não seja o que você queria, de fato eu tentava enviar o que leiamos para a função mas não faz sentido, si faço como você fez scanf espera primeiro que aconteça tudo o que vai acontecer e aguarda que essa função retorne um ponteiro char*, prove modificar o tipo de retorno de char* a char a essa função foo() e você verá o programa falhar, já que ele espera a direção de memoria de uma variável e isso é justo o que faz char* foo();, retorna &c, por isso tudo isso funciona tal como te demostrei. Si tentar mudar char foo() a char* foo() é como si fizera: scanf("%c", c );...Quando o correto seria: scanf("%c", &c ); Sendo assim a função sempre deveria retornar um ponteiro ou se produziria um erro. Então isso que você quer fazer é impossível, ou ao menos desconheço um sistema de fazer isso corretamente. Te vou dar uma possível solução: #include <stdio.h> void scanfoo(const char *formato, char * p1 ){ //fazer chequeos necesarios //if ( *p1 == 'a' ){ scanf("%c", p1); //quando estiver seguro que o valor é o que queremos asignamos a nossa variavel. //else outracoisa } int main() { char c = 'd'; printf("Escreva uma letra: "); scanfoo("%c", &c ); printf("%c", c); getchar(); return 0; } Espero que tenha entendido. Si quiser deixar o código e explicar melhor o que você quer fazer talvez posso lhe ajudar. Sorte!
  18. vangodp

    loop infinito

    já respondi no outro post anterior, esse código não serve, você tem que usar vetor de estruturas. Veja lá si te serve.
  19. #include <stdio.h> #define N_PRODUTOS 100 struct Produto{ int codigo; float compra; float venda; }; int main() { struct Produto lista[N_PRODUTOS]; int r = 0; //numero de produtos registrados. Irá aumentando conforme o numero de produtos registrados. int sair = 0; int n = 0; //Pedimos produtos até que se escolha sair, nesse caso sair=1, e nao supere N_PRODUTOS. while ( !sair ) { printf("Entre com o código do produto ou 0 para sair: "); scanf("%d%*c", &n); switch (n) { case 0: sair = 1; break; default: if ( ( ( r >= 0 ) && ( r < N_PRODUTOS ) ) ) { //E somente se o código for positivo e nao superar a N_PRODUTOS printf ( "Click!!\n" ); lista[r].codigo = n; printf("Valor de compra?: "); scanf("%f%*c", &lista[r].compra); printf("Valor de venda?: "); scanf("%f%*c", &lista[r].venda); r++;//Cada produto registrado reg se incrementa. É o indice. } else if ( r == N_PRODUTOS ) { //si n for igual a N_PRODUTOS sai automaticamente, pois nao podemos registrar mais produtos. Si necesitas más produtos aumente o valor a N_PRODUTOS printf ( "Numero maximo de registros atingido!!!\n" ); sair = 1; } break; } } printf("\n"); int i; for ( i = 0; i < r ; i++ ) { printf ( "Produto cod: %d ", lista[i].codigo ); int cont_igual = 0, cont_prej = 0, cont_lucro = 0, contador = 0; if ( lista[i].compra == lista[i].venda ) { printf ( "igual ao de venda." ); cont_igual++; } else if ( lista[i].compra > lista[i].venda ) { printf ( "apresentou prejuizo." ); cont_prej++; } else if ( lista[i].compra < lista[i].venda ) { printf ( "apresentou lucro."); cont_lucro++; } else { printf ( "há' algo de errado!" ); contador++; } printf("\n"); } //falta calcular o porcentagem aqui. getchar(); return 0; } Acho que isso te vai servir, si tiver duvidas pergunte. Falta terminar a parte das porcentagens, isso você será capaz de fazer correto? Estude o código linha por linha, tente prever o que ele faz.
  20. no exercício cada carro tem uma serie de tempos relativos a cada volta, na foto 2. Vence o carro que tiver a soma de todas as voltas, e que essa soma der o numero menor, já que esse numero representa o tempos e gana o que fizer em menor tempo. Pois então... você não precisa armazenar todas as voltas, somente a soma. No seu exercício você esta criando 5 carros com 6 tempos, pois é melhor você criar 5 carros porem com 1 só valor cada que é a soma. Sendo assim o código que te passei substitui seu código por completo, ordenar e mostrar as 3 primeiras posições substitui os "60 if" que você se referiu.
  21. Ordene o vetor de carros e mostre as 3 primeiras posições =/. E para ler você não precisa de 6 tempos para cada carro, você só precisa de 1 tempo por cada carro. Tipo ir acumulando: float carro[5] = {0}, aux; int i, z; for ( i = 0; i < 5; i++ ){ for ( z = 0; z < 5; z++ ) { printf ( "Entre com o %dº tempo do carro numero%d", z + 1, i + 1 );//Entre com o 2º tempo do carro numero 1 scanf ( "%f%*c", &aux ); carro[i] += aux; //<-acumulador } }É bem mais facil que tudo isso:
  22. Para substituir palavras por outras é mais complicado, você tem que anotar a posição onde começa a palavra com tellg e tellp, para logo poder voltar atrás usando seekg e seekp, algo complexo. você se desenvolve com soltura com streams e arquivos, você tem bem claro o conceito de arquivos? A maioria dessas funções você tem que se desenvolver com soltura: http://www.cplusplus.com/reference/fstream/fstream/
  23. Nessas linhas de 20 a 22 os ponteiros você esta usando mal. Vou explicar algo sobre os ponteiros, coisa que você deve recordar para toda sua vida de programador. Para acessar a uma variável através de um ponteiro, normalmente fazemos *ptr = valor; Não? O problema é que quando tentamos acessar membros de uma estrutura nós acessamos através do operador de seleção'.' , exemplo estrutura.membro, mas quando trata-se de um ponteiro, ademas usamos o operador de desreferencia '*' de esta forma *ponteiro.membro, isso produz um erro, primeiro se acessa ao membro, que é um campo que ainda não existe, pois não o ponteiro não esta corretamente situado, o normal é que primeiro se aponte a estrutura correta e depois se acesse o devido campo ou variável membro, e não o contrario. Isso acontece porque o operador de seleção'.' tem prioridade sobre o operador de indireção'*'(indireção e desreferencia é a mesma coisa). Esse problema termina fechando ponteiro entre '(' e ')' ficando tal como (*ponteiro).membro. Isso obriga em primeiro lugar que aponte primeiro e logo depois se acesse ao membro como é devido. É aí que entra "operador de seleção de campos"( ou elementos) para estruturas referenciadas con ponteiros (->). O tal operador substitui o operador '*' e evita ter que fechar o ponteiro entre '(' e ')'. O que acontece é que trocamos (*ponteiro).membro por estructura->membro, que é exatamente o mesmo, porem mais fácil escrever. =D Tendo o anterior claro acho que já dá para arrumar as linhas: O erro reside em que por exemplo *p1->x1 é uma "quimera" entre ambos tipos de desreferenciar algo, ou você faz p1->x1 ou você faz (*p1).x1, misturar ambos da um "rebosteio". XD Em fim... Recorde que p->membro substitui por completo a (*p).membro, isso é o unico que você precisa recordar, e que si usa ->, não deve por o *. ;) Podemos fazer: Ou: porem nunca: Outro erro é que falta o retorno na dist calc_dist() Essa linha scanf ( "%d %d", % x1, &y1 ); esta totalmente errada pois não existe x1 si não p1.x1 por exemplo, e troque o % por & adiante de x1. Deveria ficar algo como scanf ( "%d %d", &p1.x1, &p1.y1 ); Em definitiva arrume tudo isso e tome nota sobre a explicação que lhe proporcionei, pois te vai servir para toda a vida ;). Fui!! Bola de fumaça ninja!!! Si perguntarem essa conversa nunca aconteceu. XD PD: pode que os nomes dos operadores não sejam o correto, eu programamo em espanhol e aqui os nome é tudo trocado, minha intenção é que você entenda o conceito espero que lhe sirva. Bay
  24. 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 );
×
×
  • Criar Novo...