
MATHEUSCDN
Membro Pleno-
Posts
28 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que MATHEUSCDN postou
-
Cooler pode pegar fogo?
MATHEUSCDN respondeu ao tópico de Josisvaldo em Refrigeração e superaquecimento
Muito improvável Recentemente comprei uma fan na shopee e não tive problemas -
Java Java envolvendo classes e vetores
MATHEUSCDN respondeu ao tópico de MATHEUSCDN em Java/Android SDK
É... to desde ontem tentando mas não consegui fazer -
Java Java envolvendo classes e vetores
MATHEUSCDN respondeu ao tópico de MATHEUSCDN em Java/Android SDK
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 -
Java Java envolvendo classes e vetores
MATHEUSCDN respondeu ao tópico de MATHEUSCDN em Java/Android SDK
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... -
Java Java envolvendo classes e vetores
MATHEUSCDN respondeu ao tópico de MATHEUSCDN em Java/Android SDK
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()); } } } -
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 ?
-
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
-
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 ?
-
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 !
-
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;
-
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...
-
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
-
-
Sim Se for aquele "programa completo" ele não rodou Então deve ser bug do site, porque eu coloquei o codigo inteiro
-
É 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; }
-
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.
-
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
-
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
-
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
-
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
-
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; }
-
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
-
@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
-
E mais uma dúvida, como eu posso fazer uma repetição em que a leitura pare apenas quando o usuario digitar " 000000000 " ?
-
@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