Ir ao conteúdo

Simon Viegas

Membro VIP
  • Posts

    3.940
  • Cadastrado em

Tudo que Simon Viegas postou

  1. Olá. Como é sabido, o Fórum passou por manutenção... mas espero que ainda dê tempo. Mesmo que já tenha feito, qualquer coisa podemos revisar o que você já fez... Abaixo vou me basear com o código da postagem, vamos lá... Para preencher, você precisa percorrer posição por posição... a maneiras mais simples é usando um laço de repetição dentro do outro... E para "armazenar" um valor na posição, é como uma variável comum, mas como é um array precisa passar a(s) coordenada(s) que deseja armazenar. No código abaixo já demonstro o "laço de repetição" e a "atribuição". Mesma coisa, basta saber a posição, que no caso é a "fileira" e "poltrona" respectivamente e saber o que vai ser escrito, no caso um "O". *** Alguns pontos iniciais: 1) Por enquanto não mexa com GotoXY();, esse recurso de embelezamento/funcionalidade pode ser aplicado depois!!! O que importa no momento é a estrutura interna, não a interação com o usuário. 2) Como é uma estrutura "padrão", já criei o laço dentro do laço (os for) para demonstrar. Obs.: Não precisa dos begin/end pois só temos "um comendo", mas pode deixar assim... na "revisão", se ainda não precisar, remove. 3) Falta ver qual a utilidade do "número do passageiro", eu particularmente não entendi para que está servindo... 4) Daí aos poucos vá ajustando as "regras" e "mensagens" que o enunciado exige... Abaixo um código para servir de base. Program Aviao; uses CRT; var mat_poltrona :array [1..6,1..8] of char; IndF, IndP :byte; num_passageiro, num_fileira, {num_polt :word;} //tem algum motivo especial para ser word? [Simon.Viegas] num_polt :byte; begin ClrScr; {writeln(mat_poltrona[IndF,IndP], 'L');} //Para "escrever" numa mastriz, o processo é análogo de uma variável comum, o que diferencia é que precisa passar as coordenadas. Vide abaixo: [Simon.Viegas] //MARCA TODAS AS POLTRONAS COMO LIVRES [Simon.Viegas] for IndF:=1 to 6 do //para todas as fileiras [Simon.Viegas] begin for IndP:=1 to 8 do //para todas as poltronas (no caso, de cada fileira) [Simon.Viegas] begin mat_poltrona[IndF,IndP]:='L'; //marca como "Livre" [Simon.Viegas] end; end; //CADASTRO DE PASSAGEIROS num_passageiro:=-1; //valor qualquer diferente de 0 apenas para entrar no while [Simon.Viegas] while (num_passageiro <> 0) do begin write ('Digite o numero do Passageiro:'); readln(num_passageiro); write ('Digite o numero da Fileira :'); readln(IndF); write ('Digite o numero da Poltrona :'); readln(IndP); mat_poltrona[IndF,IndP]:='0'; //marca a poltrona como "Ocupada". [Simon.Viegas] end; writeln; writeln; writeln('FIM DO PROGRAMA'); writeln('Pressione qualquer tecla para continuar'); ReadKey; end.
  2. Por favor, poste o seu código e onde está com dúvidas. No aguardo.
  3. Olá. Por favor, poste o seu código e onde está com dúvidas... No aguardo.
  4. Olá. Qual a sua dúvida?
  5. Olá. Eu comentei sobre isto no item 3 da minha postagem anterior. *** Eu comentei sobre isto no item 5 da minha postagem anterior. Essa parte está certa. Sobre não efetuar os cálculos, está relacionado com o item 3... (a condição do if que está errada) *** No aguardo.
  6. Se quiser postar para revisarmos fica a vontade... caso já esteve pronto, avisa que fechamos o tópico... Sobre apostilas/canais, no momento eu estou sem referências... mas aqui no próprio fórum tem um tópico interessante: Tópicos importantes da seção, na parte de cima, em tópicos em destaques. Sobre a identação, você já meio que já faz certo... só se atentar que deve está SEMPRE identado e mais ou menos no mesmo padrão... Vale também dar uma lida em outros tópicos... serve para revisar, aprender coisas novas... e, claro, tentar ajudar os outros quando possível... No aguardo.
  7. Falta ajustar o 2 bimestre: //Insira as notas do Segundo Bimestre // for i:=1 to 3 do Aproveitando, abaixo um sugestão para organização: for i:=1 to 3 do begin ClrScr; write ('Digite a nota do Segundo Bim de Matemática para ',alunos[i],': '); readln(mat [2,i]); write ('Digite a nota do Segundo Bim de Português para ',alunos[i],': '); readln(port[2,i]); write ('Digite a nota do Segundo Bim de histórias para ',alunos[i],': '); readln(hist[2,i]); write ('Digite a nota do Segundo Bim de Geografia para ',alunos[i],': '); readln(geo [2,i]); write ('Digite a nota do Segundo Bim de Ciências para ',alunos[i],': '); readln(cie [2,i]); end; *** Faltou identar lá nos if finais.. for i:=1 to 3 do // Este é o Quadro da média begin ClrScr; gotoxy(5, 5); //média de Matemática if ((mat[1,i]) + (mat[2,i])) / 2 >= 6 then writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,' portanto ele foi APROVADO!') else writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,', portanto ele foi REPROVADO!'); *** Sobre usar o TextColor() eu já comentei anteriormente... *** O if, assim como o else (assim como o For, While etc) só se associa a um comando, caso precise associar a mais de um, precisa usar o begin/end. Aqui aproveito mais uma vez para comentar sobre a importância da identação (estou me baseando pelo que está no fórum) - A forma como está, veja acima. - Identando, ficaria assim: if ((mat[1,i]) + (mat[2,i])) / 2 >= 6 then writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,' portanto ele foi ') //o if termina aqui!!! TextColor(green) writeln('APROVADO!') else //esse else não está vinculado a nada... writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,', portanto ele foi REPROVADO!'); Perceba que só o writeln está dentro do if e como está utilizando else, vai dar erro, pois else tem que vir logo após a estrutura do if, e não de um comando "solto"... como está identado, só olhando para o código dá para ver que está errado... (no mostrado na citação acima não dá, tem que analisar linha por linha ou, como eu faço, idento primeiro) Em relação a "estrutura" (não corrigir nem testei o código, apenas deixei compilável) if ((mat[1,i]) + (mat[2,i])) / 2 >= 6 then begin writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,' portanto ele foi '); TextColor(green); writeln('APROVADO!'); end //fim do if else writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,', portanto ele foi REPROVADO!'); Agora o if em vez ter apenas UM comando, passou a ter UM bloco... o restante é já sabido.. *** No aguardo.
  8. Olá Como citado: Você precisa pesquisar e analisar quais são essas vantagens e desvantagens, e optar pela opção que considera mais viável. Por exemplo, uma vantagem do txt é que é editável externamente, uma desvantagem é importação de dados, ou seja, se for necessário coletar os dados do arquivo (como no seu caso), como seria feita? No seu código, você exportou com outros dados, ex.: Nome : Joao Santos SilvaEmail : [email protected] 1: 71 2345678Telefone 2: 71 2345678 Como eu vou coletar o nome do usuário já que tem um "Nome : " antes? se fosse "necessário" ficar nesse formato de texto, poderia utilizar o comando Copy() para ajudar... Então, analise se vai usar um txt (text), ou arquivo binário (file of). *** Sim, usando o 'C:\Users\Admin\Desktop\doc.txt' você está usando o caminho absoluto...mas é possível também usar um caminho relativo, ex.: assign(arquivo,'agenda.txt'); Basicamente vai criar na pasta onde foi criada o executável do programa. obs.: pode mudar de compilador para compilador. *** Independente do tipo de arquivo, você precisará gerenciar a criação, abertura e fechamento do arquivo. Um exemplo inicial: Você só precisa criar o arquivo uma vez, da segunda vez em diante, poderia ficar algo como: begin,,assign(arquivo,'doc.txt');//rewrite(arquivo);Append(arquivo);... PS: dá para automatizar esse processo, mas isso pode ficar pra depois... No aguardo.
  9. Só vendo o código como estava. Se possível, posta o código como você tentou, que ai avaliamos e aprendemos com o contexto (experiência). *** Você precisaria imprimir a parte em branco, depois imprimir a parte em verde, depois voltar para o branco novamente (cor padrão). Obs.: Esse comentário a seguir é apenas um reflexão.. se não entender, abstraia... o que importa é que precisa separar o texto por partes... Nesse caso, a procedure writeln NÃO aceita o uso do TextColor() dentro dele (eu acho que não)... podem-se entender isso como uma "limitação" ou "não implementação de funcionalidade". Se for o caso mesmo de não funcionar, imagino que deve ser porque o TextColor() seja PROCEDURE e não uma FUNCTION, ou seja, procedure e function são basicamente a mesma coisa, mas as function retornam sempre algo nela mesma (as procedure não retornam), e como o TextColor() não retorna, o writeln não deve aceitar... (claro que o retorno da function deve ser compatível com o writeln também, como um texto ou um número). *** De boa.. é apenas um alerta.... Qualquer coisa posta aqui que temos analisar e dá um feedback. *** No aguardo.
  10. Olá. Só um comentário inicial: Então, não necessariamente precisa de um db (database) para efetuar as pesquisas. Os bancos de dados podem servir basicamente para criar uma "persistência de dados", ou seja, "salvar os registros" e possibilitar ser carregados posteriormente. Na, suposta, fase atual de programação, podem-se utilizar a variáveis comuns mesmo (uso da memória ram)... O uso de db seria algo mais avançado, começar a pensar mais pra frente. *** Para pesquisar, a primeira coisa que precisa é ter os dados, correto?... no caso, você armazenou em vetores. Logo, já fica implícito que você precisa fazer as pesquisa no vetor... Trecho do código: se (numero) = 1 entao escreva ("Digite um nome para procura: ") Leia (nomep) se nomep = nome[i] entao escreval ("Sim, essa pessoa está cadastrada") fimsefimse Veja que você está somente comparando com nome, ou seja, uma única posição... e "pior": qual o valor de i nesse momento? RESUMINDO Você precisa fazer uma comparação para cada posição dos armazenados... (usar um for) *** Aqui mesma coisa... você precisa acessar cada posição do vetor... Trecho do código: se (numero) = 2 então somai <- (salario[i])+(soma) MI <- (somai)/3escreva ("Media idade é de",Mi)fimse Você está acessando a posição i, e por sinal, qual o valor de i nesse momento? ou seja, é preciso controlar antes o valor da variável que vai acessar o vetor... RESUMINDO Você precisa somar cada posição dos armazenados... (dá para usar um for também). *** Essa estrutura de "maior" e "menor" idade é bem comum... por favor, dê uma pesquisada no Fórum ou no "Google"... se ainda precisar de ajuda, é só perguntar... *** No aguardo
  11. Olá O cálculo da "média da última prova" está errado.. precisa revisar. O processo para cálculo do da média de cada aluno é análogo a "média da última prova". A diferença está apenas de onde vem os valores. Para questão 2, você precisa da 3a nota de cada aluno, já a média do aluno, você precisa de cada nota do mesmo aluno. Minhas sugestões: -Dê uma pesquisada sobre a fórmula para calcular a média e corrija o código para a questão 2. -Tente fazer o cálculo para calcular a média de apenas um aluno, e só depois de conseguir, tente fazer para calcular a média dos todos os alunos. No aguardo.
  12. Olá. Podemos ajudar... tem pelo menos duas formas: utilizando arquivos de texto, que seria um TXT. Ou utilizando arquivos binários. Cada um tem suas vantagens e desvantagens... Primeiramente você precisa deixar o seu código basicamente pronto utilizando a memória ram (no modo convencional, sem arquivos)... a depois converte o código para utilizar arquivos... Por favor, poste o seu código atual e onde tem dúvidas para deixar em funcional... após tentamos passar utilizar arquivos. No aguardo.
  13. Olá. E por quê não? Como já sugeri, não existe correlação entre comandos/estruturas... o mude a cor no momento que quiser mudar, e imprima na hora que você quiser... Lembra-se que você deve manter o seu código SEMPRE BEM IDENTADO!!!: ex.: for i:=1 to 3 do begin ClrScr; if ((mat[1,i]) + (mat[2,i])) / 2 >= 6 then writeln('A média de matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,' portanto ele foi APROVADO!!!') else writeln('A média de matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,', portanto ele foi REPROVADO!!!'); writeln; if ((port[1,i]) + (port[2,i])) / 2 >= 6 then writeln('A média de português do ', alunos[i] ,' foi ', ((port[1,i] + port[2,i]) / 2):0:2 ,', portanto ele foi APROVADO!!!') else writeln('A média de português do ', alunos[i] ,' foi ', ((port[1,i] + port[2,i]) / 2):0:2 ,', portanto ele foi REPROVADO!!!'); readln; end; Compare com o sue código... No aguardo.
  14. Olá. 1- Faz mais sentido perguntar antes a unidade.. depois o valor, depois a unidade final. 2- Para unidades, devem-se informar o que deve ser digitado para para cada opção. Por exemplo, como o usuário vai saber que deveria ser digitar "ce" para Celsius? 3- O valor a ser comparado para U1 e U2 é um texto, e não com uma variável, ou seja, seria algo como "if (U1='ce') and (U2='fa') then". Apague esses variáveis ce, fa e ke; 4- Sugiro inserir opções mais simples, como solicitar um 'C', 'F' ou 'K'. 5- A estrutura de seleção if só se associa a um comando, ou seja, o que vem depois do then. Caso queira utilizar uma se um comando (que é o seu caso), tem que usar begin/end. Tem outros detalhes, mas por enquanto é isso... No aguardo.
  15. Dando que erro??? Compilei o seu código e deu: Está específico: onde era para ter um "]", tem um ")"... (faltam os colchetes depois do i) O comando seria GotoXY()... por sinal também pertence a CRT !!! Você já deve saber, mas ele basicamente "só" reposiciona o cursor na coordenada estipulada... daí o que for feito depois, como escrever com o write, vai acontecer a partir dessa posição... PS: uma técnica bacana que pode ser utiilzada com o GotoXY() é exibir todos os dados necessários, e depois solicitar a leitura na posição correta... Algo do dito: writeln('DADOS DO ALUNO :')writeln;writeln('Nome : ');writeln('NOTAS 1o bimestre' );writeln('Matematica: ');writeln('Portugues : ');writeln('Geografia : ');writeln('Ciência : ');GotoXY(xx,yy); readln(mat [1,i]); //sendo o xx e yy a coordenada para ficar ali no lado da matemática!!!GotoXY(xx,yy); readln(port[1,i]); //idemGotoXY(xx,yy); readln(hist[1,i]); //...GotoXY(xx,yy); readln(geo [1,i]);GotoXY(xx,yy); readln(cie [1,i]); Deu para entender a diferença? Mas não tente isso por agora... pois implica em diversos outros ajustes.. (é relaticamente fácil, mas dá trabalho!) Sobre comentar as metérias, perfeito... quanto menos trabalho melhor, rs.... Eu particularmente nem digito nomes também... uso 1, 2, 3... ou algo do tipo... testes mais específicos, só de vez em quando ou mais pra frente quando tiver mais encaminhado. No aguardo.
  16. Minha sugestão: Faça o programa sem a function. Apos, pesquise ou consulte os tópicos que utilizam function, e tente implementar no seu código. É mais simples que você imagina... No aguardo.
  17. Sim... tem pelo menos 3 formas: 1 - Usando um readln; Ex.: for i:=1 to 3 do begin ClrScr; writeln(alunos[i],': ',mat[1,i]:0:2 ,' no 1 bim e ',mat[2,i]:0:2 ,' no 2 bim de Matemática.'); writeln(alunos[i],': ',port[1,i]:0:2,' no 1 bim e ',port[2,i]:0:2,' no 2 bim de Português. '); writeln; readln; //aguarda um ENTER (ler o que foi digitado, mas não atribui a nada... o que simula essa "espera") end; 2 - Usando ReadKey; (da CRT) No lugar no readln; colocar um ReadKey, a diferença que comando aguarda somente uma tecla (e não um ENTER). 3 - Usando Delay(); (acho que da CRT também) Esse comando faz o programa "pausar" por "x" milisegundos.... colocar no logar no readln um, por exemplo, Delay(300)... vai ficar 300 milissegundo e continua... Obs.: esse tempo, apesar de ser "estipulado que é em milisegundos", não bate com a realidade, tem processador que fica mais rápido, outros ficam mais lentos... ai tem que testar!!! O que está errado é a declaração... veja lá! md só precisaria de uma coordenada!!! logo algo como array[1..QDT_alunosS]... entretanto, a média é UM DADO BASEADO EM CÁLCULO, e não precisa ser armazenado! só precisa de uma variável mesmo para armazenamento temporário. ex.: media:real. (da mesma forma que não precisa armazenar a idade, mas apenas o Ano de nascimento) PS: só aproveitando, se você declarou com 2 coordenadas lá, o acesso seria por duas coordenadas!!! (só analise: se mat e md são do mesmo tipo, por quê um iria acessar de uma forma, e o outro de outra??? São duas coordenadas!! md[i,j]). Lembrando!!! não é com duas, nem com uma, apenas uma variável simlples... PS2: ou você pode simplesmente imprimir sem armazenar antes...algo como: writeln(' xxxxxxx',(mat[1,i] + mat[2,i]) / 2,' xxxxxxxxx'); No aguardo. No aguardo
  18. Olá. Legal... ai você precisa olhar lá na declaração das variáveis... array[1..2,1..QDT_alunosS] of real; A diferença entre o seu e esse é que agora é que em vez de 1, tem 2 parâmetros para o array... nesse caso, é comumente chamado de Matriz... O primeiro parâmetro associei à unidade (primeira ou segunda) e o segundo para o "id do aluno" (posição do aluno, aluno 1, 2 ou 3). Obs.: O engraçado é que o seu também é uma "matriz", ou seja, uma matriz linha ou matriz coluna (depende da interpretação). Mas então, você tem basicamente duas opções, ou dá uma pesquisa mais a fundo para se aprofundar e saber mais sobre o que está usando, ou simplesmente separa em 2... algo como: mat1, port1, hist1, geo1, cie1 :array[1..QDT_alunosS] of real; //[unidade 1] mat2, port2, hist2, geo2, cie2 :array[1..QDT_alunosS] of real; //[unidade 2] Obs.: Não acho uma boa ideia "dobrar", ou seja, criar uma vetor com o dobro do tamanho, como está o seu... O uses serve para carregar uma Unit (bliblioteca). Uma unit é basicamente um conjunto dados e/ou estruturas. A ideia é que nem sempre você precisa utilizar tudo o que está disponível para Pascal, daí ele só carrega o básico!!! Esse "básico", por exemplo, está dentro de outra unit chamada System (pode varia de compilador, para compilador), ou seja, essa unit System é AUTOMATICAMENTE carregada para seu programa... seria como se "incorporasse tudo que tem na biblioteca no seu programa"... por exemplo, sem ela, você não ia conseguir usar o readln(), writeln(), Sqrt() etc... (obs.: não lembro exatamente os comandos, mas a ideia é essa!). Já no caso da CRT (ou WinCRT), ela contém outros comandos (e outras coisas), como o ClrScr, TextColor(), e o próprio White... etc... O que acontece é que, alguns compiladores automaticamente já carregam a CRT como padrão (da mesma forma que a maioria também já carrega a System)... entende? Resumindo: Sem a CRT, meu compilador (Free Pascal Compiler) não vai reconhecer o CrlSCr, nem o TextColor() etc... Apenas coloque um // antes dos dois comandos... ou apague!! Em relação ao Const, ela é apenas a declaração de constantes, que basicamente é uma "variável com valor predefinido e fixo". Idem da "matriz", ou seja, ou pesquisa e usa, ou simplesmente tira e ajusta! PS: o White, Yellow, Black, Blue são exemplo de constantes... nela tem um valor (se quiser descobrir, experimente imprimir com um writeln), ou seja, o TextColor() precisa de um número... cada número representa um cor... e essas constantes já contém o valor referente ao seu nome (em inglês)... Já falei sobre isso lá em cima... (ou você usa uma matriz, ou cria dois vetores... não acho uma boa ideia "dobrar") Só para frisar: não existe correlação entre nada no código.. tente assimilar essa ideia, que você vai ainda mais longe!!! Tudo é uma questão de interpretação do programador para sugestionar o usuário... então, a forma que você descobriu para armazenar duas unidades foi "dobrar a quantidade de espaços no array", correto? oras, se os dados estão no array e eu quero exibir esses dados, basta exibir de acordo com a SUA definição de armazenagem... (não faz sentido em pensar em armazenar algo, sem saber como vai coletar¹). Como você pensou em armazenar?? Imagino, que seria algo como 1, 2 e 3 para a primeira unidade de cada aluno respectivamente, e 4, 5 e 6 para a segunda unidade... A questão é que você só leu a primeira unidade.. para imprimir (ou fazer o que quiser) com os dados da segunda unidade, basta coletar e tratar... lembrando: não existe correlação direta entre nada, "você" apenas que define que "os 3 primeiros é para unidade 1, e o restante para unidade". Tá me entendendo? se você escrever "writeln('Seu nome é ', mat);" o Pascal vai exibir o pronto!! (não vai dar erro, apenas não vai fazer sentido pro usuário). A "relação entre o armazenado e o contexto" é apenas abstrato!!! ¹ veja, apesar de ser óbvio, isso não é tão trivial... "só" passamos a entender isso como "aprendemos formalmente"... (o entendimento é trivial, mas o conhecimento sobre o fato não) *** No aguardo.
  19. Olá, O excesso de casas decimais não é do array em si, mas da variável do tipo real.. (o array é como um "conjunto de variáveis"). Para corrigir, uma forma seria formatando o número. Ex.: variavel_do_tipo_real:x:y Sendo X o número de casas reservadas a esquerda (o número ocupará pelo menos X algarismos de comprimento, sendo colocado espaços a esquerda), e Y o número de casas decimais. (no código abaixo já demonstro) Não necessariamente você precisa listar... vai depender como você quer que o programa se comporte... Se quer listar, lista! (o cálculo não tem correlação com a exibição). Para calcular uma média basta pegar o valores e calcular... sendo Media = soma da notas / quantidade de notas... logo, algo como: (nota1+nota2)/2. Sim tem... como sugerido, nenhuma parte do programa tem correlação com a outra, essa sensação é apenas feita pelo programador... se você quer que fique junto, imprima para sair junto! No caso, você colocou um writeln; entre a impressão do primeiro e segundo.. se quer que fique junto, tire-o... *** Abaixo peguei o seu código e fiz alguns ajustes (basicamente estéticos) e já incluir algumas coisas que comentei acima... qualquer coisa ou se baseia nele para "corrigir" o seu, ou passar usar ele mesmo.. daí vai corrigindo o que falta para ficar "tudo perfeito" apenas com essas características (ler notas e exibir)... só depois tente inserir as médias... (Não tente fazer tudo de vez!!! a ideia é inserir uma coisa nova e deixa 100%, inserir outra e deixar 100%... e não tentar fazer tudo de uma vez e não sair nada!). Claro que se inserir um novo e já ficar tudo bom, insere outra!!! Mas "nunca" tente fazer tudo de uma vez!! (pelo menos por enquanto). program Trabalho_Conclusao_Semestre;uses CRT; //carrega comandos extras como ClrScr, readlnKey, TextColor, TextBackGround etc (alguns compiladores não precisa)const QDT_alunosS=3;var alunos: array [1..QDT_alunosS] of string; mat, port, hist, geo, cie :array[1..2,1..QDT_alunosS] of real; //[unidade,id_do_aluno] i :integer;//INÍCIO DO PROGRAMABEGINTextColor(White); //cor do texto branca (mais fluorescente)for i:=1 to 3 do begin write ('Digite o nome do alunos: '); readln (alunos[I]); end; ClrScr; //limpa a telafor i:=1 to 3 do begin write ('Digite a nota do Primeiro Bim de Matemática para ',alunos[i],': '); readln (mat[1,i]); write ('Digite a nota do Primeiro Bim de Português para ',alunos[i],': '); readln(port[1,i]) end;{begin}//write ('Digite a nota do segundo Bim de Matemática para ',alunos[I],': '); readln (mat[2,i]);//write ('Digite a nota do segundo Bim de Português para ',alunos[I],': '); readln(port[2,i]);{End;}ClrScr;for I:=1 to 3 do begin writeln('O aluno ',alunos[i],' tirou ',mat[1,i]:0:2 ,' em matemática.'); writeln('O aluno ',alunos[i],' tirou ',port[I,2]:0:2,' em português. '); writeln; end;readln;END. PS: Como sugestão, não use TAB (TABULAÇÃO), use apenas espaços. (evitar) PS2: Você "obrigatoriamente" deve deixar o seu código 100% identado!!!! Não precisa ser nesse "meu" padrão (especialmente em relação ao alinhamento dos begin/end), mas se tiver um padrão seu, tem que está todo seguindo a mesma regra... seu último for mesmo está desalinhado.. rs. No aguardo.
  20. Começa a fazer a estrutura base... depois começamos a pensar na parte dos cálculos... Posta o código aqui... No aguardo.
  21. Olá... Tem... tem a possibilidade também de criar arquivos para "salvar" os dados, ou seja, após está "carregado", e passar uma nova roda, bastantando apenas adicionar os novos resultados... Se quiser, ajudamos a construir... Lembrando, a ideia é sempre começar pelo simples!!! daí vai evoluindo... (não dá para correr, antes de apresender a engatinhar ) No aguardo.
  22. Olá. Você precisa basicamente de duas coisas: array e record. O passo inicial é o seu... minha sugestão é você criar um programa simples (apenas com um array de nomes), que leia o nome de 3 alunos e exiba o nome deles no final... a partir daí vai dando continuidade.. Poste aqui o seu código (use a tag CODE, botão <> no painel para ficar organizado) e onde está com dúvidas. No aguardo.
  23. Olá. Faltou o fimescolha do escolha (caso). No VisuAlg tem que ficar atendo, nem sempre o erro dado é o erro real... (Apesar de já ser uma excelente ferramenta, nessa questão dos "possíveis erros do código", o VisuAlg ainda é um pouco limitado) Em relação ao uso do SE, esse tarefa é basicamente sua!!! Dá uma pesquisa no comando... pesquisa alguns exemplos em outros códigos que estão funcionando e vai fazendo testes... não tem mistério.. qualquer coisa é só perguntar... PS: por favor, ao postar um código, utilize a postagem do Fórum, em vez de postar um link... (mais fácil de visualizar, o link por "cair", o link pode conter ameaças etc!!!!) PS2: a própria postagem tem estrutura para códigos... basta inserir a tag CODE (botão <> no menu de Ferramentas). No aguardo
  24. Olá. Creio que você precise reestruturar o seu código... basicamente só está funcionando o cadastramento.. além do buscar, o excluir também precisa ser revisto... entre outros detalhes. Como são vários detalhes, criei um código baseado no seu, para servi de base para você tentar corrigir o seu... veja: Dê uma olhada e compare com o seu para tentar entender as sugestões de mudança. PROGRAM Cadastro_Alunos;uses CRT; //Alguns compiladores precisam para carregar comandos como o ClrScr, ReadKey, TextColor etcconst POS_INICIAL = 1; //valor da posição inicial [Simon.Viegas] TAM_MAXIMO = 50; //tamanho máximo da Lista (quantidade máxima de Alunos) [Simon.Viegas]type Apontador = integer; //estrutura do apontador Tipo_Aluno = record //dados dos Alunos [Simon.Viegas] nome :string[10]; cpf :string[15]; //Mascara: xxx.xxx.xxx-xxx periodo:integer; end; Lista_Alunos = record Alunos: array [POS_INICIAL..TAM_MAXIMO] of Tipo_Aluno; {inicio:Apontador;} //aponta para a primeira posição da Fila [Simon.Viegas] //<---por enquanto não precisa.. vai depender como estruturar o LISTA_retirar fim :Apontador; //aponta para a última posição da Fila [Simon.Viegas] end;//Procedimento que inicializa a Fila ("fila nova") [Simon.Viegas]procedure LISTA_inicializar (var Lista:Lista_Alunos); begin //Lista.Inicio:=POS_INICIAL; //aponta para a primeira posição possível [Simon.Viegas] //<---por enquanto não precisa.. vai depender como estruturar o LISTA_retirar Lista.Fim:=POS_INICIAL; //aponta para a posição inicial (o fim é a própria primeira posição) [Simon.Viegas] end;//Procedimento que verifica se a lista está vaziafunction LISTA_vazia (var Lista:Lista_Alunos):boolean; begin LISTA_vazia:=(Lista.fim=POS_INICIAL); //está vazia se a última posição é igual (aponta) para a primeira. [Simon.Viegas] end;//Procedimento para adicionar um novo Aluno na Lista de Alunos [Simon.Viegas]procedure LISTA_inserir (var Lista:Lista_Alunos; aluno:Tipo_Aluno); begin if Lista.fim > TAM_MAXIMO then //verifica se tem espaço disponível para inserir [Simon.Viegas] writeln('A Lista esta Cheia') else begin Lista.Alunos[Lista.Fim]:=aluno; //insere o Aluno na primeira posição disponível [Simon.Viegas] Lista.fim:=Lista.fim+1; //atualiza a última posição end; end;//Coleta dados do Aluno e insere na Lista [Simon.Viegas]procedure MENU_inserir (var Lista:Lista_Alunos); var aluno_novo :Tipo_Aluno; begin writeln('Insira os dados dos Aluno'); write ('Nome : '); readln(aluno_novo.nome); write ('CPF : '); readln(aluno_novo.cpf); write ('Periodo: '); readln(aluno_novo.periodo); LISTA_inserir(Lista,aluno_novo); end; //Retira um Aluno da Lista [Simon.Viegas]{ ### Precisa ajustar ###procedure LISTA_retirar (var Lista:Lista_Alunos; Aluno:Tipo_Aluno); var Aux:integer; begin if (Vazia(Lista)) or (p >= Lista.Fim) then writeln('Erro: posicao nao Existe') else begin //Aluno:=Lista.Aluno[p]; ?? Lista.Fim:= Lista.Fim-1; for Aux:= p to Lista.Fim-1 do Lista.Aluno[Aux]:= Lista.Aluno[Aux+1] end; end;}// Imprime a Lista de Alunosprocedure LISTA_imprimir (Lista:Lista_Alunos); var i :integer; begin for i:=POS_INICIAL to Lista.Fim-1 do begin writeln('Aluno :',Lista.Alunos[i].nome); writeln('CPF :',Lista.Alunos[i].cpf); writeln('Periodo:',Lista.Alunos[i].periodo); write; end; writeln; end;//Procedimento q está dando erro{ ### Precisa ajustar ###function busca_simples (Lista:Lista_Alunos; Aluno:Tipo_Aluno):integer; var i: integer; begin for i := 1 to Tam_Max do if (Lista[i] = i) then busca_simples:=i; i:=i+1; end;}var Alunos :Lista_Alunos; opcao :integer; temp :Tipo_Aluno; BEGIN// MenuLISTA_inicializar(Alunos);LISTA_imprimir(Alunos);Opcao:=0;while (Opcao<>9) do begin ClrScr; writeln(' Seja Bem Vindo!!! '); //ESSE MENU PODERIA SER TRANSFORMADO EM UM PROCEDIMENTO TAMBÉM!!! [Simon.Viegas] writeln; writeln('Escolha umas das opções: '); writeln; writeln('1 - Inserir um Aluno '); writeln('2 - Busca um Aluno pelo Cpf '); writeln('3 - Busca um Aluno por Periodo '); writeln('4 - Atualiza o Periodo do Aluno'); writeln('5 - Apaga um Aluno '); writeln('9 - Sair '); {read (Opcao);} //Não use READ, somente READLN readln(Opcao); // Inserir um Aluno if (Opcao=1) then MENU_inserir(Alunos); { if (Opcao=2) then begin writeln(); Write ('Digite o Numero do Cpf que deseja Busca:'); readln (num); write ('O Numero', num , 'Esta na Posicao:', busca(num, listaInt,Tam_Max)); end; if (Opcao=3) then begin writeln(); Write ('Digite o Periodo que deseja Busca:'); readln (num); write ('O Numero', num , 'Esta na Posicao:', busca(num, listaInt,Tam_Max)); end; if (Opcao=4) then begin end; } if (Opcao=5) then begin write ('Digite o Aluno que deseja Excluir:'); readln (temp.Nome); {LISTA_retirar(Alunos,temp);} end; writeln; LISTA_imprimir(Alunos); writeln('Pressione ENTER para continuar'); readln; end;END. MINHA SUGESTÃO É A SEGUINTE: Corrija seu programa para que funcione bem cadastramento e exibição dos Alunos cadastrados e poste aqui... (Versão 1) (Se o cadastramento não funcionar, todo o restante não vai funcionar também) A partir da Versão 1, tenta fazer a consulta e posta aqui (Versão 2) A partir da Versão 2, tenta fazer a parte da Exclusão... Vale salientar que primeiro você precisará localizar a posição do Aluno quer excluir, para depois excluir ele... (no seu código, você sempre está excluindo o aluno da mesma posição). Daí vai fazer aos poucos.. No aguardo.
  25. Olá. Só para tentar entender melhor, por quê tem que subir os outros nomes? isso é um requisito do projeto? Talvez a ideia em si não seja boa... (tem seus impactos negativos) Mas em fim, se estiver usando um array, você poderá percorrer todo o restante dos registros, a partir da posição que foi excluído, e "igualar o registro atual com o próximo". Ai final, exclui a última posição cadastrada. Caso necessário, qualquer coisa posta o seu código e onde precisa de ajuda. PS: lembrando, se isso não for "uma obrigação/exigência", talvez seja melhor pensar em outra solução! No aguardo.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!