Ir ao conteúdo
  • Cadastre-se

Ajuda em Pascal


Posts recomendados

Olá, bom dia!
 
Estou começando agora em pascal e estou encontrando problemas ao desenvolver programa em pascal. Alguém pode me ajudar?
 
1-  Numa certa loja de eletrodomésticos, o comerciário encarregado da seção de televisores recebe, mensalmente, um salário fixo mais comissão. Essa comissão é calculada em relação ao tipo e ao número de televisores vendidos por mês, obedecendo à tabela abaixo:
 
TIPO                                      NUMERO DE TELEVISORES VENDIDOS                COMISSÕES
A cores                                                 maior ou igual a 10                                        R$100,00 por tv
                                                             menor que 10                                               R$50,00 por tv
Preto e branco                                        maior ou igual a 20                                       R$40,00 por tv
                                                             menor do que 10                                           R$20,00 por tv
 
Sabe-se, ainda, que ele tem um desconto de 8% sobre seu salário fixo para o INPS. Se o seu salário total (fixo + comissões – INPS) for maior ou igual a R$ 3.000,00 ele ainda terá um desconto de 5%, sobre esse salário total, relativo ao imposto de renda retido na fonte. Sabendo-se que existem 20 empregados nesta seção, faça um programa em Pascal para ler o valor do salário fixo e, para cada comerciário, o número de sua inscrição, o número de televisores a cores e o número de televisores preto e branco vendidos; calcule e escreva o número de inscrição de cada empregado, seu salário bruto e seu salário líquido.
 
Consegui fazer isso:

program ATS_SegundaQuestao;uses crt;type RgProduto = record                   Nome: string;                   PrecoCompra,PrecoVenda: real;                                    end;var salariofixo, comissao, INPS,salariobruto,valorretido,liquido: real;  tvcores,tvpreto,n,inscricao: integer;  tipo:char;                      begin    n := 0;    repeat    n := n + 1;    clrscr;    writeln('Por favor! Digite o Salário fixo do funcionário! : ', n:2);    writeln('-------------');    write('Por favor! Digite o nome da Mercadoria!: ');    readln(salariofixo[n].Nome);    write('Por favor! Digite o valor de compra: ');    readln(Produto[n].PrecoCompra);    write('Por favor! Digite o valor de venda.: ');    readln(Produto[n].PrecoVenda);    writeln;    repeat      write('Deseja continuar? (s/n).: ');      readln(Continuar);    until Continuar in ['S', 's', 'N', 'n'];  until (n = Maximo) or (Continuar in ['N', 'n']);    LucroA := 0;    TotalCompra := 0;  LucroB := 0;    TotalVenda  := 0;  LucroC := 0;    TotalLucro  := 0;  for i := 1 to n do  begin    Lucro := Produto[i].PrecoVenda - Produto[i].PrecoCompra;    PercentaulLucro := Lucro / Produto[i].PrecoCompra * 100;    if PercentaulLucro< 10       then inc(LucroA)    else if PercentaulLucro <= 20            then inc(LucroB)         else inc(LucroC);    TotalCompra := TotalCompra + Produto[i].PrecoCompra;    TotalVenda  := TotalVenda  + Produto[i].PrecoVenda;    TotalLucro  := TotalLucro  + Lucro;  end;    clrscr;  writeln('.....Lucros...    Qtd.');  writeln('----------------------');  writeln('O total dos lucros ate 10% = ', LucroA:3);  writeln('O total dos lucros de 10% a 20% =', LucroB:3);  writeln('O total dos lucros acima de 20%=', LucroC:3);  writeln;  writeln('O total dos precos de compra....: ', TotalCompra:8:2);  writeln('O total dos precos de venda.....: ', TotalVenda :8:2);  writeln('O total do lucro das mercadorias: ', TotalLucro :8:2);  writeln;  write('Pressione a tecla ENTER para sair.');  readln;end.

Fazer um programa em Pascal para calcular o valor patrimonial dos produtos de uma empresa. O programa deve ler 4 vetores com 5 elementos cada: COD (vetor de inteiros), PROD (vetor de literais), QUANT (vetor de inteiros) e VAL (vetor de reais), correspondentes ao código do produto, nome do produto, quantidade em estoque e valor unitário. O programa faz a leitura dos valores referentes a cada vetor e calcula o valor patrimonial dos produtos, fazendo o somatório da multiplicação da quantidade em estoque pelo valor unitário (utilizando os dados armazenados nos vetores QUANT e VAL). Ao final, informar o nome do produto mais valioso contido em estoque e o valor total em estoque.

 

program ATS_TerceiraQuestao ;uses crt;var empresa: string;N,I: integer;Item, Q: array [1..200] of integer;v: array [1..200] of real;vp:Real;Begin  writeln ('Informe o nomne da empresa');readln (empresa);repeatwriteln  ('Informe o número de itens');readln(n);until (n > 0) and (<= 200);for i:=1 to n doend;Beginwriteln ('Informe o código do produto');readln(item[i]);writeln ('O valor unitário'); read(v[i]);end;vp:=0;for i:=1 to n dovp:= vp +q [i] *v[i];clrscr;writeln('Empresa: ', empresa)writeln ('valor patrimonial:', vp:8:2);readkey;End.

Nenhum deles rodam. Alguém me ajuda?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

O primeiro código compilou e rodou normalmente. O que que ocorre quando compila ai?

 

Em relação ao segundo código, apenas corrigir uns pequenos detalhes. Informações no próprio código.

program ATS_TerceiraQuestao;uses  CRT;var   empresa : string;  N,I     : integer;  Item, Q : array [1..200] of integer;  v       : array [1..200] of real;  vp      :Real;beginwriteln('Informe o nomne da empresa');readln(empresa);repeat  writeln('Informe o número de itens');  readln(n);{until (n > 0) and (<= 200);} //faltou inserir o n na segunda sentençauntil (n > 0) and (n<= 200);for i:=1 to n do  { end;} //?????  begin  writeln('Informe o código do produto');  readln(item[i]);  writeln('O valor unitário');   {read(v[i]);} //não use read, use somente readln  readln(v[i]);  end;vp:=0;for i:=1 to n do  vp:= vp+q[i]*v[i];ClrScr;{writeln('Empresa: ', empresa)} //faltou o ";"writeln('Empresa: ', empresa);writeln ('valor patrimonial:', vp:8:2);readkey;end.

No aguardo

 

Abraços

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.
 
É, analisando o código aqui, acho que tem algo erro mesmo... estou sem compilador aqui para fazer um novo teste, mas provavelmente eu testei errado. :(
 
Mas vamos lá:

Olá. bom dia!
 
O primeiro código dá o seguinte erro:
 
Erro semântico na linha 33.  O número para SALARIOFIXO está incorreto.

 
Provavelmente se trata dessa instrução:

  readln(salariofixo[n].Nome);

A variável é salariofixo, correto?
 
Ele está declarado como tipo real. Veja:

var salariofixo, comissao, INPS,salariobruto,valorretido,liquido: real;tvcores,tvpreto,n,inscricao: integer;tipo:char;

Daí já verificamos duas coisas:
1) a instrução citada está usando um "[n]" na variável salariofixo. Esse colchete (com um valor inteiro* no meio) está meio que sugerindo que a variável é uma ARRAY (ou uma String, que se comporta como uma array e possibilita esse acesso com [] também), mas como sabemos, salariofixo é apenas um real, logo não aceitando esse "[]"!!!
 
2) além de não ser um array, a instrução também está usando um "." depois dos "[]". Esse "ponto" está meio que sugerindo que a variável salariofixo é um RECORD (no caso, um array de um record, já tem o []), mas como sabemos, salariofixo é apenas um real, logo não aceitando esse "."!!!
 
ou seja. salariofixo não é uma array (não aceita "[]"), e nem é um record (não aceita ".").
 
 
###
 
Da mesma forma que a instrução:
 

readln(Produto[n].PrecoCompra);

Deve não funcionar, já que Produto não está declarado.
 
Analisando superficialmente, caso a lógica fosse para usar essa variável mesmo, a declaração dela poderia ficar mais ou menos assim:
 
 
 

type  RgProduto = record                Nome: string;                PrecoCompra,                PrecoVenda: real;                                 end;               tpProdutos = array [1..10] of RgProduto;  //AQUI DECLARAÇÃO DO TIPO "ARRAY", QUE É DO TIPO "RECORD"var  produtos     :tpProdutos; //AQUI DECLARAÇÃO DA VARIÁVEL COM SEU RESPECTIVO TIPO  salariofixo,  comissao,  INPS,  salariobruto,  valorretido,  liquido      :real;  tvcores,  tvpreto,  n,  inscricao    :integer;  tipo         :char;

 
 
O uso do type basicamente serve para facilitar o reuso, ou seja, se outra variável utilizar esse tipo também. Mas poderia ser declarado direto.
 
Ex.:
 

var  produtos     :array [1..10] of RgProduto

ou até mesmo

var  produtos :array [1..10] of record                               Nome: string;                               PrecoCompra,                               PrecoVenda: real;                                                end;

 
 
Em fim. Precisa primeiramente organizar a declaração das variáveis. Depois reajustar o programa.
 
 
No aguardo.

Link para o comentário
Compartilhar em outros sites

Consegui organizar, mas agora dá until não esperado, mas não acho o erro. Esse until que ele está apontando está fechando o repeat.

program ATS_SegundaQuestao;uses crt;type RgProduto = record                   Nome: string;                   PrecoCompra:real;PrecoVenda: real;                                    end;                     tpProdutos= array[1..10] of RgProduto;var    produtos:real;salariofixo: real;comissao: real; INPS: real; salariobruto: real;valorretido:real;salarioliquido: real;tvdecores:integer;tvpretoebranco:integer;n:integer;inscricao: integer;    tipo:char;                       begin    n := 0;    repeat      n := n + 1;        clrscr;        writeln('Por favor! Digite o Salário fixo do funcionário! : ', n:2);    writeln('-------------');    write('Por favor! Digite o nome da Mercadoria!: ');    readln(salariofixo[n].Nome);    write('Por favor! Digite o valor de compra: );    readln(Produto[n].PrecoCompra);    writeln(Por favor! Digite o valor de venda: );    readln(Produto[n].PrecoVenda);    writeln;    repeat      writeln(Deseja continuar? (s/n).: ');      readln(Continuar)          until Continuar in ['S', 's', 'N', 'n'] ;  until (n = Maximo) or (Continuar in ['N', 'n']);    LucroA := 0;    TotalCompra := 0;  LucroB := 0;    TotalVenda  := 0;  LucroC := 0;    TotalLucro  := 0;  for i := 1 to n do  begin    Lucro := Produto[i].PrecoVenda - Produto[i].PrecoCompra;    PercentaulLucro := Lucro / Produto[i].PrecoCompra * 100;    if PercentaulLucro< 10       then inc(LucroA)    else if PercentaulLucro <= 20            then inc(LucroB)         else inc(LucroC);    TotalCompra := TotalCompra + Produto[i].PrecoCompra;    TotalVenda  := TotalVenda  + Produto[i].PrecoVenda;    TotalLucro  := TotalLucro  + Lucro;  end;    clrscr;  writeln('.....Lucros...    Qtd.');  writeln('----------------------');  writeln('O total dos lucros ate 10% = ', LucroA:3);  writeln('O total dos lucros de 10% a 20% =', LucroB:3);  writeln('O total dos lucros acima de 20%=', LucroC:3);  writeln;  writeln('O total dos precos de compra....: ', TotalCompra:8:2);  writeln('O total dos precos de venda.....: ', TotalVenda :8:2);  writeln('O total do lucro das mercadorias: ', TotalLucro :8:2);  writeln;  write('Pressione a tecla ENTER para sair.');  readln;end.
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.
 
Efetuei uma compilação pelo PascalZim 6.0.2 e vi esse erro. Mas o erro em si está em outro local! Veja, você precisa corrigir alguns writeln, pois para imprimir um texto, é necessário que ele fique entre aspas simples. ex.:
 

write('Por favor! Digite o valor de compra: ); //está faltando a aspa do final
writeln(Por favor! Digite o valor de venda: ); //já aqui está faltando as aspas do inicio e final

Por ai vai.

 

 

MINHA SUGESTÃO

 

Refaça o programa e vá compilando de tempos em tempos, ex.:

program ATS_SegundaQuestao;uses  CRT;const  MAXIMO = 10;type  RgProduto = record                Nome       :string;                PrecoCompra:real;                PrecoVenda :real;              end;  tpProdutos = array[1..MAXIMO] of RgProduto;var  produtos :tpProdutos;  n        :integer;  continuar:char;      {salariofixo: real;  comissao: real;  INPS: real;  salariobruto: real;  valorretido:real;  salarioliquido: real;  tvdecores:integer;  tvpretoebranco:integer;  n:integer;  inscricao: integer;  tipo:char;}BEGINn:=0;repeat  n:=n+1;  ClrScr;  writeln('Por favor! Digite o Salário fixo do funcionário! : ', n:2);  repeat    writeln('Deseja continuar? (s/n).: ');    readln(Continuar)    until Continuar in ['S', 's', 'N', 'n'];until (n = Maximo) or (Continuar in ['N', 'n']);END.

Daí vai inserindo mais algumas coisas e vai testando (compila)... se compilar, significa que "não tem" erro de sintaxe. Daí vai inserindo mais outras coisas e compila novamente... se der erro, corrige e compila...ou seja, a compilação vai servir para verificar se tem erro de sintaxe... com o tempo, vai se acostumando e vai diminuindo a quantidade de testes...

 

 

 

Por exemplo, inserir mais um trecho e compilei. OK... depois inserir mais outros e compilei, de seu erro:

=> Erro semântico na linha 46...=> O identificador 'PRODUTO' não foi declarado dentro do escopo de PROGRAM!
program ATS_SegundaQuestao;uses  CRT;const  MAXIMO = 10;type  RgProduto = record                Nome       :string;                PrecoCompra:real;                PrecoVenda :real;              end;  tpProdutos = array[1..MAXIMO] of RgProduto;var  Produtos :tpProdutos; //array para cadastrar os produtos  n        :integer; //controle da quantidade de produtos cadastrados  continuar:char;   salarioFixo :real; //valor do salário fixo do funcionário    {salariofixo: real;  comissao: real;  INPS: real;  salariobruto: real;  valorretido:real;  salarioliquido: real;  tvdecores:integer;  tvpretoebranco:integer;  n:integer;  inscricao: integer;  tipo:char;}BEGINn:=0;repeat  n:=n+1;  ClrScr;  writeln('Por favor! Digite o Salário fixo do funcionário! : ', n:2);  readln(salarioFixo);  write('Por favor! Digite o nome da Mercadoria!: ');  readln(Produtos[n].Nome);  write('Por favor! Digite o valor de compra: ');  readln(Produtos[n].PrecoCompra);  writeln('Por favor! Digite o valor de venda: ');  readln(Produto[n].PrecoVenda);  writeln;  repeat    writeln('Deseja continuar? (s/n).: ');    readln(Continuar)    until Continuar in ['S', 's', 'N', 'n'];until (n = Maximo) or (Continuar in ['N', 'n']);END.

E agora? analise o erro e tenta corrigir. Nesse caso, foi que digitei "Produto" em vez de "Produtos". Entende?

 

Daí revisa... os passos até ai estão certo? parece que sim... e continua inserindo e testando...inserindo e testando...

 

 

Fique atento: nem sempre o erro informado no PascalZim aponto para o erro em si. Daí tem que revisar o código todo! Se anteriormente foi feito os testes, provavelmente o erro deve está na parte nova que você inseriu.

 

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

  • mês depois...
Olá,boa noite!

 

Ainda não consegui compilar essse programa, você me ajuda?

 

Achei o meu erro, estava misturando um programa com o outro e testando linha por linha achei o meu erro,mas não conisigo sair daqui.

 


program televisor;



uses crt;


const Maximo = 1000; 
type RgProduto = record
                   Nome: string;
                   totaltvcores,totaltvpretobranco: integer;
                   
                 end;
                 
var salarioBruto,salarioliquido,salarioBruto,comissao,INPS,valorretido :real;
    n,i,totaltvcores,totaltvpretobranco,inscricao:integer;
    continuar,tipo:char;
    nome:string;                 






Begin


n:=0;


n:=n+1;


ClrScr;


writeln('informe o nome do encarregado:');
readln(nome);
writeln('informe o salarioFixo:');
readln(salarioBruto);
writeln('Informe a quantidade de televisores a cores vendidos  :');
readln(totaltvcores);
writeln('Iforme a quantidade de televisores preto e brano vendidos :');
readln(totalpretobranco);
comissao:= (totaltvcores+ totalpretobranco); // qual formula usar se isoo depende da quantidade?

 

Obrigada

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

Qual compilador você usa?

 

 

Vamos lá:

 

Obs.: Ficou faltando o end. no final. 

 

Abaixo compilei o código (Compilador Free Pacal 2.6.4):

program televisor;uses  CRT;const  Maximo = 1000; type   RgProduto = record     Nome: string;     totaltvcores,totaltvpretobranco: integer;   end;var  salarioBruto,salarioliquido,salarioBruto,comissao,INPS,valorretido :real;  n,i,totaltvcores,totaltvpretobranco,inscricao:integer;  continuar,tipo:char;  nome:string;                 beginn:=0;n:=n+1;ClrScr;writeln('informe o nome do encarregado:');readln(nome);writeln('informe o salarioFixo:');readln(salarioBruto);writeln('Informe a quantidade de televisores a cores vendidos  :');readln(totaltvcores);writeln('Iforme a quantidade de televisores preto e brano vendidos :');readln(totalpretobranco);comissao:= (totaltvcores+ totalpretobranco); // qual formula usar se isoo depende da quantidade?end;

E apresentou alguns erro, daí, vai tentando analisar, ex.:

_FCH.PAS(12,31) Error: Duplicate identifier "salarioBruto"

Na linha 12 , existem duas variáveis com o mesmo nome!! NÃO PODE!. Ou uma delas está digitado errada, ou você declarou a mesma variável duas vezes...

 

Outro exemplo:

_FCH.PAS(27,24) Error: Identifier not found "totalpretobranco"

Na linha 27, foi utilizado uma variável de nome totalpretobranco, mas ela não foi declarada... etc...

 

 

Vai compilando e corrigindo, compilando e corrigindo...

 

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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