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

Sota

duvida com matrizes

13 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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]:=
...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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..)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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