Jump to content
Sign in to follow this  
Sota

Array é um trabalho lixado

Recommended Posts

Sota

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.

Share this post


Link to post
Share on other sites
deathseeker25

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

Share this post


Link to post
Share on other sites
GpL

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.

Share this post


Link to post
Share on other sites
Sota

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

Share this post


Link to post
Share on other sites
GpL

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.

Share this post


Link to post
Share on other sites
Sota

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

Share this post


Link to post
Share on other sites
will09

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 ;)

Share this post


Link to post
Share on other sites
GpL

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

Share this post


Link to post
Share on other sites
Warrior

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.

Share this post


Link to post
Share on other sites
GpL
Isso do curso é um pouco offtopic não achas? já ouviste falar em PM ?

Que palavra não percebeste Sota ?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.