Ir ao conteúdo

MATHEUSCDN

Membro Pleno
  • Posts

    28
  • Cadastrado em

  • Última visita

Tudo que MATHEUSCDN postou

  1. Muito improvável Recentemente comprei uma fan na shopee e não tive problemas
  2. É... to desde ontem tentando mas não consegui fazer
  3. Essa 3 to me embolando dms... Ngm da minha sala conseguiu dar uma luz para ajudar a faze-la Aaah entendi ! Fiz o que você falou e deu esse erro
  4. Problema é que fica falando que eu não declarei esse método, mas nas outras partes tem o .getMedia e mesmo assim não da erro @AdrianoSiqueira Fiz a 3 assim public static void main (String arg[]) throws java.io.IOException { BufferedReader obj = new BufferedReader (new InputStreamReader(System.in)); int nota1; int nota2; int nota3; String aux; float media; int i; int contador = 0; for(i = 0; i < 3; i++) { contador++; // recebe a 1º nota System.out.println("Aluno " + contador + ", digite sua 1ª nota"); aux = obj.readLine(); nota1 = Integer.valueOf(aux).intValue(); // recebe a 2º nota System.out.println("Aluno " + contador + ", digite sua 2ª nota"); aux = obj.readLine(); nota2 = Integer.valueOf(aux).intValue(); // recebe a 3º nota System.out.println("Aluno " + contador + ", digite sua 3ª nota"); aux = obj.readLine(); nota3 = Integer.valueOf(aux).intValue(); // calcula a média media = (nota1 + nota2 + nota3) / 3; System.out.println("A média do aluno " + contador + " é " + media); } } O programa todo Classe aluno : public class Aluno { private int matricula; private String nome; private float nota1; private float nota2; private float nota3; private float media; public Aluno(int matricula, String nome, float nota1, float nota2, float nota3) { this.matricula = matricula; this.nome = nome; this.nota1 = nota1; this.nota2 = nota2; this.nota3 = nota3; this.media = 0.0F; } public int getMatricula() { return matricula; } public void setMatricula(int matricula) { this.matricula = matricula; } public float getMedia() { return media; } public void setMedia(float media) { this.media = media; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public float getNota1() { return nota1; } public void setNota1(float nota1) { this.nota1 = nota1; } public float getNota2() { return nota2; } public void setNota2(float nota2) { this.nota2 = nota2; } public float getNota3() { return nota3; } public void setNota3(float nota3) { this.nota3 = nota3; } } Classe disciplina : import java.io.*; public class Disciplina { private Aluno[] alunos; private int contador; private int capacidade; public Disciplina(int capacidade) { this.alunos = new Aluno[capacidade]; this.contador = 0; this.capacidade = capacidade; } public void adicionaAluno(Aluno aluno) { if (contador < capacidade) { alunos[contador] = aluno; contador += 1; } } public static void main (String arg[]) throws java.io.IOException { BufferedReader obj = new BufferedReader (new InputStreamReader(System.in)); int nota1; int nota2; int nota3; String aux; float media; int i; int j; int cont = 0; for(i = 0; i < 3; i++) { cont++; // recebe a 1º nota System.out.println("Aluno " + cont + ", digite sua 1ª nota"); aux = obj.readLine(); nota1 = Integer.valueOf(aux).intValue(); // recebe a 2º nota System.out.println("Aluno " + cont + ", digite sua 2ª nota"); aux = obj.readLine(); nota2 = Integer.valueOf(aux).intValue(); // recebe a 3º nota System.out.println("Aluno " + cont + ", digite sua 3ª nota"); aux = obj.readLine(); nota3 = Integer.valueOf(aux).intValue(); // calcula a média media = (nota1 + nota2 + nota3) / 3; System.out.println("A média do aluno " + cont + " é " + media); } } public int achaMelhor() { if (contador <= 0) { System.out.println("[ E ]: Não há alunos nessa disciplina."); return -1; } Aluno melhor = alunos[0]; for (int i = 0; i < contador; i++) { if (alunos[i].getMedia() > melhor.getMedia()) { melhor = alunos[i]; } } return melhor.getMatricula(); } public int mostraAprovados() { for (int i = 0; i < contador; i++) { if (alunos[i].getMedia() > 7.0) { System.out.println("Aluno aprovado com média : "+getMedia()); } else { System.out.println("Aluno reprovado com média: "+getMedia()); } } } public Aluno[] getAlunos() { return alunos; } public int getContador() { return contador; } } Mas segundo o compilador, tem um erro o qual não sei como resolver...
  5. Teria alguma demonstração de como posso fazer isso ? Fiz isso aqui , está certo ? public int mostraAprovados() { for (int i = 0; i < contador; i++) { if (alunos[i].getMedia() > 7.0) { System.out.println("Aluno aprovado com média : "+getMedia()); } else { System.out.println("Aluno reprovado com média: "+getMedia()); } } }
  6. Preciso de uma ajuda no meu tópico 3 e 4, não sei como fazer 1,2 e 5 já estão feitos 1) public class Aluno { private int matricula; private String nome; private float nota1,nota2 , nota3 , media; public Aluno (int matricula, String nome,float nota1,float nota2, float nota3, float media) { this.matricula=matricula; this.nome=nome; this.nota1=nota1; this.nota2=nota2; this.nota3=nota3; this.media=media; } public int getMatricula() { return matricula; } public String getNome() { return nome; } public float getNota1() { return nota1; } public float getNota2() { return nota2; } public float getNota3() { return nota3; } public float getMedia() { media = (nota1 + nota2 + nota3) / 3; return media; } public void setMatricula(int matricula) { this.matricula=matricula; } public void setNome(String nome) { this.nome=nome; } public void setNota1(float nota1) { this.nota1=nota1; } public void setNota2(float nota2) { this.nota2=nota2; } public void setNota3(float nota3) { this.nota3=nota3; } public void setMedia(float media) { this.media=media; } } 2) public class Disciplina { Aluno vet[]; int contador; public Disciplina (int qtdAlunos )//2 { vet = new Aluno[qtdAlunos]; contador=0; } public void adicionaAluno(Aluno obj)//2 { if (contador < vet.length) { vet[contador] = obj; contador++; } } 5) public int achaMelhor()//5 { int i; int maiorMatricula=0; float maiorMedia=0; for (i=0; i < contador; i++) { if (maiorMedia < vet[i].getMedia()) { maiorMedia = vet[i].getMedia(); maiorMatricula = vet[i].getMatricula(); } } return maiorMatricula; } Os que estão feitos estão corretos ?
  7. E essa vírgula depois do '0' ? Porque ela está ali e o que acontece depois dela ? Quer que eu escreva um programa aleatório ou escreva esse que estou falando aqui ? Não entendi . Porque se for ele eu já coloquei ele completo ali em cima
  8. Não, não foi isso que aconteceu. O que eu te expliquei e vou repetir agora é que SEMPRE tem esses 3 arquivos abertos: stdin, stdout e stderr. SEMPRE. Não é que não tinha um arquivo de entrada. O programa que eu escrevi para te mostrar sempre lê do arquivo entrada. Se vier um argumento ao iniciar o programa ele deve ser o nome do tal arquivo, e será usado no fopen() Se não vier nada então o programa faz entrada = stdin e continua. Sem fopen. Porque? Porque como eu já disse umas vezes stdin já está aberto. Leia os exemplos. E tire aquele include a mais. E mude a extensão para C. Entendi ! Eu só tenho mais uma dúvida a qual eu não tinha prestado atenção antes char isbn_dv(char isbn[9]) { int s1 = 0; int s2 = 0; int i, digito; for (i = 0; i < 9; i++) s1 += isbn[i] - '0', s2 += s1; digito = 11 - ((s1+s2) % 11); if (digito == 11) return '0'; if (digito == 10) return 'X'; return '0' + digito; } O que acontece nessa parte do for ? Onde tem s1+= isbn[i] - '0', s2+=s1 ? Ele faz a soma parcial entre s1 e s2 e subtrai por 0 ?
  9. Foi exatamennte isso que aconteceu, como não tinha um arquivo de entrada ele leu as informações que digitei Entendeu errado. A condição: while ( (p != NULL) && (strcmp(linha,final) != 0) ) Se o valor de p não for nulo então leu algo. E aí, e somente aí, faz a segunda parte e vê se o que leu não é o final. E isso é o AND, && E se der verdadeiro então calcula o DV e lê o próximo ISBN. Como eu expliquei no parágrafo acima, se não ler nada fgets() não muda nada em linha e por isso não deve usar linha nos testes. E se não ler nada não pode comparar porque vai ter o mesmo valor de antes, o ISBN anterior. Ninguém garante que tem um "000000000" na entrada, afinal. Entendi, obrigado por ter tirado minhas dúvidas !
  10. Consegui rodar !!!!!!!!! Muito obrigado pela sua paciência , o problema estava nas bibliotecas, eu estava utilizando apenas stdio.h e string.h , quando usei stdlib.h o codigo rodou ! o código definitivo é esse #include <stdio.h> #include <stdlib.h> #include <string.h> char isbn_dv(char isbn[9]) { int s1 = 0; int s2 = 0; int i, digito; for (i = 0; i < 9; i++) s1 += isbn[i] - '0', s2 += s1; digito = 11 - ((s1+s2) % 11); if (digito == 11) return '0'; if (digito == 10) return 'X'; return '0' + digito; } // a funcao int main(int argc, char** argv) { char arquivo[30] = {0}; char linha[80]; FILE* entrada = stdin; if (argc > 1) // veio algo entao e o nome do arquivo { strcpy(arquivo, argv[1]); printf("Arquivo de entrada: \"%s\"\n", arquivo); entrada = fopen(arquivo, "r"); if (entrada == NULL) return -1; printf("Aberto \"%s\"\n", arquivo); }; char final[] = "000000000"; linha[9] = 0; // tem que ser uma string afinal char* p = fgets(linha, sizeof linha, entrada); while ( (p != NULL) && (strcmp(linha,final) != 0) ) { linha[9] = 0; printf("%s-%c\n", p, isbn_dv(&linha[0])); p = fgets(linha, sizeof linha, entrada); linha[9] = 0; } fclose(entrada); return 0; } Mas tem algumas coisas que eu queria entender... int main(int argc, char** argv) { char arquivo[30] = {0}; char linha[80]; FILE* entrada = stdin; if (argc > 1) // veio algo entao e o nome do arquivo { strcpy(arquivo, argv[1]); printf("Arquivo de entrada: \"%s\"\n", arquivo); entrada = fopen(arquivo, "r"); if (entrada == NULL) return -1; printf("Aberto \"%s\"\n", arquivo); }; O que está acontecendo nessa parte do código ? Qual a função de argc e argv ? E a função desse FILE ? Tem muita coisa ai que eu nunca vi e por mais que o código tenha rodado eu queria entender como essa parte funciona E nesta parte aqui você transformou P em um ponteiro e mediu o tamanho de linha ? A parte da comparação eu entendi que se o valor de P for nulo e a comparação entre linha e final for diferente de 0 ele entra na condição char* p = fgets(linha, sizeof linha, entrada); while ( (p != NULL) && (strcmp(linha,final) != 0) ) { linha[9] = 0; printf("%s-%c\n", p, isbn_dv(&linha[0])); p = fgets(linha, sizeof linha, entrada); linha[9] = 0; } fclose(entrada); return 0;
  11. Por enquanto estou tentando rodar seu código e no vscode mostrou isso Vou baixar um IDE de apenas C e tentar rodar Deu o mesmo problema...
  12. O que rodei foi esse que usei pro meu código, pelo visto você de referiu ao código completo e este não rodei
  13. @Hokster1 Ta complicado... Minha dificuldade está sendo em fazer esse loop de repetição
  14. Sim Se for aquele "programa completo" ele não rodou Então deve ser bug do site, porque eu coloquei o codigo inteiro
  15. É o livro de deitel Eu meio que entendo sua solução mas não sei como atribuir ela ao meu programa, você poderia usar meu código e adaptar a sua solução nele ? Assim acho q eu entenderia um pouco melhor todos os erros . #include <stdio.h> char isbn_dv(char isbn[9]) { int s1 = 0; int s2 = 0; for (int i = 0; i < 9; i++) s1 += isbn[i] - '0', s2 += s1; int digito = 11 - ((s1+s2) % 11); if (digito == 11) return '0'; if (digito == 10) return 'X'; return '0' + digito; } int main(void){ char isbn[9]; scanf("%9s", isbn); printf("%s-%c", isbn, isbn_dv(isbn)); return 0; }
  16. Tenho É que eu não estou entendendo, você fala apenas pra eu usar da forma que você mostrou e falou que está errado o local do scanf, mas eu não sei onde devo colocar então. estou achando é que vou desistir desse código pois já está me dando dor de cabeça, tem dois dias que procuro uma forma de corrigi-lo e não acho, Se eu usar dessa forma que foi mostrada o professor me pergunta como eu sei disso, como eu fiz isso e eu não vou saber explicar porque eu não entendo. Muito obrigado por toda a sua ajuda e por ter dedicado o seu tempo ! Mas eu infelizmente não estou conseguindo entender.
  17. No cmd tem essa função que você digita isso e ele ler tudo que está no arquivo txt e leva para o programa Aqui o programa completo
  18. Porque eu só queria fazer a repetição da forma que estou tentando, usando o while, como mostrei acima. No seu método pelo o que entendi ele já abre o arquivo automaticamente e eu não quero isso pois não é o que o professor pede, pede apenas que abra na hora de executar usando um atividade.exe < isbn.txt. Qualquer coisa que é fora disso eu não posso usar. Apenas quero uma solução para esse meu problema envolvendo o while
  19. Troquei pra testar se ia dar certa mas não deu. E usei o do while em vez de apenas while porque queria que ele rodasse a primeira linha sem consultar e depois consultava as linhas restantes
  20. Já rodei. Então é so colocar a estrutura de repetição no int main ? Mas nesse exemplo ele abre o arquivo e verifica ate a última linha, correto ? Não posso fazer dessa forma pois não foi assim que o professor exigiu e eu nem cheguei a ver isso em aula ainda . A única e exclusiva coisa que eu preciso fazer é o programa para de rodar quando o usuario digitar 000000000, não importando se tiver mais números depois. A única coisa que foi dita é que tenho que fazer de uma forma, mas não foi dita como. Se eu tenho que colocar fora da função , então como eu poderia executar essa repetição até o usuario digitar 000000000 ? É isso que não estou entendendo ! Agora fiz o codigo dessa forma mas fica dizendo que o inicializador de string para array de char é muito longo #include <stdio.h> #include <string.h> char isbn_dv(char isbn[9]) { scanf("%9s", isbn); int s1 = 0; int s2 = 0; for (int i = 0; i < 9; i++) s1 += isbn[i] - '0', s2 += s1; int digito = 11 - ((s1+s2) % 11); if (digito == 11) return '0'; if (digito == 10) return 'X'; return '0' + digito; } int main(void) { char isbn[9]; char rep[9] = {"000000000"}; int comp; comp = strcmp(rep,isbn); while (comp !=0){ printf("%s-%c", isbn, isbn_dv(isbn)); } return 0; } Ele só rodou quando eu coloquei 8 zeros em rep, mas ae ele entrou em um loop infinito
  21. Entendi Eu fiz uma modificação e adaptei com um dos exemplos que você me mostrou, agora está dessa forma #include <stdio.h> char isbn_dv(char isbn[9]) { int s1 = 0; int s2 = 0; for (int i = 0; i < 9; i++) s1 += isbn[i] - '0', s2 += s1; int digito = 11 - ((s1+s2) % 11); if (digito == 11) return '0'; if (digito == 10) return 'X'; return '0' + digito; } int main(void){ char isbn[9]; scanf("%9s", isbn); printf("%s-%c", isbn, isbn_dv(isbn)); return 0; } Estou sempre buscando aprender coisas novas e vi muitas coisas interessantes as quais você me mostrou, porém como eu disse tem muita coisa que eu ainda não entendo pois meu ensino é bem básico. utilizei isso que você falou mas não deu certo , poderia me explicar o porque ? #include <stdio.h> #include <string.h> char isbn_dv(char isbn[9]) { scanf("%9s", isbn); int s1 = 0; int s2 = 0; int rep; rep = strcmp ("000000000",isbn); do { for (int i = 0; i < 9; i++) s1 += isbn[i] - '0', s2 += s1; int digito = 11 - ((s1+s2) % 11); if (digito == 11) return '0'; if (digito == 10) return 'X'; return '0' + digito; } while (rep != 0); } int main(void){ char isbn[9]; printf("%s-%c", isbn, isbn_dv(isbn)); return 0; }
  22. Não coloquei a segunda página aqui mas ele colocou isso como exemplo : Eu não escolho isso , o proprio professor pede para executar o arquivo no cmd assim : atividade.exe < isbn.txt Ainda estou iniciando em C, tem muita informação ae que não consigo compreender e por enquanto não estamos sendo ensinados a fazer versões que são mais rápidas e sim versões que executem o que o professor pede Mas obrigado pela ajuda, vou dar uma estudada e achar alguma forma de criar essa repetição
  23. @arfneto Eu troquei o nome de atividade.c para atividade.cpp e não aparece mais esse erro @arfneto E em vez de if eu poderia usar um while para fazer essa repetição ? Tipo : while (isbn != 000000000){ do ... } Esse exemplo que dei não funcionou não sei o porque, eu queria fazer algo tipo esse exemplo mas ele só ler a primeira linha do arquivo.txt e encerra
  24. E mais uma dúvida, como eu posso fazer uma repetição em que a leitura pare apenas quando o usuario digitar " 000000000 " ?
  25. @Midori Aaaah sim ! Muito obrigado. @arfneto Agora entendi, ficou tudo muito mais claro ! Obrigado Eu fui rodar o código e mostrou isso aqui : Antes tinha rodado e feito tudo direitinho mas depois que salvei e abri ele de novo deu esse problema

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...