Lucas Pelepek
-
Posts
56 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Lucas Pelepek
-
-
Consegui terminar esse programa com um amigo, obrigado pela ajuda.
-
já consegui arrumar usando sua dica e STR, obrigado.
- 2
-
thx, mas o conversor de bin pra dec só aceita string, como faço dai?
teria que modificar o código mais afundo?- 1
-
Eu não sei como juntar essas 3 variáveis (be,bc,aa), para que eu possa converter para decimal.
Spoilerprogram somadorbinario; uses crt; VAR a,b,c,saida,er,era, d,e, f,h, g,i,j, x,t, z, w,y,u,r:Integer; aa,ab,ba,bb,bc,bd,mo,be:integer; resu,ve:array [1..3] of integer; procedure BinToDec(nux:string); var tam, digito, i, expoente: integer; dec: real; begin expoente:= 0; dec:= 0; tam:= length(nux); For i:= tam downto 1 do begin case nux[i] of '1' : digito:=1 ; '0' : digito:=0 ; end; dec:= dec+digito*(exp(expoente*ln(2))); expoente:= expoente +1; end; end; function portand (a, b:Integer):Integer ; Begin begin IF (a=1) and (b=1) then x:=1 Else x:=0; End; portand:=(x); End; Function portor (a, b:Integer):Integer; Begin //Readln (A, b); IF (a=1) or (b=1) then X:=1 Else X:=0; portor:=(x); End; Function notebook (z:Integer):Integer ; Begin IF z=1 then Z:=0 Else Z:=1; notebook:=(z); End; Function portxor (a, b:Integer):Integer ; Begin W:=notebook (a); Y:=notebook (b); U:=Portand (w,b); R:=Portand (a,y); t:=Portor (u, r); portxor:=(t); End; Function meiosomador (er, era:Integer):integer; Begin D:=Portxor (er, era); C:=Portand (er, era); saida:=c; writeln ('resultado do meio somador: saida> ',c,' soma> ',d); Meiosomador:= (c); End; Function Somadorfull (a, b,i,j:Integer):Integer; Begin //meio somador aa:= Portxor (a,b); //luz ab:= Portand (a,b); // somador pleno ba:= Portxor (i,j); bb:= Portand (i,j); bc:= Portxor (ba,ab); //luz bd:= Portand (ab,ba); be:= portor (bd,bb); //luz writeln (be,bc,aa); {resu[1]:= (be); resu[2]:= (bc); resu[3]:= (aa); for mo:= 1 to 3 do //ve:= resu[mo]*3; writeln (resu[mo]);} Somadorfull:= (aa); End; begin a:=1; b:=1; // i:=1; j:=1; Somadorfull (a,b,i,j); end.
- 1
-
2#
ali apenas conta as primeiras 24 questões ,mas agora que você falou eu percebi.
3#
SpoilerProgram TxN04 ; uses CRT, modulos; const gabaritoOficial = 'AAAAAAAAAAADACCCCCCEAAAAACCCCCAAAAADDDDDEADDDDEDDE'; 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,nota,mediap:integer; prvum,arqprova,prvdo:text; gabc:string[50]; corr,numx:integer; regi:regis; regii:regis; respx:string[54]; resp :string[50]; arqi:file of regis; nota1,nota2, totalu,ce,c,a,z,e,tot,x:integer; vet:vetor; notap,notam:real; BEGIN //1: Funciona assign(arqi,'cand.ind'); reset(arqi); while not (eof(arqi)) do begin 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); end; //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: gabc:=gabaritoOficial; 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); //end; //7.3: //pebin1 (regi.num,respx,c,c_chave); //7.4: { seek(read.pf); } //7.5: //portugues begin totalu:=0; 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; nota1:=ce; end; //matematica begin ce:=0; er:=0; for a:= 25 to 50 do if GabProvaAluno.gab[a]=gabc[a] then ce:=ce+4 //else //GabProvaAluno.gab[a]=null then //br:=br+1 else er:=er+1; nota2:=ce; end; // writeln ( GabProvaAluno.insc,' nota: ',nota,' erros: ',er); end; //7.7: totalu:=totalu+1; notap:=nota1/totalu; notam:=nota2/totalu; writeln('matematica: ',notam,' portugues: ',notap); //7.8 7.8 se prova = 1, atualizar os campos nota1 e nota2; se prova =2, atualizar os campos // nota3, nota4 e soma //7.9: { seek write(cand.ind) close (cand.ind) } //8: { media:=0; } END.
linha 105
'=' não esperado.adicionado 54 minutos depoisbem, ignorando o código da linha 105.
código até agora:
SpoilerProgram TxN04 ; uses CRT, modulos; const gabaritoOficial = 'AAAAAAAAAAADACCCCCCEAAAAACCCCCAAAAADDDDDEADDDDEDDE'; 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,nota,mediap:integer; prvum,arqprova,prvdo:text; gabc:string[50]; corr,numx:integer; regi:regis; regii:regis; respx:string[54]; resp :string[50]; arqi:file of regis; nota1,nota2, totalu,ce,c,a,z,e,tot,x:integer; vet:vetor; notap,notam:real; BEGIN //1: Funciona assign(arqi,'cand.ind'); reset(arqi); while not (eof(arqi)) do begin 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); end; //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: gabc:=gabaritoOficial; 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); //end; //7.3: //pebin1 (regi.num,respx,c,c_chave); //7.4: { seek(read.pf); } //7.5: //portugues begin totalu:=0; 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; nota1:=ce; end; //matematica begin ce:=0; er:=0; for a:= 25 to 50 do if GabProvaAluno.gab[a]=gabc[a] then ce:=ce+4 //else //GabProvaAluno.gab[a]=null then //br:=br+1 else er:=er+1; nota2:=ce; end; // writeln ( GabProvaAluno.insc,' nota: ',nota,' erros: ',er); end; //7.7: totalu:=totalu+1; notap:=nota1/totalu; notam:=nota2/totalu; //writeln('matematica: ',notam,' portugues: ',notap); //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 write (arqui, } //?? //7.9: { seek write(cand.ind) close (cand.ind) } //8: { media:=0; } END.
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.
SpoilerProgram T16N04 ; uses CRT, modulos; const gabaritoOficial = 'AAAAAAAAAAADACCCCCCEAAAAACCCCCAAAAADDDDDEADDDDEDDE'; type regGabProvaAluno = record insc:integer; //número de inscrição gab :string[50]; //gabarito da prova (do aluno) end; var reg:regis; GabProvaAluno :regGabProvaAluno; br,er,prv,media,mediam,nota,mediap:integer; prvum,arqprova,prvdo:text; gabc:string[50]; corr,numx:integer; regi:regis; regii:regis; respx:string[54]; resp :string[50]; arqi:file of regis; nota1,nota2,ab, totalu,ce,c,a,z,e,tot,x:integer; vet:vetor; pagina,notap,notam:real; BEGIN //1: Funciona assign(arqi,'cand.ind'); reset(arqi); while not (eof(arqi)) do begin 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); end; //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: gabc:=gabaritoOficial; 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); //end; //7.3: //pebin1 (regi.num,respx,c,c_chave); //7.4: { seek(read.pf); } //7.5: //portugues begin totalu:=0; ce:=0; er:=0; br:=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; nota1:=ce; end; //matematica begin ce:=0; er:=0; for a:= 25 to 50 do if GabProvaAluno.gab[a]=gabc[a] then ce:=ce+4 //else //GabProvaAluno.gab[a]=null then //br:=br+1 else er:=er+1; nota2:=ce; end; // writeln ( GabProvaAluno.insc,' nota: ',nota,' erros: ',er); //7.7: {totalu:=totalu+1; notap:=nota1/totalu; notam:=nota2/totalu;} //writeln('matematica: ',notam,' portugues: ',notap); //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 //teste write (arqi,reg); seek(arqi,reg.n1); reg.n1:=(nota1); end; close (arqi); //7.9: //pagina:=totalu mod 40 = 0; writeln (' relatorio correção - ordem inscricao pagina'); writeln (' num nome portugues matematica '); writeln (' ce er br not ce er br not'); writeln (GabProvaAluno.insc,' ',ce,er,br,nota1,'',ce,er,br,nota2); //8: totalu:=totalu+1; notap:=nota1/totalu; notam:=nota2/totalu; writeln('matematica: ',notam,' portugues: ',notap); END.
-
@Simon Viegas tem que desenvolver um programa para identar XP.
Código:
SpoilerProgram TxN04 ; uses CRT, modulos; const gabaritoOficial = 'AAAAAAAAAAADACCCCCCEAAAAACCCCCAAAAADDDDDEADDDDEDDE'; 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,nota,mediap,notam,notap:integer; prvum,arqprova,prvdo:text; gabc:string[50]; corr,numx:integer; regi:regis; regii:regis; respx:string[54]; resp :string[50]; arqi:file of regis; ce,c,a,z,e,tot,x:integer; vet:vetor; BEGIN //1: Funciona assign(arqi,'cand.ind'); reset(arqi); while not (eof(arqi)) do begin 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); end; //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: gabc:=gabaritoOficial; 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); //end; //7.3: //pebin1 (regi.num,respx,c,c_chave); //7.4: { seek(read.pf); } //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; //7.6: nota:=ce; writeln ( GabProvaAluno.insc,' nota: ',nota,' erros: ',er); end; //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.
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.
-
bem, ignorando aquele problema:
Código:
SpoilerProgram TxN04 ; uses CRT, modulos; const gabaritoOficial = 'AAAAAAAAAAADACCCCCCEAAAAACCCCCAAAAADDDDDEADDDDEDDE'; 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,nota,mediap,notam,notap:integer; prvum,arqprova,prvdo:text; gabc:string[50]; corr,numx:integer; regi:regis; regii:regis; respx:string[54]; resp :string[50]; arqi:file of regis; ce,c,a,z,e,tot:integer; vet:vetor; BEGIN //1: Funciona assign(arqi,'cand.ind'); reset(arqi); while not (eof(arqi)) do begin 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); end; //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: gabc:=gabaritoOficial; 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); //end; //7.3: //pebin1 (regi.num,respx,c,c_chave); //7.4: { seek(read.pf); } //7.5: for a:= 1 to 24 do if GabProvaAluno.gab[a]=gabaritoOficial[a] then ce:=ce+4 // else // GabProvaAluno.gab[a]=null then // br:=br+1 else er:=er+1; //7.6: nota:=ce*4; writeln ( GabProvaAluno.insc,' acertos: ',nota,' erros: ',er); end; //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.
aconteceu algo bem errado no resultado. -
@Simon Viegas fiz o seguinte:
Código:SpoilerProgram TxN04 ; uses CRT, modulos; const gabaritoOficial = 'AAAAAAAAAAADACCCCCCEAAAAACCCCCAAAAADDDDDEADDDDEDDE'; 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; ce,er,br,c,a,z,e,tot:integer; vet:vetor; BEGIN //1: Funciona assign(arqi,'cand.ind'); reset(arqi); while not (eof(arqi)) do begin 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); end; //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); end; //7.3: //pebin1 (regi.num,respx,c,c_chave); //7.4: { seek(read.pf); } //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 br:=br+1 else er:=er+1; end; //7.6: { nota:=ce*4; writeln ( GabProvaAluno.insc,' ',nota); //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.
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.
-
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.
- 1
-
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:
8 horas atrás, Lucas Pelepek disse: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? -
@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? -
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?....
9 minutos atrás, Simon Viegas disse:val(copy(respx,1,4),regi.num,codigo);
o que é pra ser esse "codigo" ?
-
4 minutos atrás, Lucas Pelepek disse:
// erro: atribuição com tipos de dados incompativeis para a variavel 'NUM'!
aqui:
regi.num:=copy(respx,1,4); // <----------regi.resp:=copy(respx,5,50);
-
@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 . -
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.- 1
-
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?- 1
-
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.- 1
-
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?- 1
-
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. -
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.- 1
-
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. -
Thanks, não precisa ser hoje .
-
Ainda não consegui,mais alguém ai no fórum?
-
(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á.- 1
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
segmentation fault, não acho o problema!
em C/C#/C++
Postado
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.
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 : ).