Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Reinan12

Ajuda com pascal

Recommended Posts

Comecei a aprender programar em pascal a pouco tempo mais agora estou com um erro no algoritmo não conseguir resolver o algoritmo e o seguinte . Faça um algoritmo que mostre a sequencia 10 20 30 40 50 60 ...... 980 990 1000 usando o for então fiz

o algoritmo

Program serie_for;

var i :integer;

Begin

for i := 10 to 1000 do

Begin

writeln(i);

i := i+9; // só compila se eu tirar essa linha, mais se eu tirar não fica na sequencia de 10 em 10

end;

End.

quando vou compilar da o seguinte erro ''legal assignment to for-loop variable "i

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Reinan12,

...quando vou compilar da o seguinte erro ''legal assignment to for-loop variable "i

Creio que a expressão correta seria:

Illegal assignment to for-loop variable "i"

traduzindo:

Atribuição ilegal de loop-variável "i"

Ou seja, para o seu compilador, você não pode alterar o valor da variável que controla o loop...

Resumidamente

Sem entrar no mérito se é ou não um algoritmo válido... se você estiver usando o mesmo compilador que é o exigido por quem te pediu o código, você terá que achar outra solução. ^_^

PS1: No Turbo Pascal 5.5 compilou, mas não funcionou (provavelmente nem no 7.0 e 7.1 :rolleyes:), pois dá outro problema (que não vou entrar em detalhes);

PS2: No Dev-Pascal 1.9.2 seu código funcionou, mas ainda tem a questão se ser "válido", já que pode está "quebrando um conceito" (do for);

PS3: No Free Pascal Compiler 2.6.0 deu justamente a mensagem comentada...

PS4: Não dei sugestões de solução justamente para não atrapalhar você desenvolver uma outra lógica sozinho.

Editado por Simon Viegas
Pequeno ajuste
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Eu estou usando o geany com o free pascal no ubuntu foi o unico

    que eu achei para pascal e também o algoritmo esta igualzinho

    ao da video aula o compilador usado na video aula é o Dev-pascal :(

    Conseguir resolver da seguinte forma usando o while e não o for

    Program serie;

    var i :integer;

    Begin

    i := 10;

    while (i <= 1000) do

    Begin

    writeln(i);

    i := i +10;

    end;

    End.

    Obigado EstilingueAtomico

    Editado por Reinan12

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Eu estou usando o geany com o free pascal no ubuntu foi o unico que eu achei para pascal...

    Certo... então em suma está utilizando o Free Pascal para compilar, o Geany no caso é o "editor de texto".

    ...e também o algoritmo esta igualzinho ao da video aula o compilador usado na video aula é o Dev-pascal :(

    Como comentei, no Dev-Pacal compilou certinho, mas fica essa questão no ar: é válido "se intrometer" na variável de controle do for? Veja que isso é relevante, que em alguns outros compiladores não aceitam essa interferência.

    Conseguir resolver da seguinte forma usando o while e não o for

    Program serie;
    var i :integer;
    Begin
    i := 10;
    while (i <= 1000) do
    Begin
    writeln(i);
    i := i +10;
    end;
    End.

    Usando o for poderia ser assim:

    program serie;
    var
    i :integer;
    begin
    [COLOR="Blue"]for i:=1 to 100 do
    writeln(i*10);[/COLOR]
    readln; //aguar pressionar ENTER
    end.

    Obigado EstilingueAtomico

    Agente que agradece..

    Abraços

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • O professor falou que podia ser o for ,repeat,while

    mais no caso o mais apropriado seria o for não e isso ?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    O professor falou que podia ser o for ,repeat,while

    Em se falando de Pascal, TODOS os códigos que são feito com deles pode ser transformado para um outro, ou seja, de certo modo só precisaria usar um só... a questão é que cada um é mais prático para cada caso...

    PS: Sim, dá para fazer com repeat ou qualquer outro laço que exista no Pascal. Basta adaptar...

    mas no caso o mais apropriado seria o for não e isso ?

    Não necessariamente, talvez sim pelo fato de ser uma quantidade fixa de loops... mas acredito que seu código está certo e válido...

    Essa interpretação do "mais apropriado" é relativo, tanto é, que, o próprio código original tem essa questão de "mexer na variável de controle" do for. Que no caso eu acho inválida atualmente. (já que inclusive alguns compiladores atuas nem aceitam).

    Eu particularmente avariaria o seu código "mais apropriado" do que o com for.

    Editado por Simon Viegas
    Complemendo...
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Desculpem o incomodo programadores mas é que tenho um ligeiro problema...Estou no final de curso de programação do 10º e tenho de fazer um projecto final em pascal e precisava de uma grande ajuda o projecto é sobre "Gestão de Viagens" Se me poderem ajudar agradecia. O projecto tem de ficar a semelhança deste que disponibilizo:

    program exemplo(input,output,fich,mapa);

    uses wincrt;

    type

    registo=record

    nr:longint;

    nome:string[30];

    end;

    var

    fich:file of registo;

    mapa:text;

    reg:registo;

    i:integer;

    chave:longint;

    nome_cons:string[30];

    opcao,continua:char;

    procedure menu;

    begin

    clrscr;

    writeln('1 - carregamento');

    writeln('2 - consulta por nome');

    writeln('3 - insercao');

    writeln('4 - eliminação');

    writeln('5 - correção');

    writeln('6 - exibicao');

    writeln('7 - listagem');

    writeln('f - fim');

    write('opcao ?');

    readln(opcao);

    end;

    procedure carregamento;

    begin

    clrscr; reset(fich);

    opcao:='s';

    if ioresult=0 then

    begin

    writeln('O ficheiro existe, quer destrui-lo)');

    readln(opcao);

    end;

    if opcao = 's' then

    begin

    rewrite(fich);

    repeat

    write('qual o nr?');

    readln(reg.nr);

    writeln('qual o nome');

    readln(reg.nome);

    seek(fich,reg.nr);

    write(fich,reg);

    write('quer continuar?'); readln(continua);

    until continua='n';

    end;

    end;

    procedure consulta_nom;

    begin

    continua:='s';

    while continua='s' do begin

    clrscr; reset(fich);

    write('nome a consultar'); readln(nome_cons);

    while (not eof(fich)) and (reg.nome <> nome_cons) do

    read(fich,reg);

    if reg.nome = nome_cons then

    begin

    writeln('NR:');

    writeln(reg.nr);

    writeln('nome:');

    writeln(reg.nome);

    end

    else

    writeln('esse nome nao exite.');

    writeln('quer consultar mais registos (s/n)?');

    readln(continua);

    end;

    end;

    procedure insercao;

    begin

    clrscr; reset(fich);

    writeln('que numero pretende inserir?');

    readln(reg.nr);

    writeln('qual o nome:');

    readln(reg.nome);

    seek(fich,chave);

    write(fich,reg);

    if ioresult=0 then

    writeln('inserção bem sucedida');

    writeln('carregue em enter');

    readln(continua);

    end;

    procedure eliminacao;

    begin

    clrscr;

    write('Que registo pretende eliminar?');

    READln(chave);

    reset(fich);

    reg.nr:=0;

    reg.nome:='';

    seek(fich,chave);

    write(fich,reg);

    if ioresult = 0 then

    writeln('eliminação bem sucedida');

    writeln('carregue em enter');

    readln(continua);

    end;

    procedure correccao;

    begin

    clrscr;

    write('Que registo pretende alterar?');

    readln(reg.nr);

    write('qual o novo nome?');

    readln(reg.nome);

    reset(fich);

    seek(fich,reg.nr);

    write(fich,reg);

    if ioresult =0 then

    writeln('correçao bem sucedida');

    writeln('carregue em enter');

    readln(continua);

    end;

    procedure exibicao;

    begin

    clrscr;

    reset(fich);

    writeln('o ficheiro tem' ,filesize(fich),'registos');

    read(fich,reg);

    while not eof(fich) do begin

    read(fich,reg);

    writeln('numero:',reg.nr);

    writeln('nome:',reg.nome);

    writeln('prima enter');

    readln(continua);

    end;

    end;

    procedure listagem;

    begin

    clrscr;

    reset(fich);

    read(fich,reg);

    rewrite(mapa);

    while not eof(fich) do

    begin

    read(fich,reg);

    writeln(mapa,'numero:',reg.nr);

    writeln(mapa,'nome:', reg.nome);

    end;

    close(mapa);

    writeln('ficheiro mapa.lis criado. prima enter');

    readln(continua);

    end;

    begin

    assign(fich,'fich.dat'); assign(mapa,'mapa.lis');

    repeat

    menu;

    case opcao of

    '1':carregamento;

    '2':consulta_nom;

    '3':insercao;

    '4':eliminacao;

    '5':correccao;

    '6':exibicao;

    '7':listagem;

    'f':;

    end;

    until opcao='f';

    end.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    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

    ×