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

سؤال سوف يحفز تفكيرك Reloaded !

بدأه mental-driller في 15 يونيو 2011 · 14 رد · 1,338 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

المره هذه شكل جديد ، في الواقع هذا احد التمارين المشهوره عند طلاب علوم الحاسوب

لقد تم طلب حل هذا التمرين مني من قبل صديق قبل مده ، ولكني قررت اضافة بعض التقييدات عليه

المطلوب: رسم نجمه سداسيه بشرط عدم استخدام اكثر من حلقتين تكرار متداخلتين

not more than two nested loops.

Enter the size
21
               *                
              ***               
             *****              
            *******             
           *********            
******************************* 
 *****************************  
  ***************************   
   *************************    
    ***********************     
     *********************      
    ***********************     
   *************************    
  ***************************   
 *****************************  
******************************* 
           *********            
            *******             
             *****              
              ***               
               *

لنكون واضحين فقط!

في اي حلقة تكرار يسمح لك فقط بطباعة اما نجمه او فراغ او سطر جديد

printf("*");

printf(" ");

printf("\n");

تم تعديل هذه المشاركة بواسطة mental-driller في 15 يونيو 2011 في 07:36

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#2

وضح اكتر 2 لوب جوه بعض ممكن استخدم حاجه بره ؟

#3

مثل ما قلت مسموح فقط اما بلوب واحد

for loop
condition 1 
condition 2
.
.
.
.
condition n

او بلوبين

outer for loop
inner for loop
condition 1
condition 2
.
.
.
.
condition 3

ليس من المسموح استخدام اي من الدوال التي تسهل الطباع كfill او replace يسمح لك فقط باستخدام دالة الطباعة الاساسية مثل printf

System.out.print(), echo, Console.Write()

وتكون الطباعة لحرف واحد فقط اما نجمه او فراغ مع ادخل سطر جديد في نهاية كل حلقة داخليه في حالة استخدام لوبين

مسموح لك ان تستخدم اي متغيرات تريدها سواء داخل او خارج اللوب

تم تعديل هذه المشاركة بواسطة mental-driller في 15 يونيو 2011 في 23:34

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#4

حسنا اخي بارك الله فيك وجاري العبث على امل ... :P

#5

بالبايثون

number = int(input("Enter the size: "))
half = number//2
length = number + half
for index in range(0, length*number):
    row = index//length
    column = index%length
    getTriangleWidth = lambda level: level * 2 + 1
    triangle1Width = getTriangleWidth(row)
    triangle2Width = getTriangleWidth(number - row - 1)

    if triangle1Width>length : triangle1Width=0
    if triangle2Width>length : triangle2Width=0

    width = max(triangle1Width, triangle2Width)
    center = length // 2

    if (abs(column - center)*2 + 1) <= width:
        print("*", end="")
    else:
        print(" ", end="")

    if column == length-1:
        print("\n", end="")

تم تعديل هذه المشاركة بواسطة System Down في 16 يونيو 2011 في 01:08

2
#6

ونفس الكود بالأسلوب الـfunctional (من غير لوب):

number = int(input("Enter the size: "))

half = number//2
length = number + half
center = length // 2

getTriangleWidth1 = lambda row: row * 2 + 1 if row<=(length-1)/2 else 0
getTriangleWidth2 = lambda row: getTriangleWidth1(number-row-1)
getTriangleWidthMax = lambda row: max(getTriangleWidth1(row), getTriangleWidth2(row))
isStar = lambda x,y: '*' if abs(x - center)*2 + 1 <= getTriangleWidthMax(y) else ' '
isRowEnd = lambda x: '\n' if x==length-1 else ''
string = [isStar(index%length,index//length) + isRowEnd(index%length) for index in range(0, length*number)]

print(''.join(string))
2
#7

وينك من زمان يا system down ، +1

الاعضاء الباقين واصلوا المحاوله

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#8

هذا ما توصلت اليه اخي العزيز واعتدر عن التاخير ... الامتحانات :)

one loop, runing like that :wacko:

#include<stdio.h>


main()
{
 int n,i=1,end,strt,colonne=1,add=1,reverse=0;

        scanf("%d",&n);

        strt=end=(n+2*n) / 4 + 1;

        do
        {
                if (i==n/4 +1 )
                {
                           end=n/2 + n;
                           strt=1;
                           add=-add;
                           reverse=1;
                }

                if(colonne>=strt && colonne<=end)
                           printf("*");
                else
                           printf(" "); 

                colonne++;
                if(colonne>end){
                         printf("\n");
                         colonne=1;
                         end+=add;
                         strt-=add;
                         i++;
                         if(i==n/2+1)
                           add=-add;
                         }
                         if(strt==0 && reverse)
                                      {
                                                 strt=n/2 +2 ;
                                                 end =n-1;
                                                 add=-add;  
                                      }
        }while(i<=n);

system("pause");
}

ماذا تقصدون بالfunctional هذا هل باستعمال الدوال ؟

تم تعديل هذه المشاركة بواسطة youssefchou في 17 يونيو 2011 في 13:23

1
#9

functional programming هو نوع من انواع البرمجه programming paradigms يرتكز على استدعاء الدوال ، او معاملة الدوال على انها parameters او types

كثير من اللغات تدعم مايسمى بlambda expressions او lambda calculus بينما توجد هناك لغات مبنية على هذا النوع من البرمجة مثل lisp, scheme, haskell, OCaml, ML

+1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#10

بارك الله فيك اخي على التوضيح :)

#11

حلول اكثر من رائعه ، هذا الحل باستخدام حلقتين تكرار متداخلتين

#include <iostream>
#include <cstdlib>

using namespace std;
int main(){

    int size, tul, u,  m;
    cout << "Enter the size preferably 5,9,13,17,21, ...\n";
    cin  >> size;
    tul = (size -1 )/2 ;
    u = tul /2;
    m = size - tul ;

    for(int i = 1 ; i <= size ; i++ ){
      for(int j =1; j<= size+m; j++){

          if  ((i <= u+m && j<= (size+m)/2  && (i+j) >= u+m+1)
            ||(i  <= u+m && j>= (size+m) /2  && i+j <= (2*i -1)+u+m)
            ||((i>u && j<= (size+m)/2  && i+j <= u +2*j )
            ||(i>u && j>= (size+m)/2   && i+j <= size+m+u)))

                   cout << "*" ;
          else 
                   cout<<" ";
     }
     cout<<endl;
   }
   system("pause");
   return 0 ;
}

كما تلاحظون من خصائص الشكل انه ليس كل الاحجام مناسب للنجمه السداسية

بالتوفيق

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#12
youssefchou كتب:

ماذا تقصدون بالfunctional هذا هل باستعمال الدوال ؟

كتبت مؤخراً عن البرمجة الوظيفية functional programming في مدونتي:

http://blog.system-down.com/?p=235

#13

شكرا اخي تم الاضافة الى المفضلة لاطلع عليه فيما بعد

جعله الله في ميزان حسناتك

#14

جميل جداً أخي مانتل ..... بارك الله فيك و بصراحة اجاني سؤال مشابه لهذا السؤال في أمتحان العام الماضي في الـ ++C , و أعتقد اني حللته !!!!!

ولكن جاري حل هذه المسئله أن شاء الله

#15

شكرا لتشريفك لي في موضوعي وبانتظار حلك :)

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

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