Ir ao conteúdo
  • Cadastre-se

Lucas Pelepek

Membros Plenos
  • Total de itens

    56
  • Registro em

  • Última visita

  • Qualificações

    N/D

Tudo que Lucas Pelepek postou

  1. bom dia/tarde/noite. questão: 1. Faça um programa para corrigir provas de múltipla escolha. Cada prova tem oito questões, e cada questão vale um ponto, exceto as questões 3 e 8 que valem 2.0 pontos cada uma. O primeiro conjunto de dados a ser lido é o gabarito da prova. Os outros dados são os números dos alunos, e as respostas que deram às questões. Existem 10 alunos matriculados. Calcule e mostre o número e a nota de cada aluno. #include <stdio.h> int main(void) { int x,z,l; char y[7],w[7]; int b[7]; printf("GABARITO:\n"); for ( x = 1; x < 9; x++) { printf("questão:%d\n",x); setbuf(stdin,NULL); scanf("%c\n",&y[x]); } printf("numero de alunos:\n"); setbuf(stdin,NULL); scanf("%d\n",&z); for (x=1;x<=z;x++){ printf("aluno:%d\n",x); for ( x = 1; x < 9; x++) { printf("questão:%d\n",x); setbuf(stdin,NULL); scanf("%c\n",&w[x]); } //Segmentation fault for ( x = 1; x < 9; x++) { l= (strcmp (w[x],y[x])); if (l==1) { b[x]++; } } } for ( x = 1; x <= z; x++) { printf("aluno:%d\n",x); printf("nota:%d\n",b[x]); } } O programa tem vários erros, mas o que está me impedindo de continuar é esse segmentation fault, não faço ideia o do porque isso acontece, sou iniciante em C. se alguém tiver alguma dica, agradeço : ).
  2. Consegui terminar esse programa com um amigo, obrigado pela ajuda.
  3. já consegui arrumar usando sua dica e STR, obrigado.
  4. thx, mas o conversor de bin pra dec só aceita string, como faço dai? teria que modificar o código mais afundo?
  5. Eu não sei como juntar essas 3 variáveis (be,bc,aa), para que eu possa converter para decimal.
  6. 2# ali apenas conta as primeiras 24 questões ,mas agora que você falou eu percebi. 3# linha 105 '=' não esperado. adicionado 54 minutos depois bem, ignorando o código da linha 105. código até agora: o que devo fazer em 7.8 ? seria o rewrite? se sim não entendo como implementá-lo. //7.8 7.8 se prova = 1, atualizar os campos nota1 e nota2; se prova =2, atualizar os campos // nota3, nota4 e soma if prv = 1 then seek(arqi,reg.n1); write (arqi,reg); //teste reg.n1:=(nota1); end; close (arqi); update: fiz mais algumas coisas.
  7. @Simon Viegas tem que desenvolver um programa para identar XP. Código: opa,agora tá dando certo. nota maxima:80. //7.5: ce:=0; er:=0; for a:= 1 to 24 do if GabProvaAluno.gab[a]=gabc[a] then ce:=ce+4 //else //GabProvaAluno.gab[a]=null then //<======== //br:=br+1 else er:=er+1; mas sabe porque essa linha não quer funcionar.
  8. bem, ignorando aquele problema: Código: aconteceu algo bem errado no resultado.
  9. @Simon Viegas fiz o seguinte: Código: porém dá erro na linha 95 "erro sintático '=' não esperado!" //7.5: for a:= 1 to 24 do readln(GabProvaAluno.gab[a]); if GabProvaAluno.gab[a]=gabaritoOficial[a] then ce:=ce+4 else GabProvaAluno.gab[a]=null then //<====== aqui br:=br+1 else er:=er+1; end; não consigo achar o motivo.
  10. @Simon Viegas Program TxN04 ; uses CRT, modulos; type regGabProvaAluno = record insc:integer; //número de inscrição gab :string[50]; //gabarito da prova (do aluno) end; var GabProvaAluno :regGabProvaAluno; br,er,prv,media,mediam,mediap,notam,notap:integer; prvum,arqprova,prvdo:text; gab:array[1..50] of string; corr,numx:integer; regi:regis; regii:regis; respx:string[54]; resp :string[50]; arqi:file of regis; c,a,z,e,tot:integer; vet:vetor; BEGIN //1: Funciona assign(arqi,'cand.ind'); reset(arqi); while not (eof(arqi)) do read(arqi,regi); c:=c+1; vet[c].pf:=c-1; //c=indice do vetor; c-1=posicao fisica no arquivo str(regi.num:4,vet[c].c_chave); //2: //3: funciona repeat writeln ('qual prova será corrigida, 1 ou 2 ?'); readln (prv); until (prv=2) or (prv=1); //4: removido. //5: funciona if (prv=1) then assign(arqprova,'PROVA1.TXT') else if (prv=2) then assign(arqprova,'PROVA2.TXT'); reset(arqprova); writeln(' '); //6: como faço pra ele arrumar apenas o que foi digitado errado? no mais ele funciona. { writeln ('digite o gabarito,apenas: a,b,c,d,e'); for corr:= 1 to 10 do repeat z:=z+1; writeln (z,':'); readln (gab[corr]); until (gab[corr]='a') or (gab[corr]='b') or (gab[corr]='c') or (gab[corr]='d') or (gab[corr]='e'); } //7: while not(eof(arqprova)) do begin //7.1: readln(arqprova,respx); //ler a linha do arquivo //7.2: val(copy(respx,1,4),GabProvaAluno.insc,e); GabProvaAluno.gab:=copy(respx,5,50); writeln('inscricao: ',GabProvaAluno.insc,' ','gabarito: ',GabProvaAluno.gab); end; //7.3: { pebin1 (); } //7.4: { seek(read.pf); } //7.5: { for a:= a+x to x+24 do readln(gab[a]); repeat if gab[a]=resp[a+4] then else sf.(resp[a+4]=' ') then br:=br+1 else er:=er+1; } //7.6: { nota:=ce*4; x:=x+25; } //7.7: { notap= ? notam= ? } //7.8 { ??? sei que tem que atualizar n1,n2,n3,n4,mas como? } //7.9: { seek write(cand.ind) close (cand.ind) } //8: { media:=0; } END.
  11. ops, tinha colocado no modulos pra testar e esqueci de retirar . arrumei: Program TxN04 ; uses crt,modulos; type regiis = record resp:string[50]; end; var br,er,prv,media,mediam,mediap,notam,notap:integer; prvum,arqprova,prvdo:text; gab:array[1..50] of string; corr,numx:integer; regi:regis; regii:regis; respx:string[54]; resp :string[50]; arqi:file of regis; c,a,z,e,tot:integer; vet:vetor; Begin //1: Funciona assign(arqi,'cand.ind'); reset(arqi); repeat read(arqi,regi); c:=c+1; vet[c].pf:=c-1; //c=indice do vetor; c-1=posicao fisica no arquivo str(regi.num:4,vet[c].c_chave); until (eof(arqi)); //2: //3: funciona repeat writeln ('qual prova será corrigida, 1 ou 2 ?'); readln (prv); until (prv=2) or (prv=1); //4: funciona assign(arqi,'CAND.ind'); reset(arqi); //5: funciona if (prv=1) then assign(arqprova,'PROVA1.TXT') else if (prv=2) then assign(arqprova,'PROVA2.TXT'); reset(arqprova); writeln(' '); //6: como faço pra ele arrumar apenas o que foi digitado errado? no mais ele funciona. { writeln ('digite o gabarito,apenas: a,b,c,d,e'); for corr:= 1 to 10 do repeat z:=z+1; writeln (z,':'); readln (gab[corr]); until (gab[corr]='a') or (gab[corr]='b') or (gab[corr]='c') or (gab[corr]='d') or (gab[corr]='e'); } //7: while not(eof(arqprova)) do begin //7.1: readln(arqprova,respx); //ler a linha do arquivo end; //7.2: val(copy(respx,1,4),regi.num,e); regiis.resp:=copy(respx,5,50); //7.3: // pebin1 (); //7.4: //seek(read.pf); //7.5: {for a:= a+x to x+24 do readln (gab[a]); repeat if gab[a]=resp[a+4] then else sf.(resp[a+4]=' ') then br:=br+1 else er:=er+1; } //7.6: {nota:=ce*4; x:=x+25;} //7.7: {notap= ? notam= ?} //7.8 {??? sei que tem que atualizar n1,n2,n3,n4,mas como?} //7.9: {seek write(cand.ind) close (cand.ind)} //8: { media:=0;} End. agora se der:
  12. @Simon Viegas Bem,não sei o que fiz mas funcionou. Program TxN04 ; uses crt,modulos; var br,er,prv,media,mediam,mediap,notam,notap:integer; prvum,arqprova,prvdo:text; gab:array[1..50] of string; corr,numx:integer; regi:regis; regii:regis; respx:string[54]; resp :string[50]; arqi:file of regis; c,a,z,e,tot:integer; vet:vetor; Begin //1: Funciona assign(arqi,'cand.ind'); reset(arqi); repeat read(arqi,regi); c:=c+1; vet[c].pf:=c-1; //c=indice do vetor; c-1=posicao fisica no arquivo str(regi.num:4,vet[c].c_chave); until (eof(arqi)); //2: //3: funciona repeat writeln ('qual prova será corrigida, 1 ou 2 ?'); readln (prv); until (prv=2) or (prv=1); //4: funciona assign(arqi,'CAND.ind'); reset(arqi); //5: funciona if (prv=1) then assign(arqprova,'PROVA1.TXT') else if (prv=2) then assign(arqprova,'PROVA2.TXT'); reset(arqprova); writeln(' '); //6: como faço pra ele arrumar apenas o que foi digitado errado? no mais ele funciona. { writeln ('digite o gabarito,apenas: a,b,c,d,e'); for corr:= 1 to 10 do repeat z:=z+1; writeln (z,':'); readln (gab[corr]); until (gab[corr]='a') or (gab[corr]='b') or (gab[corr]='c') or (gab[corr]='d') or (gab[corr]='e'); } //7: while not(eof(arqprova)) do begin //7.1: readln(arqprova,respx); //ler a linha do arquivo end; //7.2: val(copy(respx,1,4),regi.num,e); regi.resp:=copy(respx,5,50); //7.3: pebin1 (); //7.4: seek(read.pf); //7.5: {for a:= a+x to x+24 do readln (gab[a]); repeat if gab[a]=resp[a+4] then else sf.(resp[a+4]=' ') then br:=br+1 else er:=er+1; } //7.6: {nota:=ce*4; x:=x+25;} //7.7: {notap= ? notam= ?} //7.8 {??? sei que tem que atualizar n1,n2,n3,n4,mas como?} //7.9: {seek write(cand.ind) close (cand.ind)} //8: { media:=0;} End. não sei para o que essas etapas: 7.3 fazer pesquisa binária no vetor criado em 1 para descobrir a PF do num de inscr. Ver em MODULOS, quais informações de entrada e qual informação de saída da função que faz a pesquisa binária. 7.4 posicionar no CAND.IND (seek-para posicionar) e ler o registo (READ) não deveriam vir depois?
  13. sim,eu fiz assim: //7.2: val(copy(respx,1,4),regi.num,e); regi.resp:=copy(respx,5,50); //<- erro mas ele diz que 'resp' não faz parte do Regi, como faz para adicionalo sem mudar o Modulos?. ... o que é pra ser esse "codigo" ?
  14. aqui: regi.num:=copy(respx,1,4); // <---------- regi.resp:=copy(respx,5,50);
  15. @Simon Viegas bem...fiz isso: //7.2: regi.num:=copy(respx,1,4); // erro: atribuição com tipos de dados incompativeis para a variavel 'NUM'! regi.resp:=copy(respx,5,50); como está no T02,mas dá aquele erro. sorry, não compreendo .
  16. thanks, hahaha. tava usando o identador do pascalzim, mas pelo jeito ele edenta errado,farei certo nas próximas . bem, agora tá funcionado certinho. a próxima etapa era: 7.2 retirar o número de inscrição,que são os 4 primeiros números. bem, como faço pra ele contar apenas do 4 em diante? seria o mesmo processo do T02? jogar tudo em registro,nesse caso devo criar um novo,certo? ou aquele mesmo que já existe serve?. esses 4 números serão usados mais pra frente.
  17. fiz como me disse e alterei: //5: funciona if (prv=1) then x:=prvum; assign (prvum,'PROVA1.TXT'); reset (prvum) ; if (prv=2) then x:=prvdo; assign (prvdo,'PROVA2.TXT'); reset (prvdo); para: //5: funciona if (prv=1) then assign (arqprova,'PROVA1.TXT'); reset (arqprova) ; writeln(' '); if (prv=2) then assign (arqprova,'PROVA2.TXT'); reset (arqprova); writeln(' '); agora funciona,mas quando ele imprime na tela esse teste: //7: while not(eof(x)) do begin //7.1: for z:=1 to 54 do readln(x,respx[z]); writeln(respx[z]); // só pra testar end; sai o seguinte resultado: " 0 0 0 0 0 0 0 0 0 0 1 1 1 1 " o que aconteceu aqui?
  18. @Simon Viegas Program TxN04 ; uses crt,modulos; var br,er,prv,media,mediam,mediap,notam,notap:integer; prvum,x,prvdo:text; gab:array[1..50] of string; corr,numx:integer; regi:regis; regii:regis; respx:string[54]; resp:array[1..54] of string; arqi:file of regis; c,a,z,e,tot:integer; vet:vetor; Begin //1: Funciona assign(arqi,'cand.ind'); reset(arqi); repeat read(arqi,regi); c:=c+1; vet[c].pf:=c-1; //c=indice do vetor; c-1=posicao fisica no arquivo str(regi.num:4,vet[c].c_chave); until (eof(arqi)); //2: //3: funciona repeat writeln ('qual prova será corrigida, 1 ou 2 ?'); readln (prv); until (prv=2) or (prv=1); //4: funciona assign(arqi,'CAND.ind'); reset(arqi); //5: funciona if (prv=1) then x:=prvum; assign (prvum,'PROVA1.TXT'); reset (prvum) ; if (prv=2) then x:=prvdo; assign (prvdo,'PROVA2.TXT'); reset (prvdo); //6: como faço pra ele arrumar apenas o que foi digitado errado? no mais ele funciona. { writeln ('digite o gabarito,apenas: a,b,c,d,e'); for corr:= 1 to 10 do repeat z:=z+1; writeln (z,':'); readln (gab[corr]); until (gab[corr]='a') or (gab[corr]='b') or (gab[corr]='c') or (gab[corr]='d') or (gab[corr]='e'); } //7: while not(eof(x)) do begin //7.1: for z:=1 to 54 do readln(x,respx[z]); writeln(respx[z]); //só pra testar end; //7.2: //7.3: { pebin1 ();} //7.4: {seek(read.pf);} //7.5: {for a:= a+x to x+24 do readln (gab[a]); repeat if gab[a]=resp[a+4] then else sf.(resp[a+4]=' ') then br:=br+1 else er:=er+1; } //7.6: {nota:=ce*4; x:=x+25;} //7.7: {notap= ? notam= ?} //7.8 {??? sei que tem que atualizar n1,n2,n3,n4,mas como?} //7.9: {seek write(cand.ind) close (cand.ind)} //8: {mediap:=notap/portugues ; mediam:=notam/matematicas; } End. bem,acabei fazendo isso para tentar arrumar,seguindo um fórum daqui mesmo. //7: while not(eof(x)) do begin //7.1: for z:=1 to 54 do readln(x,respx[z]); writeln(respx[z]); // só pra testar end; rodando o programa ele dá o erro quando chega no EOF "arquivo fechado no comando EOF". opa,não tinha visto sua ultima edição no post passado. tem que ser pra registro mesmo então.
  19. bem,se seguir a logica do 2 eu teria que criar um indexado das provas? ou não é necessário? não pede isso no pdf. ou ele guarda em alguma memoria sem precisar fazer um novo indexado?
  20. Mudei o seguinte: val respx:string[54]; //7.1: read(x,respx); //7.2: copy(respx,1,4),regi.num; regi.resp:=copy(respx,5,50); segui a lógica do N02, mas dá: erro sintático na linha 80. ',' não esperado. o que não estou entendendo aqui? obs: esse N02 foi dado pelo professor.
  21. haha, valeu pela ajuda e paciência. Para que serve cada um: Cand.ind : versão indexada de cand.txt. exercicio3: foi o que você me passou,contem a parte que serve pro TxN04. ledir.pas : lê o cand.ind,serve para ver os resultados de txN04. TxN02: corrige cand.ind caso algo de errado. outros: são auto explicativos. Programas ate agora.rar
  22. hummm,não entendi muito bem,como você usou arq2 e reg2 presumo que tenha falado do ledir.pas ,mas o ledir não é pra ser alterado. bem, a primeira parte do Program TxN04 funciona,a maior duvida é do "7" pra frente. no 7.1 , tentei usar o x para qual prova deveria ser, mas ele fala que quer dados primitivos. no 7.8 eu não tenho a minima ideia,na verdade ,conhece algum bom tutorial de registros e coisas parecidas,estou bem perdido nesse assunto como pode perceber.
  23. Thanks, não precisa ser hoje .
  24. Ainda não consegui,mais alguém ai no fórum?
  25. (trabalho da faculdade,tudo compilado usando pascalzim) boa dia/tarde/noite alguém poderia me dar uma luz em relação a este trabalho? Program TxN04 ; uses crt,modulos; var br,er,prv,media,mediam,mediap,notam,notap:integer; prvum,x,prvdo:text; gab:array[1..50] of string; corr:integer; regi:regis; resp:array[1..54] of string; arqi:file of regis; c,a,tot:integer; vet:vetor; Begin {Você receberá dois arquivos PROVA1.TXT = contém as respostas dos candidatos da primeira prova PROVA2.TXT = contém as respostas dos candidatos da segunda prova Ambos com as informações assim dispostas: 01-04=inscrição; 05-54=as 50 respostas (A,B,C,D,E, ou ESPAÇO (SEM RESPOSTA) OU * (MARCOU MAIS DE UMA OPÇÃO).} {1:Antes de tudo, criar o vetor, a partir de CAND.IND, contendo o número de inscrição no campo chave e a posição física ocupada pelo registro dentro do arquivo... (já foi feito este procedimento no exercício 3). PORQUE???} assign(arqi,'cand.ind'); reset(arqi); repeat read(arqi,regi); c:=c+1; vet[c].pf:=c-1; //c=indice do vetor; c-1=posicao fisica no arquivo str(regi.num:4,vet[c].c_chave); until (eof(arqi)); {2:Se você abriu o arquivo PROVA1.TXT ou PROVA2.TXT, verá que ambos estão em ordem de número de inscrição, que não é a ordem em que os registros de CAND.IND estão gravados. Como será necessário acessar o registro do candidato a partir do número de inscrição que está nos arquivos de provas. Então usaremos o vetor para a partir do número de inscrição contido nas respostas, descobrir qual a PF desta inscrição em CAND.IND, pois teremos que mostrar o nome do candidato no relatório e teremos que atualizar os campos nota1 e nota2, quando da correção da primeira prova e os campos nota3, nota4 e soma quando da correção da segunda prova.} {3:Perguntar qual prova será corrigida 1 ou 2??? (VALIDAR, o programa deve corrigir uma prova por vez).} repeat writeln ('qual prova será corrigida, 1 ou 2 ?'); readln (prv); until (prv=2) or (prv=1); {4:Abrir o arquivo CAND.IND (RESET permite leitura e gravação)} assign(arqi,'CAND.ind'); reset(arqi); {5:Se a opção for 1 para correção, abrir PROVA1.TXT; se a opção for 2, abrir PROVA2.TXT.} if (prv=1) then x:=prvum; assign (prvum,'PROVA1.TXT'); reset (prvum) ; if (prv=2) then x:=prvdo; assign (prvdo,'PROVA2.TXT'); reset (prvdo); {6. Ler o gabarito DO TECLADO, VALIDANDO (só pode ser A, B, C, D ou E) string[50] } writeln ('digite o gabarito'); repeat for corr:= 1 to 10 do readln (gab[corr]); until (gab[corr]='a') or (gab[corr]='b') or (gab[corr]='c') or (gab[corr]='d') or (gab[corr]='e'); writeln ('lol'); {7: Enquanto não fim do arquivo de prova } while not(eof(x)) do begin {7.1: ler as respostas string[54]} read(x,regi); //fala que quer dados primitivos!! {7.2:retirar o número de inscrição } resp:=[5..54]; ///???? {7.3: fazer pesquisa binária no vetor criado em 1 para descobrir a PF do num de inscr. Ver em MODULOS, quais informações de entrada e qual informação de saída da função que faz a pesquisa binária. } pebin1 (); {7.4: posicionar no CAND.IND (seek-para posicionar) e ler o registo (READ) } seek(read.pf); {7.5: corrigir a prova} for a:= a+x to x+24 do readln (gab[a]); repeat if gab[a]=res[a+4] then ??? else sf.(resp[a+4]=' ') then br:=br+1 else er:=er+1; {7.6:calcular a nota} nota:=ce*4; x:=x+25; {7.7:somar a nota para cálculo da média} notap= ? notam= ? {7.8: se prova = 1, atualizar os campos nota1 e nota2; se prova =2, atualizar os campos nota3, nota4 e soma,no cand.ind} //??? sei que tem que atualizar n1,n2,n3,n4,mas como? {7.9: posicionar no CAND.IND (seek-para reposicionar) e gravar o registro (WRITE)} seek write(cand.ind) close (cand.ind) {8:mostrar as médias por disciplina...} mediap:=notap/portugues ; mediam:=notam/matematicas; } end; End. Ele requere (cand.ind,provas,Unit modulos); o que está obviamente errado é o que eu não consigo desenvolver. se alguém puder dar umas dicas. a saída desse arquivo é pra sair igual a primeira foto do pdf (usando o ledir). não sei se é permitido postar programas grandes como esse no fórum. obrigado desde já. programas necessarios.rar

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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...

Eletrônica

PROMOÇÃO DE QUARENTENA

Aproveite o isolamento social para aprender eletrônica!
De R$ 39,90 por apenas R$ 19,90
Só até as 23h59min desta sexta-feira 10/04/2020

CLIQUE AQUI E COMPRE AGORA MESMO!