Recent

Author Topic: Help please  (Read 14467 times)

Derian

  • New Member
  • *
  • Posts: 20
Help please
« on: September 22, 2014, 03:02:08 am »
i've been trying to find out what's wrong with my program(to invert a string) :

program invert;
 var y,i,c : integer;
 cad,aux,suma: string;
begin
writeln('entry char');
readln(cad);
suma:=' ';
aux:=' ';
y:=length(cad);
for i:=1 to y do
 cad:=aux[y-i+1];                                            (line 13)
for c:=1 to y do
suma:= suma + aux[c];
write('the inverted string is',suma);
end.

Project "project1"  succesfully built


the error what i get is : Project project1 raised exception class 'External:SIGSEV'.
In file
'C:\Users\Derian\AppData\Local\Temp\project1.lpr' at line 13

Derian

  • New Member
  • *
  • Posts: 20
Re: Help please
« Reply #1 on: September 22, 2014, 03:04:48 am »
in line 13 it says  cad [  i ] :=aux[y-i+1];
« Last Edit: September 22, 2014, 03:06:31 am by Derian »

engkin

  • Hero Member
  • *****
  • Posts: 3112
Re: Help please
« Reply #2 on: September 22, 2014, 03:12:07 am »
Notice that:
Code: [Select]
aux:=' ';
means any access to aux[?] is going to cause an error.

Before you get something from aux, you need to put something in first. Maybe you mean to use "cad" instead of "aux"?
« Last Edit: September 22, 2014, 03:14:28 am by engkin »

Derian

  • New Member
  • *
  • Posts: 20
Re: Help please
« Reply #3 on: September 22, 2014, 03:15:42 am »
aux is an empty string , where i am going to put the invert string

engkin

  • Hero Member
  • *****
  • Posts: 3112
Re: Help please
« Reply #4 on: September 22, 2014, 03:17:42 am »
But on line 13, aux is empty and you are reading from it!

taazz

  • Hero Member
  • *****
  • Posts: 5368
Re: Help please
« Reply #5 on: September 22, 2014, 03:19:30 am »
as it is now you try to put it in cad. an empty string means no data at all if you want to have something give it a length first eg call setlength(aux,length(cad)); that will give it enough memory for you to put things in it.
Good judgement is the result of experience … Experience is the result of bad judgement.

OS : Windows 7 64 bit
Laz: Lazarus 1.4.4 FPC 2.6.4 i386-win32-win32/win64

Derian

  • New Member
  • *
  • Posts: 20
Re: Help please
« Reply #6 on: September 22, 2014, 03:20:55 am »
well i tried this :
program invert;
 var y,i,c : integer;
 cad,aux,suma: string;
begin
writeln('entry char');
readln(cad);
suma:=' ';
y:=length(cad);
for i:=1 to y do
 cad[ i ]:=aux[y-i+1];
for c:=1 to y do
suma:= suma + aux[c];
write('the inverted string is',suma);
end.
 
i get the same error in the same line

engkin

  • Hero Member
  • *****
  • Posts: 3112
Re: Help please
« Reply #7 on: September 22, 2014, 03:23:36 am »
@Taazz
It is not empty, it has a space. We did not see it because the code is not enclosed in [ code ] section. So aux has a length for one char

@Derian
This line: cad[ i ]:=aux[y-i+1]; means take one char from aux at y-i+1 and put it in cad at i. Is that what you want?

Derian

  • New Member
  • *
  • Posts: 20
Re: Help please
« Reply #8 on: September 22, 2014, 03:27:27 am »
eg
if cad = hello
cad[1]:= aux[5-1+1]
then the 1st char from cad would be the last for aux
cad[2]:=aux[5-2+1]
2nd char would be the 4th chat of aux .....
 i try to get this
cad = hello
aux = olleh

engkin

  • Hero Member
  • *****
  • Posts: 3112
Re: Help please
« Reply #9 on: September 22, 2014, 03:32:33 am »
if cad = hello
cad[1]:= aux[5-1+1]
then the 1st char from cad would be the last for aux

That's not correct. An assignment ":=" changes the left side not the right side. cad[1] will get changed if there is any thing in aux at [5-1+1] or [5], not the opposite. AND you have another problem, aux has only one char. So using [5] on aux will give you an error.

ChrisF

  • Hero Member
  • *****
  • Posts: 542
Re: Help please
« Reply #10 on: September 22, 2014, 03:33:11 am »
Replace
Code: [Select]
for i:=1 to y do
 cad[ i ]:=aux[y-i+1];

with
Code: [Select]
setlength(aux,y);
for i:=1 to y do
 aux[ i ]:=cad[y-i+1];

No need to say it's a very complicated way to get this result...

Derian

  • New Member
  • *
  • Posts: 20
Re: Help please
« Reply #11 on: September 22, 2014, 03:43:15 am »
 program invert;
 var y,i,c : integer;
 cad,aux: string;
begin
writeln('entry char');
readln(cad);
y:=length(cad);
setlength(aux,y);
for i:=1 to y do
 aux[ i ]:=cad[y-i+1];
writeln('the invert string is',aux)
end.

now i get another error :     unit1.pas(1,1) Fatal: Syntax error, "UNIT" expected but "PROGRAM" found
       

engkin

  • Hero Member
  • *****
  • Posts: 3112
Re: Help please
« Reply #12 on: September 22, 2014, 03:48:31 am »
Start a new application:
Project - New Project - choose Simple Program, then paste your code in.

Derian

  • New Member
  • *
  • Posts: 20
Re: Help please
« Reply #13 on: September 22, 2014, 03:57:55 am »
this is my final code:
program project3;
 var y,i : integer;
 cad,aux,inv: string;
begin
writeln('entry char');
readln(cad);
y:=length(cad);
setlength(aux,y);
for i:=1 to y do
aux[ i ]:=cad[y-i+1];
inv:=aux;
writeln('the invert string is ',inv)
end.
 
it runs perfectly now , thank you all , sorry if ive been annoying                 
« Last Edit: September 22, 2014, 04:01:21 am by Derian »

engkin

  • Hero Member
  • *****
  • Posts: 3112
Re: Help please
« Reply #14 on: September 22, 2014, 04:16:36 am »
Well done! and welcome to Lazarus/FPC.

 

TinyPortal © 2005-2018