Duda programacion Pascal

Tengo un problema.
Tengo que meter numeros en una matriz. pero el tema es k los tengo k meter fila por fila del tiron. Es decir, el programa me dice:
"introduce la primera fila" y yo tengo k escribir por ejemplo "1 2 3 4 5" pulsar enter y k eso se meta en la primera fila. Hay alguna instruccion para hacer eso de golpe, sin tener k rayarme en exceso? Porque yo lo se hacer metiendo elemento por elemento, pero asi todo del tiron... pues ya lo veo mas complicao. gracias de antemano.

EDITO: Por si sirve de algo, esto pone despues.
"Es fundamental que el programa desarrolado emplee la forma acordada para introducir la matrices y, por tanto, cada fila de la matriz se deberá leer con una intruccion read(var)".

RE-EDITO: no necesito codigo en pascal. solamente saber como se hace mas o menos y listo.
Bueno, yo no se pascal pero si se programacion lo unico que te puedo decir es que si en Pascal hay alguna instruccion para analizar una cadena y sacar una parte de ella (o sea en este caso seria el 1 o el 2, etc) pues creas 5 variables alfanumericas y vas metiendo los numeros (una vez transformados a variables numericas). En basic, por ejemplo habia una instruccion que te pillaba los 2 primeros caracteres de la cadena o los que le dijeses en los parametros de la instruccion, pues en pascal si hay alguna instruccion parecida lo puedes hader. No se si me has entendido la verdad no se si en Pascal se podra hacer, a ver si algun entendido en el lenguaje lo confirma.

salu2.
GATOtico escribió:Bueno, yo no se pascal pero si se programacion lo unico que te puedo decir es que si en Pascal hay alguna instruccion para analizar una cadena y sacar una parte de ella (o sea en este caso seria el 1 o el 2, etc) pues creas 5 variables alfanumericas y vas metiendo los numeros (una vez transformados a variables numericas). En basic, por ejemplo habia una instruccion que te pillaba los 2 primeros caracteres de la cadena o los que le dijeses en los parametros de la instruccion, pues en pascal si hay alguna instruccion parecida lo puedes hader. No se si me has entendido la verdad no se si en Pascal se podra hacer, a ver si algun entendido en el lenguaje lo confirma.

salu2.


No hay ninguna instruccion que permita eso. Supongo k lo k tendre que hacer es ir leyendo hasta cada espacio e irlo almacenando. o algo asi... pero.... de esa manera tendria k intrucir la fila en un string y luego y forzando cada numero a ser un integer. eso como lo hago? creo k tengo una ligera idea de como se hace, pero no estoy seguro. si alguien me puede ayudar...
Pues no se que decirte, porque sin instrucciones que traten cadenas... no se, si almacenas la cadena en una variable, tiene que haber alguna forma en Pascal de "partir" esa cadena en otras, no se ¿En pascal no se usan los bucles tipo "for" ? si se usan pues no es muy dificil, puedes ir sacando cada caracter o cada espacio....
No se si sera algo como esto. :S

var
Fila, tmp: string;
i: integer;
Numero[0..65536]: array of integer;
begin
  i := -1;
  // Suponiendo que en Fila tenemos ya una fila con numeros separados por espacios
repeat
  i := i+1;
  // Copiamos hasta al siguiente espacio
  tmp := Copy(Fila, 0, pos(' ', Fila)-1);
  // Borramos lo copiado
  Delete(Fila, 1, pos(' ', Fila));
  // Convertimos el string en un integer y lo almacenamos
  Numero[i] := StrToInt(tmp);
until
  // La accion se repite hasta que no haya ningun espacio mas
  posex(' ', Fila) = -1;
end;


No se si eso rulara xD
Bueno, aunque no entiendo el lenguaje al 100 por cien, ese codigo va por muy buen camino [oki] , pero ¿¿no me decias ant0n que no habia instrucciones para manejar cadenas??? [enfa]
GATOtico escribió:Bueno, aunque no entiendo el lenguaje al 100 por cien, ese codigo va por muy buen camino , pero ¿¿no me decias ant0n que no habia instrucciones para manejar cadenas???


Lo que yo decia es que no habia ninguna instruccion predefinida para hacr todo eso.


Waninkoko escribió:No se si sera algo como esto. :S

var
Fila, tmp: string;
i: integer;
Numero[0..65536]: array of integer;
begin
  i := -1;
  // Suponiendo que en Fila tenemos ya una fila con numeros separados por espacios
repeat
  i := i+1;
  // Copiamos hasta al siguiente espacio
  tmp := Copy(Fila, 0, pos(' ', Fila)-1);
  // Borramos lo copiado
  Delete(Fila, 1, pos(' ', Fila));
  // Convertimos el string en un integer y lo almacenamos
  Numero[i] := StrToInt(tmp);
until
  // La accion se repite hasta que no haya ningun espacio mas
  posex(' ', Fila) = -1;
end;


No se si eso rulara xD


El que yo tengo es mu parecido. solo m faltaba esa duda d como forzar el tipo d dato a integer.

Pero ahora tengo otro problema. Como se cuando se termina el string? es decir por ejemplo en C si no ocupas todas las posiciones pues se pone al final el \0 pero en pascal no se. No se si me he explicado bien. A ver si m podeis exar un cable. Gracias por todo ya:D

EDITO:Este es l codigo que tengo pero aun no va... m da error al forzar el tipo. n el strtoint ese.

procedure LeerMatriz(var mat:tmatriz; var N:integer);
Var aux1, aux2: integer;
Var fil,aux3: string;
Begin
For aux:=1 to N do
Begin
Write('Introduzca la fila ', aux1,' de la matriz:');
Readln(fil);
For aux2:=1 to N do
Begin
aux3:=copy(fil,1,pos(' ' , fil)-1);
delete(fil,1,pos(' ',fil));
mat[aux1, aux2] := StrToInt(aux3);
End;
End;
End;
Waninkoko escribió:Prueba Str2Int.


Simplemente cambiar StrToInt por Str2Int?

El resto del codigo que tal lo veis?

EDITO: el str2Int tp m lo deja emplear :S
me dice "Identifier not found STR2INT"
function Str2Real(S: string) : Real;
var
Code, I: Word;
SLen: Byte absolute S;
R: real;
begin
while S[SLen] = ' ' do
  Dec(SLen);

Val(S, R, Code);
if Code <> 0 then
  raise EConvertError.Create('Error al convertir de String a Real.')
else
  Str2Real := R;
end;


A ver si te rula esto. Te convierte un String a Real.
Waninkoko escribió:
function Str2Real(S: string) : Real;
var
Code, I: Word;
SLen: Byte absolute S;
R: real;
begin
while S[SLen] = ' ' do
  Dec(SLen);

Val(S, R, Code);
if Code <> 0 then
  raise EConvertError.Create('Error al convertir de String a Real.')
else
  Str2Real := R;
end;


A ver si te rula esto. Te convierte un String a Real.



Muxas gracias... pero... no m vale. Podria valer pero es que eso sabe que yo no lo iba a hacer y no va a colar entre otras. Me han dicho otra manera. Que es que cuando tu metes el string esos datos kedan almacenados en el bufer tonces... puedes ir leyendolos desde ahi e irlos almacenando. Es decir tu en lugar d como string lo metes como integer igualmente y metes '1 2 3 4 5'
eso keda en el bufer. y luego vas metiendo cada uno por separado en la matriz. de todas formas, aun asi no lo se aces asi. pero gracias igualmente :D
Joder, como puede ser tan complicado eso xDDDD Me rindo xDDD

Una pregunta, ¿que programa utilizas para compilar el codigo?
Waninkoko escribió:Joder, como puede ser tan complicado eso xDDDD Me rindo xDDD

Una pregunta, ¿que programa utilizas para compilar el codigo?


Free Pascal. No he probado ningun otro programa.
El codigo anterior a parte d lo dicho no m funcionaba el raise. daba error. pero bueno, que esa linea podia ser sustituida.
Juas lo que no entiendo es como puede ser tan dificil, en Cobol [tomaaa] por ejemplo, es facilisimo hacer eso, me niego a creer que el Pascal que es de la misma quinta o incluso mas antiguo...... [comor?] sea tan complicadillo........ en basic por ejemplo tambien es mu facil.. en el codigo de Waninkoko quiza falte algun identificador de retorno de carro, que no se si de nuevo en Pascal se puede utilizar, en caso afirmativo pues al encontrar el caracter retorno de carro (es implicito del sistema) deberia parar... nuse, quiza deberias visitar alguna pagina dedicada a pascal por lo que somos nosotros... juas, nos queda muxo por aprender... [nop] ;)
GATOtico escribió:Juas lo que no entiendo es como puede ser tan dificil, en Cobol [tomaaa] por ejemplo, es facilisimo hacer eso, me niego a creer que el Pascal que es de la misma quinta o incluso mas antiguo...... [comor?] sea tan complicadillo........ en basic por ejemplo tambien es mu facil.. en el codigo de Waninkoko quiza falte algun identificador de retorno de carro, que no se si de nuevo en Pascal se puede utilizar, en caso afirmativo pues al encontrar el caracter retorno de carro (es implicito del sistema) deberia parar... nuse, quiza deberias visitar alguna pagina dedicada a pascal por lo que somos nosotros... juas, nos queda muxo por aprender... [nop] ;)


Si ya se que es facil. Es decir, lo uniko k m hace falta es pasar d string a integer, pero na. k la mierda esta d compilador d free pascal no trae nada. he mirao por ahi en manuales, y aparece el strtoint y str2int, pero na. Aqui no lo tiene compilao. una puta mierda.
Hola ant0n veo q ere de Ourense, un saludo doutro q estuda aki.

Se segues tendo problemas pa iso do Pascal mira:

Tes unha función q transforma Strings en Integer a súa sintase:

procedure Val(S; var V; var Code: Integer);

donde:

S variable de tipo string; debe ser unha secuencia de caracteres que forman un numero enteiro con signo

V variable entera o real

Code variable de tipo Integer.

Espero haberche axudado e non chegar moi tarde.

Talogo!!
15 respuestas (puedes valorarlas con el botón +1)