עבור לתוכן

עזרה לגבי שאלה שהייתי במבחן בPASCAL.

Featured Replies

פורסם

כשאתה מגדיל את b[a]ובודק רק את אלו ששווים ל- 1, אתה בודק בעצם רק את הספרות שנמצאות רק פעם אחת.

אתה צריך לספור כמה גדולים ממש מ- 0.

פורסם

לפי http://hwzone.co.il/community/index.php?topic=240533.0

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

פורסם

אנדיסיינג תבדוק שוב את האלגו שלו ותראה שאתה לא באמת שם את המספר בתאים

פורסם

דיברתי לSUPERMAN שהציע לעשות ++.

וזה אנסיינד.

פורסם

אם כבר מדברים על ה ++- אני לא חושב שזה סינטקס חוקי

פורסם

זה ממש פשוט, הרעיון הוא לזכור רק את הפעם האחרונה שמספר מסויים הופיע, במילים אחרות לעשות Loop מהאלמנט

שאנחנו נמצאים בו עד ש:

א. אנחנו מוצאים מספר זהה, במקרה הזה נעשה break .

ב. עד שאנחנו מגיעים לסוף.

ועכשיו לבדוק האם הגענו לסוף של הלולאה, כלומר האם המספר שלו הוא יחודי מהמיקום שלנו עד הסוף או לא.

אם כן אז נעשה ++ ל counter שלנו ואז ננסה מספר הבא.

טוב, קצת קשה לי להסביר את עצמי ואני לא יודע PASCAL אז כתבתי לך קוד ב C :

#include <stdio.h>

#define ARRAY_SIZE 10

main ()
{

int Array[ARRAY_SIZE];
short i, x;
unsigned int count = 0;

for (i = 0; i < ARRAY_SIZE; i++)
{
printf ("Enter the %d%s number:",(i+1),(i+1)==1 ? "st" : (i+1)==2 ? "nd" : (i+1)==3 ? "rd" : "th" );
scanf ("%d",&Array[i]);

fflush (stdin);
}


for (i = 0; i < ARRAY_SIZE; i++)
{
for (x = i+1; x < ARRAY_SIZE; x++)
if (Array[i] == Array[x]) break;

if (x == ARRAY_SIZE) count++;

}

puts ("----------------------------------------------------\n");
printf ("You entered %d different %s",count, count == 1 ? "number" : "numbers");

fflush (stdin);
getchar();

return 0;
}

פורסם

^^^

דרך טובה מאוד, עוד דרך היא פשוט לאפס את המספרים שכבר ראית לדוגמא:



procedure del_num(var ar2:array_type;num,p:integer);
var j:integer;
begin
for j:=p to n do
if ar2[j]=num
then ar2[j]:=0;
end;
function dif_num(ar:array_type):integer; {ar - îòøê áéï N úååéí}
var counter,i:integer;
begin
counter:=0;
for i:=1 to n do
if ar[i]=0
then counter:=1;
for i:=1 to n do
if ar[i]<>0 then
begin
counter:=counter+1;
del_num(ar,ar[i],i);
end;
dif_num:=counter;

end;

פורסם

ואם יש 1 במערך, הוא לא יספר.

אתם סתם מסתבכים. תשתמשו במערך בגודל 10.

פורסם

אני לא מסכים איתך, אם יש איבר אחד ב array, זה כבר לא באמת array.

למרות שאפשר לבנות array של איבר אחד, זה טיפשי בגלל שאפשר פשוט ליצור משתנה

ו pointer שיחזיק בתוכו את הכתובת של המשתנה.

ואפשר בקלות לבדוק כמה איברים יש ב array ככה:

if ((sizeof Array) / ( sizeof (int) ) == 1 )

או במקרה הזה עדיף ככה:

if ( ARRAY_SIZE == 1 )

וחוץ מזה, לא ניסיתי אבל אני חושב שהפתרון שנתתי יעבוד גם עם איבר אחד, בגלל שה LOOP החיצוני

ירוץ לפחות פעם אחת ה LOOP הפנימי לא ירוץ אבל X יהיה i + 1 (כלומר 0+1) והמשפט x == ARRAY_SIZE

יהיה TRUE בגלל שההצבה ב for קוראת לפני שהתנאי נבדק.

פורסם

אח כואב לי הראש ונדמה לי שהתבלבלתי בין תראדים...

משהו מוזר מאוד הולך כאן.

ארכיון

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

דיונים חדשים