Jump to content

Input


epolozero
 Share

Recommended Posts

Se usares o readln com múltiplas variáveis, podes fazer isso.

var
 i1, i2, i3, i4, i5;

begin
  readln(i1, i2, i3, i4, i5);
.
.
.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Se usares o readln com múltiplas variáveis, podes fazer isso.

var
 i1, i2, i3, i4, i5;

begin
  readln(i1, i2, i3, i4, i5);
.
.
.

Mas eu nao sei quantos i´s tenho, esse e o problema posso querer ler n numeros .

primeiro posso querer adicionar no input 1 2 3 e quero quardar as variaveis em um vetor mas depois posso querer fazer o input de 1 2 3 4 5 6 7.

Basicamente quero isto:

enquanto nao pressionar Enter fazer:

ler(A)

Link to comment
Share on other sites

Então faz a leitura numa string, e depois processa-a, passando os dados, enquanto houverem, para as variáveis integer.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Só o 90?

Depende do que entendes aqui por 90:

É o quarto valor? Ou é por ser mesmo 90?

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

De qualquer maneira, o processamento de strings, para este efeito, precisa de:

Copy (função que copia parte de uma string)

Pos (funçao que procura uma substring dentro de uma string)

Delete (procedimento que apaga parte de uma string)

StrToInt (função que converte uma string composta de números em um integer)

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

De qualquer maneira, o processamento de strings, para este efeito, precisa de:

Copy (função que copia parte de uma string)

Pos (funçao que procura uma substring dentro de uma string)

Delete (procedimento que apaga parte de uma string)

StrToInt (função que converte uma string composta de números em um integer)

é isso copy, obrigado

Link to comment
Share on other sites

Alguém me pode dar ideias para fazer o input, nao estou a conseguir ler os numeros?

O problema

Dado um conjunto de números diferentes, qual será o par de números que tem uma menor diferença entre si? Ou, dito de outro modo, qual será o par de números mais "próximo" um do outro?

Por exemplo, imagina os números 5 8 1 4 7. O par de números mais próximo é o 4 e o 5, que têm uma diferença entre si de 1.

A tua tarefa é precisamente receber um conjunto de números, descobrir o par que tem menor diferença e escrever essa diferença.

Input

A primeira linha de input contém um número N (1 ≤ N ≤ 100), que corresponde ao número de casos a processar.

Seguem-se exactamente N linhas. Cada uma dessas linhas começa por conter K (2 ≤ K ≤ 1000). Depois vêm exactamente K números, indicando o conjunto de números a considerar (é garantido que não aparecem números iguais e que os números são inteiros positivos menores que um milhão).

Vê o exemplo, para esclarecer eventuais dúvidas, sendo que o primeiro caso a processar corresponde ao exemplo dado em cima.

Output

O output deve conter no início uma única linha contendo o número N.

Devem-se seguir-se N linhas contendo cada uma a diferença mínima encontrada entre um par de números, como descrito atrás. Nota que esta diferença deve ser sempre um número positivo. Se existirem vários pares com a mesma diferença mínima, não faz mal, pois irás imprimir precisamente só o valor dessa diferença.

Exemplo de input/

Input

3

5 5 8 1 4 7

3 1 3 5

4 8 4 2 1

1

2

1

Edited by nunopicado
Ajuste de formatação, tipo de letra
Link to comment
Share on other sites

Nao sei porque mas isto nao fica identado

readln(n);

for i:=1 to n do
begin
readln(aux[i]);
end;



aux1:=0;


for i:=1 to n do //percorre as n linhas
begin
entrou:=false;
for a:=1 to length(Aux[i]) do //percorre o array de char
begin
if ((entrou=false) and (Aux[i][a]<>' ')) then
begin
entrou:=true;
ini:=a;
end;

if Aux[i][a]<>' ' then
begin
fin:=a;
end
else
begin
if entrou then
begin
aux1:=aux1+1;
auxx[aux1]:=copy(Aux[i],ini,fin);
write(auxx[aux1]);
readln;
entrou:=false;
end;
end;
end;
end;
Edited by epolozero
Link to comment
Share on other sites

Juntei os tópicos porque o problema é o mesmo...

Como se dizia em cima, tens de criar uma função, reutilizavel, que te processe o input, que poderás fazer para uma string.

Assim, em pseudo-codigo:

1º Le numero de casos

2º Le uma string x numero de casos

3º Percorre todas as strings. Para cada uma:

a) Le o primeiro valor (n)

b) a partir do 2º valor até n, vai lendo valores, e passa-os para um array

c) Verifica as diferenças

d) apresenta os resultados

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

for i:=1 to n do	 //percorre as n linhas
begin
entrou:=false;
for a:=1 to length(Aux[i]) do  //percorre o array de char
begin
 if  ((entrou=false) and (Aux[i][a]<>' '))  then
 begin
  entrou:=true;
  ini:=a;
 end;

 if Aux[i][a]<>' ' then
 begin
  fin:=a;
 end
  else
  begin
if entrou then
begin
 aux1:=aux1+1;
 auxx[aux1]:=copy(Aux[i],ini,fin);
 write(auxx[aux1]);
 readln;
 entrou:=false;
end;
  end;
end;
end;

Juntei os tópicos porque o problema é o mesmo...

Como se dizia em cima, tens de criar uma função, reutilizavel, que te processe o input, que poderás fazer para uma string.

Assim, em pseudo-codigo:

1º Le numero de casos

2º Le uma string x numero de casos

3º Percorre todas as strings. Para cada uma:

a) Le o primeiro valor (n)

b) a partir do 2º valor até n, vai lendo valores, e passa-os para um array

c) Verifica as diferenças

d) apresenta os resultados

Nao estou é a conseguir percorrer o array e passar os valores para inteiro

Edited by epolozero
Link to comment
Share on other sites

Nao estou é a conseguir percorrer o array e passar os valores para inteiro

Que tal ir vendo um caracter de cada vez, ir guardando numa strings auxiliar, e quando aparece um espaço guarda-se na array, limpa-se a auxiliar e recomeça, isto até ao fim da string?

Cuidado com os casos em que aparece dois espaços e com o fim da string.

E para quê ler a string numa array? A array tem é de ser de inteiros, a leitura de cada linha é numa string.

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Que tal ir vendo um caracter de cada vez, ir guardando numa strings auxiliar, e quando aparece um espaço guarda-se na array, limpa-se a auxiliar e recomeça, isto até ao fim da string?

Cuidado com os casos em que aparece dois espaços e com o fim da string.

E para quê ler a string numa array? A array tem é de ser de inteiros, a leitura de cada linha é numa string.

Tem que ser a string num array porque o input tem n linhas, mas vou tentar fazer como disseste

Link to comment
Share on other sites

Começa por perceber a estrutura da string:

tens uma série de numeros, separados por espaços, terminados em... nada!

Isto quer dizer que cada valor termina com um espaço, excepto o último.

Ora, eu como gosto pouco de surpresas, o que recomendo:

1º Certificares-te que não há espaços no inicio da string. Para isso, usas a função Trim. (Ex.: s:=Trim(s)😉

2º Certificares-te que entre cada valor só existe realmente um espaço. É muito fácil alguém enganar-se e por 2, e como são espaços, não se dão ao trabalho de corrigir. Para isso, usas uma função chamada StringReplace, e manda-a substituir todos os conjuntos de 2 espaços, por apenas 1 (ex.: s:=StringReplace(s,' ',' ',[rfReplaceAll]);

3º Certificares-te que todos os valores acabam da mesma forma. Para isso, basta adicionares um espaço ao fim.

Depois, dentro de um while, usas um pos para detectar a posição do primeiro espaço. Sabendo isso, usas o Copy para extrair esse valor para uma variável string de apoio, o trim para lhe remover os espaços, deixando apenas valores numéricos, e o StrToInt para converter esse valor para integer.

Por fim, apagas a string, desde o 1º caracter, até ao 1º espaço.

Depois volta a fazer tudo de novo, até que a string não tenha caracteres nenhuns...

E para quê ler a string numa array? A array tem é de ser de inteiros, a leitura de cada linha é numa string.

Porque ele tem de ler n strings antes de começar a processar...

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Uma coisa é o input, outra é guardar os dados.

Tu vais ler isto:

2
1 2 3 4
5 6 7

Não precisas de guardar as strings "1 2 3 4" e "5 6 7" numa array. A string é algo temporário para poderes analisar o input.

Durante a análise é que vais guardar os valores numa array à parte.

Portanto, não mistures alhos com bogalhos.

Um trecho de código para começares:

var linha : string;
   qtd : integer;
   valores : array [1..10, 1..20] of integer; // máx 10 linhas, 20 números por linha

//...

readln(qtd);
for i:=1 to qtd do begin
  readln(linha);

  { analisar "linha" aqui, guardando os valores }
end;

Porque ele tem de ler n strings antes de começar a processar...

São formas de fazer a análise. A minha passa por uma estratégia diferente.

Edited by thoga31

Knowledge is free!

Link to comment
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
 Share

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