חייב עזרה בבניית תוכנה בפסקל - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

חייב עזרה בבניית תוכנה בפסקל


someone

Recommended Posts

מה שאני צריך לעשות זה:

להכניס אותיות לסטרינג וספרה אחת בין 1 ל9

נגיד מה שהכנסתי זה ככה, EKGFA5PZ

אז מה שהתוכנה צריכה לעשות זה להוסיף 5 פעמים את האות שלפני הספרה ולמחוק את הספרה, ככה:

EKGFAAAAAAPZ

מישהו יכול לכתוב לי משהו?

קישור לתוכן
שתף באתרים אחרים

  • 2 שבועות מאוחר יותר...

מה שאני צריך לעשות זה:

להכניס אותיות לסטרינג וספרה אחת בין 1 ל9

נגיד מה שהכנסתי זה ככה, EKGFA5PZ

אז מה שהתוכנה צריכה לעשות זה להוסיף 5 פעמים את האות שלפני הספרה ולמחוק את הספרה, ככה:

EKGFAAAAAAPZ

מישהו יכול לכתוב לי משהו?

כמה בעיות שאני רואה, יש הגבלה לאורך של סטרינג, ולכן במקרה שהסטרינג במקור היה בגודל ההגבלה, או קרוב אליה, יכול להיווצר מצב שבו אחרי הפעולה של התוכנה, התוצאה תחרוג מן הסטרינג.

בכל אופן, מה שאתה צריך לעשות זה פרוצדורה שעוברת על הסטרינג עד שהיא מוצאת את הספרה, ואז להכניס במקום הזה את האות שלפניה 5 פעמים.

אני מה שהייתי עושה, זה לייצג את המחרוזת באמצעות מערך, ואז ע"י שימוש במצביעים, להגדיל את המערך ב-4 ואז לעשות את הפעולה המבוקשת.

קישור לתוכן
שתף באתרים אחרים

  • 2 חודשים מאוחר יותר...

זה מסובך יותר מדיי... אין לי מושג מה זה מצביעים, ואין לי מושג איך לייצג את המחרוזת במערך...

זה צריך להיות די פשוט, בלי פרוצדורות ובלי כלום.

והמספר הוא תו (CHAR) אז זה יותר בעייה...

אולי למצוא אותו דרך הקוד ASCII איכשהו? רק שאני לא יודע מה קוד הASCII של מספרים בין 1 ל9...

אם למישהו יש רעיון אחר.. SHOOT

קישור לתוכן
שתף באתרים אחרים

לא צריך להסתבך יותר מדי, תגדיר string (שלצורך הדוגמא שלנו יקרא S2) ריק נוסף.

תריץ לולאה שמתחילה מ-1 עד אורך הסטרינג. בתוך הלולאה תשים תנאי If שיבדוק אם התו

[s[i בין '1' ל-'9' (אל תשכח את המרכאות). אם כן אז:

1. תשתמש ב-Val ותהפוך את התו לסיפרה שלצורף הדוגמא שלנו נאכסן ב-J

2. תריץ לולאת For מ-1 עד J-1 (כי הכנסת תו אחד ב-For הקודם) ותעשה

[s2=S2+S1[i-1

אם תנאי ה-If נכשל והתו הוא לא ספרה, פשוט תוסיף Else ואחריו

[s2=S2+S1[i

תסויף תנאי נוסף כדי שהוא לא יבדוק בטעות את [s1[0 (אם המחרוזת מתחילה בסיפרה).

פחות או יותר זה כל הסיפור.

קישור לתוכן
שתף באתרים אחרים

After several trys and methoods, I did it.... (it's properly not the best soulotion...)

program HWzone;

type atype = array[1..10] of char;

var

i,max,j,z:integer;

x:char;

a,b:atype;

{This procedure is taking the original array (a), and re orginaize it in the

new array (b)}

procedure newarray(var b:atype;a:atype; i,max:integer);

var

k:integer;

begin

for k:=1 to max do

begin

b[k]:=a[k];

end;

a[max-1]:=b[max];

for k:=(max+1) to (max+4) do

begin

b[k]:=a[max];

end;

for k:=(max+5) to i do

begin

b[k]:=a[max+1];

end;

end;

begin

i:=1;

j:=1;

x:='1';

max:=1;

writeln('Enter your numbers, when u done, press 0+enter');

{this park collect the char u have entered and counting the number of chars}

while x <> '0' do

begin

readln(x);

if x <> '0' then

begin

a:=x;

i:=i+1;

end;

end;

{This Part is cheking in wich sell of the array the number is}

for j:=1 to i do

begin

for z:=1 to 9 do

begin

if a[j]:=z then

max:=j;

end;

end;

{This part is sending the data collected to the function "newarray"}

newarray(a,i,max);

{This part is priting the outcome}

for z:=1 to 10 do

write(b[z]);

end.

עריכה: Align to left

קישור לתוכן
שתף באתרים אחרים

לא ממש מסודר, אבל הנה פיתרון יותר קצר בהרבה (אני רק מקווה שהוא עובד):

program MB;

var

s1,s2:string;

i,j,num,temp:integer;

begin

readln(s1);

s2:='';

for i:=1 to length(s1) do

begin

if ((s1>='2') and (s1<='9')) then

begin

if (i>1) then

begin

val(s1,num,temp);

for j:=2 to num do

s2:=s2+s1[i-1];

end;

end

else

if ((s1<>'1') and (s1<>'0')) then

s2:=s2+s1;

end;

writeln(s2);

end.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...