الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ممكن طريقة لحل هذه البرامج المعقدة !

مغلق
بدأه Adriano0o في 10 مايو 2005 · 8 رد · 681 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ........

ممكن أحد يساعدني في حل هذه البرامج الي تعبتني صراحة (( أنا راح أذكر السؤال وإلي يقدر يساعدنتي لو بفكرة بسيطة راح أكون له شاكر ))

نص السؤال : أكتب برنامج بلغة ++C يقرأ عدد صحيح مكون من أصفار وأحاد فقط ( أي عدد ثنائي مثل 1001101 ) lثم يقوم البرنامج بعرض القيمة المناظرة لهذا العدد في النظام العشري ؟

(( ملاحظة : إستخدم عمليتي القسمة الصحيحة ( % ) والقسمة ( / ) للحصول على الأرقام الثنائية الموجودة بالعدد على التوالي من اليمين إلى اليسار ثم أضرب كل رقم في الأساس المناظر لخانته مع الجمع - أي 1*1 + 0 *2+1*4+0000 ))

نص السؤال الثاني : العدد التام هو العدد الصحيح الذي يساوي مجموع عوامله , وعوامل العدد الصحيح هي الأعداد الصحيحة التي يقبل القسمة عليها ما عدا نفسه (مثال العدد 6 هو عدد تام لأنه يساوي مجموع عوامله 6 = 1+2+3 .)

والمطلوب : أكتب برنامج بلغة ++C لطباعة الأعداد التامة التي توجد ما بين 1 و 1000 بحيث يحتوي البرنامج على إجراء فرعي (function) تسمى

(Perfect) تأخذ عدد صحيح وتطبع ما إذا كان تام أم لا .؟

(( ملاحظة : إستخدم نفس فكرة برنامج إيجاد العدد الأولي )) .

(( أنا أعرف إنه طلبي ثقيل ولكن كلي أمل فيكم إنكم راح تساعدوني ولكم مني جزيل الشكر مقدماً )) :rolleyes:

#2

البرامج دي سهلة جدا يا اخي

حاول اولا قبل طرح السؤال و ارينا حاولاتك لنصححها لك

لان من مبادئ المنتدى عدم حل الواجبات الدراسية

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#3

ان شاء الله الطب مش ثقيل ولا شي .. و هذه البرامج ترى ليست معقدة! و لكن البداية دائما هكذا تبدو معقدة.

انسى السي بلص بلص شوية, انساها يعني و لا تفكر كيف تكتب الكود .. بل فكر في المشكلة بشكل تسلسل منطقي, يعني هات ورقة و قلم و حول رقم ثنائي الى رقم عشري ..

ما هي الخطوات المتبعة؟ اكتبها بالتفصيل .. (مش تفصيل ممل يعني .. بس اكتبها بطريقة بحيث لو واحد جاء لا يعرف شيء عن الارقام الثنائية و طبق هذه الخطوات فسينتهي بالرقم العشري الصحيح)

الان عندك خطوات العمل, حول هذه الخطوات الى كود ..

مثلا لو هناك خطوة تقول: خذ الرقم و قسمه على 2, ثم خذ الباقي من القسمة (مثلا فقط)

فنكتب مثلا:

int r = number % 2;

و هذا مثل فقط ..

مثلا لو وجدت خطوة تقول "قم بتكرار الخطوات السبقة الى ان يصبح عندك كذا"

تحولها الى مثلا while loop

و هكذا.

اذا لم تعرف كتابة الكود, فقم على الأقل بكتابة الخطوات بلغة البشر (بالعربي يعني) و ضعها هنا, و سنحاول ان شاء الله مساعدتك في تحويلها الى كود.

يعني قم بتفكيك المشكلة الى مشاكل صغيرة, فبدل ان تفكر في كيفية كتابة البرنامج ككل, قم بكتابة الخطوات العامة للبرنامج, ثم فكر في كل خطوة كيف تحولها الى كود, فبهذا تسهل العملية, لان الخطوات (خصوصا اذا كانت عمليات رياضية) يسهل تحويلها الى كود, بينما المشكلة ككل ربما يصعب التفكير في كود معين يحلها كلها.

عموما, دائما كلما تواجه مشكلة معقدة, قم بتفكيكها الى مشاكل اصغر منها, فهذا يسهل الحل, لاك بدل ان تفكر في المشكلة الكبيرة, ستفكر في مشاكل صغيرة.

#4

مشكووووووورين على الرد :)

#5

bashmohandes عزيزي إذا هي سهلة ممكن لو تساعدني بفكرة لأني من المبتدئين في اللغة وأنا ما طلبت حل الأئلة بشكل إلزامي لأنه عارف إنه هذا مو من قوانين المنتدى بل ذكرت إنه لو شخص يقدر يساعدني لو بفكرة بسيطة راح أكون له شاكر , على العموم شكرا لك على ردك :)

hasan_aljudy شكرا لك عزيزي على التوضيح وإذا عندك فكرة أرجو إنك تضعها :)

#6

ماشي يا سيدي

ده البرنامج اللي انت عاوزه بالضبط

و لا تزعل نفسك

/*----------------This Program Is For Logic FUN---------------------------*/
/*----------------By Mohammed Hossam Eldin--------------------------------*/
/*----------------Created 15 Frb. 2002------------------------------------*/
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define MAXSTACK 9
#define EMPTY -1
#define ERR -1
#define OK 1

int flag=0;

class logic
{
 private:
  int stack[MAXSTACK];
  int remainder,result,final;
  int top,test;

 public:
  logic(void);
  int push(int remainder);
  int dtob(int x);
  int pop(int cas);
   void all(void);
};

logic::logic(void)
{
 for(int i=0;i<8;i++)
   stack=0;
  top=-1;
  test=0;
  return;
}

int logic::dtob(int x)
{
 if(x==0)
 return OK;
 if(flag!=0)
 {
  top=-1;
//  clrscr();
  for(int i=0;i<MAXSTACK;i++)
  stack=0;
 }
 remainder=x%2;
 test=push(remainder);
 if(test==-1)
 return ERR;
 cout<<x<<endl;
 dtob(x/=2);
 flag++;
 return OK;
}

int logic::push(int remainder)
{
 int i;
// clear();
 if(top==MAXSTACK)
 {
  cout<<"ERROR.....ERROR"<<endl;
  getch();
  exit(1);
  return ERR;
 }
 stack[++top]=remainder;
 return OK;
}

int logic::pop(int cas)
{
 if(top<0 && test!=-1)
 return EMPTY;
 if(cas==8)
 top=MAXSTACK-1;
 else
 top=MAXSTACK;
 do
 {
  cout<<stack[--top];
 }
 while(top>0);
 cout<<endl;
 return OK;
}

void logic::all(void)
{
 int input;
 clrscr();
 do
 {
  cout<<"Enter No."<<endl;
  cin>>input;
 }
 while(input<0);
  dtob(input);
  cout<<"Resultant Binary is: ";
  if(input==0)
  {
   cout<<"00000000"<<endl;
   getch();
   return;
  }
  if(input>255 && input<513)
  {
   pop(9);
   getch();
   return;
  }
  if(input<512)
  pop(8);
  else cout<<"ERROR...ERROR"<<endl;
  getch();
}

void main(void)
{
 logic l1;
 l1.all();
}

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#7

انا اسف الرد السابق البرنامج كان بيحول من decimal الى Binary البرنامج ده بيحول من اي نظام الي Decimal

اصل انا كتبت البرامج من 3 سنين

بس انا اسف الكود ده صعب شوية لانه في Implementation للLinked List بدل استخدام ال Arrays

/*----------------By Mohammed Hossam Eldin--------------------------------*/
/*----------------Created 17 Feb. 2002------------------------------------*/
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#include <math.h>

struct NODE
{
 int val;
 NODE *prev,*next;
};

class logic2
{
 private:
 NODE *head;
 int val,base;

 public:
 logic2(void)
 {head=NULL;}
 ~logic2(void)
 {delete head;}
 void btod(int base);
 void display(void);
 void add(int val);
 NODE *getnode(int val);
 void all(void);
};

NODE* logic2::getnode(int val)
{
 NODE *temp=new NODE;
 temp->val=val;
 temp->prev=temp->next=NULL;
 return temp;
}

void logic2::add(int val)
{
 NODE *temp=getnode(val);
 if(head==NULL)
 {
  head=temp;
  return;
 }
 temp->next=head;
 head->prev=temp;
 head=temp;
}

void logic2::btod(int base)
{
 int n=0;
 unsigned long int z,result=0;
 NODE *scan=head;
 if(scan->next==NULL)
 return;

/* if(head->val==0)
  scan=head->next;
  while(scan->val==0)
  scan=scan->next;*/

 while(scan->next!=NULL)
 {
  scan=scan->next;
  n++;
 }
 while(scan->prev!=NULL)
 {
  n--;
  z=(scan->val) * pow(base,n);
  result+=z;
  cout<<"result now is: "<<result<<"\t"<<n<<"\t"<<scan->val<<endl;
  scan=scan->prev;
 }
 cout<<endl;
 cout<<"Equivalent Decimal No is: "<<result<<endl;
}

void logic2::all(void)
{
 char in;
 int input;
 cout<<"\t\t\tWelcome to Converter"<<endl
     <<"\t\tConvert any system (1-16) to decimal)"<<endl<<endl<<endl;
 do
 {
  cout<<"Enter Base: "<<endl;
  cin>>base;
 }
 while(base>16);
 cout<<"Enter No. "<<endl;
 do
 {
  in=getche();
  in=tolower(in);
  switch(in)
  {
   case 'a':
   add(10);
   break;
   case 'b':
   add(11);
   break;
   case 'c':
   add(12);
   break;
   case 'd':
   add(13);
   break;
   case 'e':
   add(14);
   break;
   case 'f':
   add(15);
   break;
   default:
   input=in - '0';
   if(input>=base)
   {
    cout<<"Invalid...."<<endl;
    continue;
   }
   add(input);
   break;
  }
 }
 while(in!='\r');
 cout<<endl;
 btod(base);
 getch();
 cout<<"\tAll Rights Reserved To Bashmohandes.8k.com."<<endl
     <<"\tmhelsherief@hotmail.com."<<endl
     <<"\t\tEng. Mohammed Hossam Eldin"<<endl;
 getch();
}
void main(void)
{
 clrscr();
 logic2 l1;
 l1.all();
}

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#8

يا عم عقدت الراجل بالكود بتاعك ..

الكود لا يجب ان يكون معقد لهذه الدرجة ..!!

#9

انا اسف لكن المشكلة ان هذا الكود كان جزء بسيط من Encryption Algorithm او طريقة تشفير و كان هذا الAlgorithm في احدى خطواته يتم تحويل الInput Data الى Binary او اي اساس اخر فهذه class واحدة و قد عدلتها لتكون برنامج كامل .

Sr. Software Development Engineer
Hulu, LLC
My Blogs

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…