Ir para conteúdo
Fórum Script Brasil

Marcelo Utikawa da Fonseca

Membros
  • Total de itens

    297
  • Registro em

  • Última visita

Tudo que Marcelo Utikawa da Fonseca postou

  1. Quais as suas dúvidas nestes assuntos? Você sabe o que é um ponteiro? E o que é uma matriz? Para aprender nada melhor que tentar fazer! Assim você conhecerá suas dificuldades e teremos como tirar suas dúvidas. Sem saber as suas dúvidas fica difícil...
  2. Mas porque ele não aceita o pow? Qual a mensagem que aparece? Quanto ao clock: esta é uma implementação dependente de arquitetura e talvez sua versão do linux esteja apresentando este problema. Se você compilar para DOS/WINDOWS, o que acontece? E o retorno da função sem subtrair por nada nem dividir? É zero mesmo?
  3. Ao dividir o retorno de clock() por CLOCKS_PER_SEC você está convertendo o valor em segundos. Se você fizer: clock() / (CLOCKS_PER_SEC/1000) irá retornar o valor em milissegundos. E realmente se for uma operação muito rápida o retorno será sempre zero devido à sua precisão de segundos devido ao motivo dito acima. Para obter o tempo exato não divida por nada, use apenas o retorno de clock() diretamente.
  4. Para gerar a semente do srand o time(NULL) está ótimo, é assim mesmo que é usado normalmente. Para gerar um float aleatório dentro de uma determinada faixa faça o seguinte: float val = 20 + 50.0*((float)(rand())/RAND_MAX); Assim iremos gerar um número aleatório entre 20 e 70. Se começar por zero (como é o seu caso) simplesmente não some nada. A lógica é que, ao dividir o valor recebido de rand por RAND_MAX teremos um número entre 0 e 1. Multiplicando este resultado pelo valor máximo teremos um número entre zero e o próprio valor máximo. Temos que converter o retorno de rand para float pois caso contrário sempre teríamos zero como resultado devido ao seu tipo ser int.
  5. Parabéns... Você está tendo a oportunidade de garantir o seu futuro, fazendo uma faculdade que poucos podem e fica brincando desta forma? Eu sou formado em engenharia da computação e eu vi algumas pessoas que estudaram comigo levando o curso na brincadeira também como você. Felizmente a grande maioria destas pessoas não conseguiu se formar...
  6. Você chegou a tentar fazer algo? Tente desenvolver o exercício e vamos ajudando com suas dúvidas... Agora uma coisa está estranha: como assim o algoritmo encerra quando o salário for menor ou igual a zero? Tem alguma coisa errada neste texto!
  7. A variável que será o contador do for deve ser inicializada com a posição atual do primeiro for. Assim ele irá partir da posição atual e ir até a última!
  8. Foi um pouco confuso mas deu para entender... :) Uma das formas que você pode fazer é com dois for aninhados, ou seja, um dentro do outro. O primeiro irá percorrer cada posição do vetor e o segundo deverá percorrer o vetor a partir da posição atual e somando os valores menores que a atual. Tente fazer este código e coloque aqui para tirar suas dúvidas...
  9. Para chamar a função mult basta fornecer os parâmetros que ela exige assim como você chama a função printf. Porém esta função retorna um Fraction também então você não pode passar diretamente para o printf. Assim o retorno deve ser salvo em um Fraction e depois chamar o printf: res = mult(n1, n2); printf("Multiplicacao: %d\%d", res.numerador, res.denominador); Já quanto à sua função, você teria que fazer o cálculo, carregar o resultado em um Fraction e então retorná-lo. Na declaração de sua função os argumentos devem ser separados por vírgula e não ponto-vírgula: Fraction mult(Fraction a, Fraction b)
  10. Tudo bem que você não programa faz cinco anos... Mas o trabalho foi pedido há cinco anos atrás? Acredito que não... Assim você está tendo aulas de linguagem C, não é? E mesmo assim você não consegue nem mesmo declarar a função, mesmo que seja de forma errada??? Se você não demonstra a menor boa vontade de tentar fazer algo, porquê alguém precisa ter boa vontade para fazer algo? Falta de vontade de ajudar não falta. Mas como eu disse é vontade de ajudar, não de fazer tudo.
  11. Você já fez alguma coisa? Coloca o que você tem aqui que vamos ajudar com o maior prazer! :)
  12. Você pode apenas marcar o registro como excluído. Quando você for exibir os registros, os marcados como excluídos não serão exibidos, apesar de continuarem existindo. Esta é a forma mais simples... Coloque o código que altera e exclui um registro e também a definição do registro para que eu possa te ajudar melhor! :)
  13. Vamos lá: você quer saber se algum moderador nnão vai te ajudar. Mas e o que os membros dizem, não importa? Eu dei algumas dicas sobre o que você podia fazer para melhorar o código e falei como você tem que fazer o programa. Você nem falou nada sobre isso! Você fez as mudanças que eu falei? Coloque o código aí que vamos fazendo juntos! Fazer tudo para você também não dá, né?
  14. 1) Pode até funcionar mas está acessando além do vetor e os resultados são imprevisíveis. O correto seria o for de 0 a 4. 2) printf serve para enviar um texto para a tela, ignore o valor de retorno. 3) O preço somente é utilizado para calcular a média então não precisamos guardar o preço em uma variável, vamos calculando a soma diretamente e no final apenas dividimos pelo número de elementos para achar a média. 4) Não use acentos em nomes de variável. Eu sinceramente nem sabia que o alguns compiladores não geravam erro! Por padrão a linguagem C/C++ não permite isso. 5) main é do tipo int e portanto deve retornar um int! Adicione um return no final. 6) Para trabalhar com strings você deve criar um vetor do tipo char.Como você precisa de 5 strings, são vetores de duas dimensões. O código corrigido e que lê as strings segue abaixo: using namespace std; int main() { // Declaração e Inicialização de Variáveis char nome[5][50]; float preço, soma = 0; int i; // Entrada de Dados for (i = 0; i < 5; i++) { printf("Entre com o %i nome:" ,i); scanf("%s", nome[i]); printf("Entre com o %i preço:" ,i); scanf("%f",&preço); soma += preço; } // Exibição dos Nomes e Preço Médio for (i = 0; i < 5; i++) { printf("Nome %i: %s\n", i, nome[i]); } printf("\nA media dos precos e %.2f", soma/5); getch(); return 0; }
  15. É isso mesmo. O programa não lê dados do usuário, apenas do arquivo! Assim você precisa de gerar o arquivo primeiro.
  16. Eu pessoalmente não considero C e C++ complexa, apenas trabalhosa pois você tem que fazer tudo! E exige muita lógica. Porém é recompensante quando você consegue desenvolver um código mais complexo e você vê algo funcionando como eu que trabalho com programação de máquinas para automação industrial. Ver uma máquina funcionando através de um programa feito por você é sensacional! :) Acredite que aprendendo linguagem C e C++ você tira todo o restante de letra!
  17. Vamos analisar o que pode estar errado: se o arquivo não é gerado ou a gravação no arquivo está errada e nada é gravado (o que não parece) ou não entra dentro do if para gravar no arquivo (o que parece estar acontecendo). Para não entrar no if, ou o imc que está sendo calculado sempre está fora dos valores em que a pessoa é considerada obesa ou o fscanf sempre retorna EOF pois o arquivo de entrada está vazio ou com algum formato inválido, nem fazendo a checagem. Faça o seguinte: use este código no lugar do while atual: while(fscanf(x,"%s %d %.2f %.2f",n,&id,&p,&a)!=EOF) { imc=p/(a*a); printf("Paciente: '%s', %d anos, %.02f kg e %.02f m. Seu IMC é %.02f\n", n, id, p, a, imc); if((imc>=25)&&(imc<30)) { fprintf(y,"%s %d acima peso", n,id); } } Através deste printf você conseguirá ver se os dados estão sendo lidos corretamente do arquivo e calcular manualmente o IMC para saber se o cálculo está correto.
  18. É isso mesmo, como tudo na vida a dedicação sempre é recompensada... :) Quanto ao código: você considerou que se não for vogal é consoante. Mas e se for um número, espaço, acentuação? O correto é identificar se é consoante também. Além disso você colocou diretamente o número ASCII das vogais. desta forma fica difícil de entender! Eu faria da seguinte forma: let = toupper(frase[i]); // Passa para uppercase para testar apenas com maiúsculas if(let == 'A' || let == 'E' || let == 'I' || let == 'O' || let == 'U') { vogais++; } else if(let>='A' && let <= 'Z') { // Podia ser apenas maior que 'A' mas assim acho que fica melhor de entender! consoantes++; } else { outros++; // Inventei essa variável para se você quiser usar senão exclua este else! }
  19. Nossa! Eu nem tinha visto este i=i-1... :)
  20. Mas você não precisa contar o número de pacientes pois os dados estão vindo do arquivo, não é? Porque não funciona, o que acontece?
  21. O que eu faria inicialmente é o seguinte: ao invés de ter vários for eu faria tudo dentro do primeiro que lê os dados. Para salvar o maior bastaria inicializar a variável com zero e, cada vez que o usuário digitar um valor, verificar se ele é maior que o já salvo como maior. Assim você não precisa percorrer tudo no final. Siga a mesma lógica para todos. Outra coisa que você deve ter muito cuidado é ao realizar divisões. Note que você faz a divisão r=z/w sendo que o w é o número de mulheres correto? Se não existir nenhuma mulher w terá zero, não é? Nesta situação ocorrerá uma divisão por zero. Sempre que for usar uma variável em uma divisão faça o teste para saber se ela será zero. Outra coisa é que seu vetor possui dez posições e o for é de 0 a 9. Isso está correto porém você usa dentro do for o acesso ao item atual e também ao próximo com i+1. Quando você já está no último elemento do vetor você estará acessando um elemento após o final do vetor, ou seja, estará acessando uma área que não poderia. Quanto a estar travando: coloque alguns cout no meio do código para saber onde está travando. Assim você verá até que texto aparece e saberá onde está travando! Aparentemente está ok mas pode ser até algum problema com o estouro do vetor que eu citei acima...
  22. hehehe. gostei da coragem! Se quiser ajuda é só falar. Eu não disse mais pois acho que você quer tentar fazer e se eu desse a solução seria o mesmo que dizer: "O mocinho morre no final!" :)
  23. Alguns comentários: 1) Coloque o código entre as tags [ code ] e [ /code ] ! Fica muito mais fácil para ver... :) 2) Abra todos os arquivos de uma vez pois, caso algum falhe, você não precisa perder tempo executando algo que será descartado. 3) Sempre que a abertura de um arquivo falha e você encerra o programa, feche os arquivos que haviam sido abertos com sucesso. 4) Já que as gravações têm que ser feitas intercaladas, faça o mesmo com as leituras! Ou seja: leia o primeiro arquivo, grave no destino, leia o segundo, grave no destino, reinicie até que ambas origens retornem EOF. O programa ficará bem mais simples desta forma. :)
  24. O grande problema é com o while. Ele não possui limitadores e portanto apenas o código logo após é que é executado dentro dele porém deveria ser executado todo o código abaixo. O for também não deveria existir. O correto seria: while(fscanf(x,"%s %d %.2f %.2f",n,&id,&p,&a)!=EOF) { imc=p/(a*a); if((imc>=25)&&(imc<30)) { fprintf(y,"%s %d acima peso", n,id); } } Outro problema é com a abertura do arquivo "acima do peso.txt". Caso a sua abertura falhe o programa termina porém o outro arquivo está aberto! Assim o código deveria ser: y=fopen("acima do peso.txt","wt"); if(y==NULL) { fclose(x); printf("não e possivel abrir o arquivo"); system("pause"); return 1; }
  25. Não existe uma função para isto, tem que fazer na unha mesmo... Existe um macete que pode te ajudar: absolutamente tudo em um programa são dados numéricos, até mesmo os caracteres! Cada caracter possui um valor pré-definido em uma tabela. Ela é chamada de Tabela ASCII. Um detalhe importante nesta tabela é que as letras estão todas em ordem alfabética e agrupadas em sequência! Assim você pode fazer comparações como faria com um número. Inclusive até mesmo operações aritméticas você pode fazer com os caracteres. Por exemplo: printf("%c\n", 'A' + 3); A saída deste código será a letra 'D' pois o computador converteu o valor de 'A' em um número pela tabela ASCII, somou 3 e depois converteu para o caracter correspondente novamente. Assim você pode fazer uma comparação como a que está a seguir para saber se um determinado caracter é uma letra: if(ch >= 'A' && ch <= 'Z') Caso queira que eu explique melhor é só avisar! :)
×
×
  • Criar Novo...