PDA

צפה בגרסה המלאה : שאלה



דביר2000
21-10-2011, 15:54
כתוב תוכנית אשר תקלוט ממך מספר מ-0 עד 255 ותדפיס את המספר ותוציא את הפלט של אותו מספר על המסך בתור מספר בינארי.
יש צורך בשימוש בלולאה.

דביר2000
21-10-2011, 17:34
5 צפיות ואף אחד לא עזר?
בבקשה תעזרו לי.

odp
21-10-2011, 20:02
למדתם על איך עוברים מהצגה עשרונית להצגה בינארית ?
בכל מקרה, התוכנית הולכת ככה:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;


int main(){
int decimal, binary = 0, position=1;
cin >> decimal;
while(decimal !=0){
binary += (decimal % 2) * position;
decimal = decimal / 2;
position *= 10;
}
cout << binary;


return 0;
}

לא יודע איך מציגים את זה בצורה נורמלית.. ניסיתי גם בעזרת תגית ה-CODE.

tototomer1
21-10-2011, 20:10
למדתם על איך עוברים מהצגה עשרונית להצגה בינארית ?
בכל מקרה, התוכנית הולכת ככה:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;


int main(){
int decimal, binary = 0, position=1;
cin >> decimal;
while(decimal !=0){
binary += (decimal % 2) * position;
decimal = decimal / 2;
position *= 10;
}
cout << binary;


return 0;
}


לא יודע איך מציגים את זה בצורה נורמלית.. ניסיתי גם בעזרת תגית ה-CODE.


בשביל להציג קוד נורמלית תעשה קודם כל הצגה משמאל לימין ואחר כך תכניס לקוד ואז אמור לעבוד. אם לא אז הצגה לשמאל ואז PHP/HTML וכו'.. אני זוכר שפעם משהו כזה עבד לי

tototomer1
21-10-2011, 20:14
#include <iostream>
using std::cout;
using std::cin;
using std::endl;




int main(){
int decimal, binary = 0, position=1;
cin >> decimal;
while(decimal !=0){
binary += (decimal % 2) * position;
decimal = decimal / 2;
position *= 10;
}
cout << binary;




return 0;
}

דביר2000
22-10-2011, 20:44
תודה רבה!
אבל המורה שלי רוצה לולאת for
כי עדיין לא למדנו לולאת while (למדתי את זה שנה שעברה, אבל השנה אנחנו מתחילים מהתחלה)

tototomer1
22-10-2011, 20:51
אני לא יודע C#, אבל אני יודע JAVA וזה מאוד דומה.. הבסיס למעבר בין while ל-for הוא מאוד פשוט (אם תרצה אני יכול לכתוב אותו).

הנה הקוד לאחר השינוי:




#include <iostream>
using std::cout;
using std::cin;
using std::endl;




int main() {
int decimal, binary = 0, position=1;
cin >> decimal;


for (int position=1; decimal !=0; position*=10) {
binary+= (decimal % 2) * position;
decimal = decimal / 2;
}


cout << binary;


return 0;
}


הוספתי גם קצת הזחות כדי שיהיה יותר נוח לקרוא :)

tototomer1
22-10-2011, 20:55
והנה הבסיס למעבר בין לולאת while ללולאת for ולהפך:

לולאת while:



int i=1; //אתחול


while (i<=10) { //תנאי
//הפקודות שברצונך להריץ
i++; //קידום משתנה הלולאה
}


שקול בדיוק ל:



for (int i=1; i<=10; i++;) {
//הפקודות שברצונך להריץ
}




בדוגמא של לולאת ה-while רשמתי הערות על מה זה כל דבר, זה בדיוק מה שיש בסוגריים של ה-for.

odp
23-10-2011, 16:12
והנה הבסיס למעבר בין לולאת while ללולאת for ולהפך:

לולאת while:



int i=1; //אתחול


while (i<=10) { //תנאי
//הפקודות שברצונך להריץ
i++; //קידום משתנה הלולאה
}



שקול בדיוק ל:



for (int i=1; i<=10; i++;) {
//הפקודות שברצונך להריץ
}





בדוגמא של לולאת ה-while רשמתי הערות על מה זה כל דבר, זה בדיוק מה שיש בסוגריים של ה-for.

פשש...

השקעה זו לא מילה גסה. :)

tototomer1
23-10-2011, 21:57
תודה תודה :)

דביר2000
23-10-2011, 23:20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int num ;
Console.WriteLine("Enter a number");
num = int.Parse(Console.ReadLine());
for (int i = 0; i < 8; i++)
{
if (num % 2 == 0)
Console.Write(0);
else
Console.Write(1);
num = num / 2;
}
Console.ReadKey();

}
}
}

דביר2000
23-10-2011, 23:21
כמו שאתם רואים, כבר פתרתי את התרגיל, תודה על העזרה

lioryor
23-10-2011, 23:26
כל הכבוד אבל אתה יכול להסביר לי כמה דברים דביר אני לא הבנתי איך משנים את זה לבנארי (אני לומד בגאווה)

תודה

דביר2000
26-10-2011, 18:17
תראה, אני אסביר לך את זה בפשטות.
אתה מחלק את המספר הנתון במספר 2.(כמו שעשיתי עם % בתוכנה)
אם אין שארית, אתה כותב 0 אם יש שארית אתה כותב 1.
אחרי שחילקת, אתה מחלק את המנה שיצאה לך בחילוק הקודת במס' 2 וכן הלאה...
במקרה הזה אתה מחלק את המס' הנתון 8 פעמים כי מדובר במספר בעל 8 סיביות מקסימום.(עד 255)
אבל אל תשכח שכל פעם, המס' משתנה, בגלל זה כתבתי בסוף הלולאה:
num=num/2