• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sota

Array é um trabalho lixado

13 mensagens neste tópico

BOas pessoal e a minha 1º vez neste forum sou da FCT e tou a dar pascal, e nao tou a perceber aquilo mto bem. tenho um trabalho pa fazer que passo amostrar:

trabalho

Pretende-se construir um programa, bem estruturado, que processe qualquer sequência de caracteres provenientes do teclado, tomando para análise todos aqueles que sejam encontrados até à primeira sequência de 5 caracteres '#' contíguos.

O programa deverá calcular e afixar no ecrã

· O maior número inteiro par, sem sinal, que será possível formar com todos os algarismos que figurem no conjunto dos caracteres analisados;

· O menor número inteiro ímpar, sem sinal, que será possível formar com todos os algarismos que figurem no conjunto dos caracteres analisados.

De notar que, como é habitual, só deverão ser afixados os algarismos significativos dos números inteiros obtidos. O número zero é considerado par.

Todas as mensagens para o utilizador deverão ser frases completas em língua portuguesa e tão claras quanto possível, usando-se caracteres acentuados sempre que a ortografia assim o exija. As situações de impossibilidade de cálculo também deverão ser detectadas e geradas as respectivas mensagens para o utilizador, como, por exemplo:

· Não existem algarismos para se poder formar números inteiros!

· Não existem algarismos para se poder formar qualquer número par!

· Não existem algarismos para se poder formar qualquer número ímpar!

eu tenho mais ou menos uma ideia de como o fazer so que nao as base.. queria portanto saber como posso criar um vector(array) e meter la dentro todos os nº da sequencia e depois os ordenar como posso ler o ultimo valor do vector ver se e par ou impar e caso par por o ultimo par no fim.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Em primeiro lugar bem-vindo á comunidade Sota.

Acho que antes de mais deves apresentar o código que já elaboraste, ou o algoritmo de modo a que possamos dar as ajudas que necessitas.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora aí esta um bom programa..

não percebi muito bem, se só se pode inserir numeros e quando é que se pára de inserir..

mas supondo que para de inserir quando carregar em 0 por exemplo..

isto por exemplo deveria funcionar..

a:=1;
x:=3000 {dummy};
while x <> 0 do
x:=readkey;
array[a]=x;
inc(a);

para ordenar podes usar este metodo

for i:=1 to n-1 do
    for j:= i+1 to n do
        if array[i]>array[j] THEN
                         begin
                         auxi:=num[i];
                         num[i]:=num[j];
                         num[j]:=auxi;
end;
end;

quanto ao numero ser par é simples.. se (nr mod 2) = 0 então nr é par.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu ainda n consegui muita coisa :S mas vou por o que ja consegui.

a indei do programa e por um sequencia e qd o utilizador puser 5#(#####) seguidos ele para de ler

Isto e que eu tenho feito:

program trab2;
var x: char;
c: array ['0'..'9'] of integer;

function valorinteiro (b:char):integer;
begin
valorinteiro:= ord(b)-ord(0)
end;

procedure pede;
writeln(' insira uma sequencia de numeros e termine com 5# seguidos')
read(x)
while x<>#  do
  begin
	   c:= c + valorinteiro(x) (* add o valor inteiro do caracter lido ao vector*)
	   read(x)
  end;

nao sei se ta bem, agr faltame ordenar os numeros do array e fazer com que ele leia o ultimo valor do vector ate encontrar um par e por o par em ultimo e mais ou menos o mm po impar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1º na declaração do array não podes por ['0'..'9'] of integer, tem de ser [0..9] of integer;

2º Para que é essa função???! :shock:

3º esse while vai parar quando inserires um cardinal, e não 5 seguidos como tu tinhas dito..

4º em vez de usares o readln(x) que o utilizador tem de carregar num caracter e depois carregar em enter,podias usas o x:=readkey; que não precisas carregar em enter,ele lê logo a tecla em que carregas para a variavel.

5º Já aí está como ordenar o array, não percebo qual é a tua dificuladade nesse assunto.

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epah a minha dificuldade era nao percecer um cu de pascal e nao conhecer ainda mto bem os termos(array[perceber como funciona]mas ja consegui obrigado na mm fikei a conhecer readkey

thx pessoal

cump

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

GPL diz-me so uma cena o readkey n lê so um caracter???

e que ja n me lembro mt bem...

GPL disse:.... 4º em vez de usares o readln(x) que o utilizador tem de carregar num caracter e depois carregar em enter,podias usas o x:=readkey; que não precisas carregar em enter,ele lê logo a tecla em que carregas para a variavel.

PEACE ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim,lê só um!

mas ia lendo um a um para determinada posição do array, da maneira que eu lhe tava a dizer..

não sei como ele fez..

ele tambem não se sabe explicar muito bem mas pronto.. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O exercício é facil de se resolver.

Só tenho uma duvida, os dados são inseridos todos numa linha (estilo "12564#55#####45") ou em linhas separadas?

De qualquer das formas, é bastante simples.

Fazes algo do genero:

//A variavel S é do tipo string

readln(S);

//A função "pos" encontra a posição de uma substring numa string, vamos apagar na variavel s, a partir da posição inicial dos #####, o numero de caracteres certos (até ao fim da string, logo, comprimento de S menos Posição dos caracteres)

delete(s,pos(s,'#####'),length(s)-pos(s,'#####'))

//Percorrer toda a String e eliminar os caracteres que nao forem numeros

for j:=1 to length(s) do

if (not ((s[j]>=0) and (s[j]<=9))) then delete(s,j,1);

//Passar a string para o vector; começamos por percorrer a string

for j:=1 to length(s) do begin

//Não esquecer de converter o caracter para o tipo inteiro com "val"

val(s[j],x,erro);

vector[j]:=x

end;

E é so fazer a ordenação do vector por ordem crescente e decrescente, para se ter o maior e o menor numero.

PS: Não tenho a certeza se funciona porque 1º Não o testei, 2º Tenho duvidas quanto à sintaxe dos procedimentos "delete" e "val", nao me lembro ao certo do numero de parametros que eles pedem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em que curso tás páh? Também tive que fazer este programa, mas tinha k finalizar com ***.

Cumps 8)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Isso do curso é um pouco offtopic não achas? já ouviste falar em PM ?

Que palavra não percebeste Sota ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora