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

Sign in to follow this  
Sota

duvida com matrizes

Recommended Posts

Sota

Boas.

Tou com um problema que é o seguinte preciso de pegar num mabriz predefenida que depois vai ser alterada pelo utilizador.

se alguem nao tiver aperceber a minha duvida e tento me explicar melhor.

comprimentos

Share this post


Link to post
Share on other sites
Warrior

Não percebi bem qual é o teu problema.

Se desses um exemplo, ou dissesses melhor qual é o problema em si.. não consegues ler a matriz? não consegues alterar? especifica

Share this post


Link to post
Share on other sites
Sota

et e o seguinte o trabalho que tenho de fazer é o seguinte eu tenho um

horario de comboios:
    441     442     443     444     445     446 
A| 9:10                        15:35             7:40 
B|    |       10:30           17:50               | 
C| 11:20   11:10              |                   | 
D|    |         |              19:00    9:30       | 
E|    |      13:40                       20:40     | 
F| 14:00                                 21:50    11:00 

em que a letras sao as estaçoes e e os numeros os combois. O meu problema tá agr em construir

um programa que dê a possibilidade de se editar o horário do exemplo dado, conhecido em tempo de compilação. Até ao momento em que explicite o desejo de terminar a execução, o utilizador poderá ir escolhendo qualquer das seguintes operações elementares:

1)Apagar, no horário, a informação relativa a um dado comboio e uma dada estação. Com esta operação garante-se que este comboio não passará na estação indicada.

2)Suprimir a paragem de um dado comboio numa dada estação. O resultado desta operação será a substituição do respectivo horário pelo símbolo '|'.

3)Modificar o horário de um dado comboio numa dada estação. Se for o caso, esta operação também pode estender o percurso do comboio a essa estação ou forçar uma paragem que não existia antes.

Partindo do horário dado e imaginando que os caracteres 'A', 'S' e 'M' são os comandos, respectivamente, das operações referidas nas alíneas 1), 2) e 3), a seguinte sequência possível de caracteres introduzidos pelo teclado (sendo ¿ um "enter"):

A ¿ F ¿ 445 ¿ M ¿ D ¿ 441 ¿ 11 ¿ 15 ¿ M ¿ C ¿ 443 ¿ 8 ¿ 5 ¿ M ¿ D ¿ 443 ¿ 9 ¿ 20 ¿ M ¿ E ¿ 443 ¿ 10 ¿ 45 ¿ S ¿ D ¿ 443 ¿ M ¿ C¿ 446¿ 9 ¿ 30

daria origem ao horário mostrado de seguida, perfeitamente aceite pelo programa segundo as hipóteses anteriormente estipuladas, apesar de existir agora uma impossibilidade prática do comboio 441 vir a cumprir o novo percurso:

HORÁRIO DOS COMBOIOS NA LINHA A -> F 

   441     442      443      444     445     446 
A| 9:10                         15:35             7:40 
B|   |      10:30              17:50               | 
C| 11:20 11:10    8:05       |                 9:30 
D| 11:15    |           |      19:00  19:30     | 
E|    |    13:40     10:45              20:40    | 
F| 14:00                                              11:00 

so que nao sei como fazer tou mm a tona se alguem me podesse dar uma ajuda é que ando aqui as voltas e nao sei por onde começar e que ainda nao csg perceber tambem como se utiliza a funçao record mto bem

comprimentos para todos.

Share this post


Link to post
Share on other sites
Warrior

Depois de teres lido e gravado a matriz, fazes um menu de opções chamando procedimentos do genero

repeat
clrscr;
writeln('A. Alterar');
writeln('S. Suprimir');
writeln('M. Modificar');
writeln('0. Sair');
case readkey of
'A': alterar;
'B': suprimir;
'M': modificar;
'0': halt(0)
end;

Depois é só criar os procedimentos que vão ler o resto dos parametros (no caso do apagar por exemplo, ler a estação e o comboio) e fazer as operações na matriz.

Acho que tinhas duvidas na forma como estruturar e começar, portanto deixo as operações para ti (depende muito da forma como tiveres a guardar a informação na matriz)

Share this post


Link to post
Share on other sites
Sota

pois so que o meu problema e mm como vou estruturar a matriz :S

Do genero como intruduzo o horario no pascal e depois o seguidamente como alterar :S eu sei pouco de pascal tou hoje a pesquisar etc

Share this post


Link to post
Share on other sites
Sota

axo que ja sei so que vai dar uma coisas assim:

var hor : array [A..F,441..446]of integer;
procedure incrementarvalores;
begin
hor[A,441]:=9:10
hor[A,442]:=
hor[A,442]:=
hor[A,442]:=
...

Share this post


Link to post
Share on other sites
Warrior

Não pode ser assim, porque declarando a matriz como inteira ("of integer") não podes fazer 'a'..'f'.

Eu talvez resolvesse assim:

- Criava um vector para guardar as estações ([1..26] of char)

- Criava um vector para guardar os comboios ([1..NumeroMaximoDeComboios] of integer (talvez limitasse a 100))

- Matriz [1..26,1..NumeroMaximoDeComboios] of string (tratava o horario (está na forma hh:mm) como strings)

Depois depende de como os dados são inseridos..

Eu não faço ideia de como é o input, mas se for exactamente como colocaste no inicio, começava por ler a primeira linha, separar as estações, e coloca-las no vector das estações, depois fazia o resto da leitura por sentinela, pode ser por exemplo while (not eof) (até o ficheiro de input acabar) se for algum programa a testar o codigo, ou entao outra forma qualquer (como é que se sabe que o utilizador nao quer introduzir mais dados? isso nao foi dito no enunciado).

Gravava a estação (nome, neste caso "Letra") no vector das estações, e depois o horario ia gravando na matriz.

Se disseres ao certo como é o input é mais facil (por exemplo, nao me parece que sejam usados "tabs" no input, e ali tens)

Share this post


Link to post
Share on other sites
Sota

bom et eu deixo aqui o enuciado todo secalhar é melhor:

Uma determinada empresa de caminhos de ferro possui uma linha que liga diversas estações, sendo estas identificadas por letras maiúsculas consecutivas. Pretende-se fazer, por via informática, a edição interactiva do horário dos comboios naquela linha, não havendo distinção, para uma mesma estação não terminal, entre horas de chegada e horas de partida. O resultado de cada passo da edição deverá ser visualizado no ecrã do computador, na forma mostrada pelo exemplo seguinte:

HORÁRIO DOS COMBOIOS NA LINHA A -> F

441 442 443 444 445 446

A| 9:10 15:35 7:40

B| | 10:30 17:50 |

C| 11:20 11:10 | |

D| | | 19:00 19:30 |

E| | 13:40 20:40 |

F| 14:00 21:50 11:00

Os comboios são designados por números inteiros consecutivos, as horas exprimem-se por valores de 0 a 24 e os minutos ocupam sempre duas posições de escrita. Por hipótese, qualquer operação elementar de edição do horário apenas incidirá na modificação da informação a ser apresentada para um dado comboio e uma dada estação. Como consequência, será necessário proceder-se a uma sequência de várias operações elementares para a actualização de um horário envolvendo vários comboios ou estações.

Construa um programa que dê a possibilidade de se editar o horário do exemplo dado, conhecido em tempo de compilação. Até ao momento em que explicite o desejo de terminar a execução, o utilizador poderá ir escolhendo qualquer das seguintes operações elementares:

Apagar, no horário, a informação relativa a um dado comboio e uma dada estação. Com esta operação garante-se que este comboio não passará na estação indicada.

Suprimir a paragem de um dado comboio numa dada estação. O resultado desta operação será a substituição do respectivo horário pelo símbolo '|'.

Modificar o horário de um dado comboio numa dada estação. Se for o caso, esta operação também pode estender o percurso do comboio a essa estação ou forçar uma paragem que não existia antes.

Parte-se do princípio de que o horário inicial está correcto e é coerente. Por exemplo, cada comboio apresenta um percurso sem descontinuidades entre estações. As operações elementares só deverão ser executadas se forem válidas, havendo que informar o utilizador em caso contrário. Garante-se, desta forma, que o horário editado permanecerá correcto. Para não tornar o programa demasiado complexo, há, no entanto, um tipo de validação que não será exigido: que, para um dado comboio, as horas atribuídas se mantenham em sequência crescente. Por outro lado, também não se considera erro a substituição de um valor por esse mesmo valor (por exemplo, ao tentar-se eliminar uma estação do percurso dum comboio que não passa nessa estação).

Admite-se que possa haver comboios desactivados (como o 443 do exemplo) ou que tenham apenas uma estação como percurso (neste caso obrigatoriamente com horas e minutos atribuídos). Deste modo será possível criar-se qualquer configuração horária a partir de um horário completamente vazio.

Seguem-se duas regras a ter em conta no processo de edição e que são do conhecimento geral das pessoas familiarizadas com a consulta de horários de caminhos de ferro:

Para cada comboio existe um só percurso, que não deve apresentar qualquer descontinuidade entre estações.

O percurso de qualquer comboio não deve começar nem acabar com o símbolo '|'.

Partindo do horário dado e imaginando que os caracteres 'A', 'S' e 'M' são os comandos, respectivamente, das operações referidas nas alíneas 1), 2) e 3), a seguinte sequência possível de caracteres introduzidos pelo teclado (sendo ¿ um "enter"):

A ¿ F ¿ 445 ¿ M ¿ D ¿ 441 ¿ 11 ¿ 15 ¿ M ¿ C ¿ 443 ¿ 8 ¿ 5 ¿ M ¿ D ¿ 443 ¿ 9 ¿ 20 ¿ M ¿ E ¿ 443 ¿ 10 ¿ 45 ¿ S ¿ D ¿ 443 ¿ M ¿ C¿ 446¿ 9 ¿ 30

daria origem ao horário mostrado de seguida, perfeitamente aceite pelo programa segundo as hipóteses anteriormente estipuladas, apesar de existir agora uma impossibilidade prática do comboio 441 vir a cumprir o novo percurso:

HORÁRIO DOS COMBOIOS NA LINHA A -> F

441 442 443 444 445 446

A| 9:10 15:35 7:40

B| | 10:30 17:50 |

C| 11:20 11:10 8:05 | 9:30

D| 11:15 | | 19:00 19:30 |

E| | 13:40 10:45 20:40 |

F| 14:00 11:00

Share this post


Link to post
Share on other sites
GpL
Afinal como é k se altera as cenas dentro das matrizes

tipo tens este array exemplo[0..20] of integer;

para guardares ou alterares a posição 1 fazes exemplo[1]:=5; (podia ser outro inteiro qualquer em vez de 5..)

Share this post


Link to post
Share on other sites
Sota
type horario = record

para: string [6];

npassa:char ;

end;

tipohorario = array ['A'..'F',441..446] of horario;

var hor : tipohorario;

f:char;

procedure tabela ;

var x:char; y: integer;

begin

for x:='A' to 'F' do

for y:=441 to 446 do

hor[x,y].npassa:= '0' ;

hor['A',441].para:= '09:10';

hor['A',444].para:='15:35 ';

hor['A',446].para:=' 07:40';

hor['B',442].para:= '10:30';

hor['B',444].para:=' 17:50';

hor['C',441].para:= '11:20';

hor['C',442].para:= '11:10';

hor['D',444].para:= '19:00';

hor['D',445].para:= '19:30';

hor['E',442].para:= '13:40';

hor['E',445].para:= '20:40';

hor['F',441].para:= '14:00';

hor['F',445].para:= '21:50';

hor['F',446].para:= '11:00';

hor['B',441].para:= '|';

hor['D',441].para:= '|';

hor['E',441].para:= '|';

hor['D',442].para:= '|';

hor['C',444].para:= '|';

hor['B',446].para:= '|';

hor['C',446].para:= '|';

hor['D',446].para:= '|';

hor['E',446].para:= '|';

end;
tipo ja tenho a tabla feita so que agr falatame fazer a funçoes de apagar suprimir  e modificar
eu tenho estas duas ja feitas
[code]procedure apagar;
var x: integer; e,c:char;
begin
     writeln('insira a estação');
     read (e);
     writeln('insira o comboio');
     readln(c);
     if (ORD(e) < 65) or (ord(e)> 70) then
        writeln('ERRO ESSA ESTAÇÃO NAO EXISTE')
     else
     begin
          if hor[chr(ord( e )+1),c].para <> '' then
             writeln('ERRO NAO PODE APAGAR ESSA PARAGEM')
          else
              hor[e,c]:='';
          x:=0;
          while (hor[chr(ord( e )-x),c] = '|') do
          begin
                hor[chr(ord( e )-x),c]:='';
                x:=x-1;
          end;
     end;
     while (hor[chr(ord( e )-x),c] = '|') do
     begin
          hor[chr(ord( e )-x),c]:='';             (*duvida*)
          x:=x-1;
     end;
end;
procedure suprimir;
var e,c:char;
begin
     writeln('insira a estação');
     read (e);
     writeln('insira o comboio');
     readln(c);
     if (ORD (e) < 65) or (ord (e) > 70) then
        writeln('ERRO ESSA ESTAÇÃO NAO EXISTE');
     else
         begin
              if (hor[chr(ord +1),c].para = '') or (hor[chr(ord -1),c].para = '') then
                 writeln('ERRO NAO PODE SUPRIMIR ESSA PARAGEM');
              else
                  hor[e,c].para:='|';
         end;

mas diz que error mitch match:s alguem me podia ajudar

Share this post


Link to post
Share on other sites
GpL

dá esse erro onde ? esse é o tipo de erro que acontece quando declaras uma variavel dum tipo e tentas dar lhe valores de outro tipo.

Share this post


Link to post
Share on other sites
Sota

if hor[chr(ord( e )+1),c] <> '' then

hor[e,c]:='';

while (hor[chr(ord( e )-x),c] = '|') do

while (hor[chr(ord( e )-x),c] = '|') do

nestes sitios

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  

×

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.