يه برنامه به زبان پاسکال مي خوام که يه جمله رو بگيره اسپيساش يا همون بلنک هاشو حذف کنه و دوباره جمله ي اوليه رو و نتيجه رو بتايپه.خودم نوشتم اما error ميده ميشه کمک کنين...
يه برنامه به زبان پاسکال مي خوام که يه جمله رو بگيره اسپيساش يا همون بلنک هاشو حذف کنه و دوباره جمله ي اوليه رو و نتيجه رو بتايپه.خودم نوشتم اما error ميده ميشه کمک کنين...
آخرین ویرایش به وسیله salvariana : جمعه 06 آذر 1388 در 14:33 عصر
پاسکال میخواید یا دلفی؟ برای دلفی می تونید از تابع StringReplace استفاده کنید.
در ضمن، اونی که خودتون نوشتید کجا ست؟ آن را در اینجا قرار بدید، وگرنه تاپیک شما حکم درخواست برنامه یا درخواست حل تمرین را پیدا میکنه، و حذف میشه.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
برنامه اي که نوشتم اينه: واسه پاسکال مي خوام.
program blank;
var
a:array[1..200]of char;
i,n,k,j:integer;
begin
write('enter number of sentences:');
readln(n);
writeln('enter sentences:');
for i:=1 to n do
read(a[i]);
for i:=1 to n do
if a[i]=' ' then
begin
for j:=i to n do
a[j]:=a[j+1];
end;
writeln;
write('the output sentences:');
for i:=1 to n do
write(a[i]);
readln(k);
end.
تو حلقه دوم j+1 از تعداد کاراکتر های a در هنگام j=nبیش تر میشه و خطا می ده .
خب، الان این کد شما که جمله نمیگیره،کارکتر میگیره. اگر میخواید جمله بگیره، باید بجای اون آرایه از string استفاده کنید:
a : string;
اون وقت می تونید a را بصورت یک جمله توسط readln از کاربر بگیرید.
وقتی a را گرفتید، طولش را با استفاده از تابع Length حساب کنید، و با استفاده از یک حلقه for معکوس، عناصر آن را چک کنید، اگر فاصله پیدا کردید، با استفاده از تابع Delete آن را حذف کنید:
Len := Lenght(a);
for i := Len downto 1 do
if a[i] = ' ' then
Delete(a,i,1);
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
با همون حلقه ها بدون استفاده از تابع delete آقای مدیر می تونید بنویسید فقط باید حلقه دوم را تا n-1 ادامه دهید .
اون روش کلا اشکال داره. اگر قرار هست ورودی بصورت کارکتر به کارکتر گرفته بشه، اصلا نیازی به اون حلقه ها نیست، میشه در همان زمان ورود کارکترها وجود فاصله را تشخیص داد، و اگر فاصله ایی وارد شد بود، آن را در آرایه وارد نکرد. اما به همچین کاری دیگه گرفتن جمله و تشخیص وجود فاصله در آن گفته نمیشه!با همون حلقه ها بدون استفاده از تابع delete آقای مدیر می تونید بنویسید فقط باید حلقه دوم را تا n-1 ادامه دهید .
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
ببخشيد اما من اين برنامه و يک برنامه ديگه که از همين روش استفاده مي کنه رو مي نويسم تو پاسکال اما يه error ميده که ; لازمه اونم بعد end e آخر بعد اينو ميذارم ميگه begin مي خواد اونو ميذارم ميگه يه end. مي خواد باز اينو مينويسم error اولي رو ميده
من اين برنامه ها رو فردا بايد تحويل بدم ممنون ميشم کمک کنين.
چون وقت ندارم کدا رو دوباره بنويسم و از داخل پاسکال نميشه کپي کرد فايل.pas ش رو آپلود کردم:
http://www.2shared.com/file/9549264/...fc/SPACE1.html
ممنون ميشم واقعا".
Length خودش یک تابع استاندارد پاسکال هست دیگه چرا تعریفش کردی ؟
این هم کد اصلاح شده :
Program Test;
Uses WinCrt;
var
ST:String;
Len,i:Integer;
begin
Write(' Enter sentences :');
ReadLn(ST);
Len:=Length(ST);
for i:=Len downto 1 do
if st[i]=' ' then
Delete(ST,i,1);
WriteLn;
WriteLn(ST);
ReadLn;
end.
راستی چرا رشته رو از آخر به اول جست و جو کردی ؟
آخرین ویرایش به وسیله Felony : یک شنبه 08 آذر 1388 در 20:09 عصر
مرسييييييييي بالاخره اين يکي درست شد
آخه من داخلturbo pascal 7مينوشتم که crt ايش length رو نميشناسه و error ميده. الان رفتم پاسکال تحت win اين جواب ميداد واقعا" تشکر.
downto رو آقاي کشاورز گفتن فرقي نداره با to البته ...
من هم نگفتم فرق داره فقط میخواستم ببینم که کار خاصی مد نظرتون بوده که اینطور که معلومه دلیل خاصی نداشتید .downto رو آقاي کشاورز گفتن فرقي نداره با to البته ...
برای اینکه میخواد فاصله ها رو از رشته حذف کنه، و با حذف هر کارکتر از رشته، ترتیب ایندکس های بعد از آن کارکتر در رشته تغییر میکنه.راستی چرا رشته رو از آخر به اول جست و جو کردی ؟
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
منظورتون رو کامل متوجه نشدم ،درسته که ایندکس کارکترها تغییر میکنه ولی خوب این کد هم درست کار میکنه :
Program Test;
Uses WinCrt;
var
ST:String;
Len,i:Integer;
begin
Write(' Enter sentences :');
ReadLn(ST);
Len:=Length(ST);
for i:=1 to Len do
if st[i]=' ' then
Delete(ST,i,1);
WriteLn;
WriteLn(ST);
ReadLn;
end.
نه، اگر چند فاصله پشت سر هم وجود داشته باشند، درست عمل نمیکنه.منظورتون رو کامل متوجه نشدم ،درسته که ایندکس کارکترها تغییر میکنه ولی خوب این کد هم درست کار میکنه
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.