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

التحدي الكبير

مغلقرائج
بدأه ANSI في 3 يوليو 2005 · 178 رد · 15,970 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#151

UP

تم تعديل هذه المشاركة بواسطة Pharaonic_Guy في 24 يوليو 2005 في 21:46

#152

لا احد من الأخوة يريد حل السؤال حتي نفتح مجال المشاركة

امام الأخوة الأخريين الذين لم يشاركوا بالموضوع حتي الآن

ولكنني لن أستطيع أأمسك نفسي وأترك السؤال بدون حل أكثر من ذلك.

تم تعديل هذه المشاركة بواسطة Pharaonic_Guy في 24 يوليو 2005 في 21:45

#153

المهم أن تكون الحلول غير مستخدم بها الآتي :

* عدم استخدام أي دالة API ..

* عدم استخدام أي مكتبات ActiveX أو ActiveXDLL مثل FileSystemObject ,

أو أي Stream Object ..

هذا حل :

Private Sub Command1_Click()
Dim sTemp As String
sTemp = "Strings goes here"
Shell "cmd /c ECHO " & sTemp & ">>C:\test.txt"
End Sub

حل آخر :

Private Sub Command1_Click()
On Error Resume Next
Shell "notepad.exe", vbNormalFocus
Wait
SendKeys ("Strings goes here")
Wait
SendKeys ("%+F")
Wait
SendKeys ("S")
Wait
SendKeys ("test.txt")
Wait
SendKeys ("~")
AppActivate ("Save as")
SendKeys ("y")
Wait
SendKeys ("%+F")
Wait
SendKeys ("x")
End Sub

Private Sub Wait()
For i = 1 To 350
DoEvents
Next
End Sub

تم تعديل هذه المشاركة بواسطة Pharaonic_Guy في 24 يوليو 2005 في 22:58

#155

حل جميل ورائع!!

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

اسمه, أبوه، أمه، زوجته، أبناءه، إخوانه!!!

بمعنى آخر أريد أن أعطي لدالة معينة اسما، ويرجع لي اسم أبيه مثلا! ودالة أخرى تعطيني أمه! وهكذا!!!

إذا لم تستطع حل السؤال، فحاول حل نصفه مثلا دالة الأب فقط!!

بالتوفيق!!!

#156

(شجرة العائلة) الإصدار الثاني

أريد توضيح سؤال بشكل أفضل... وسأحاول صياغة السؤال من جديد للتسهيل:

لديك شجرة عائلة.. الشخص له (أب و أبناء و إخوان فقط) ليكن عندي شخص اسمه عمرو،،، أستدعي دالة معينة ترجع لي أباه زيد!! أستدعي الدالة مرة أخرى على زيد فتعطيني أباه خالد!!

أطلب دالة الأبناء على خالد فتعطيني زيد وأبناء خالد!!

أريد أن يكون عندي القدرة مثلا على الحصول على هذه المعلومات بوجود دوال على سبيل المثال لا الحصر:

getFatherOf(name as String) as String
getChilderOf(name as String) as String()
وهكذا

أرجو أن أكون قد وفقت في شرح السؤال!!

#157

طبعا الأسماء غير موجودة،، النظام يمكن المستخدم (المبرمج) من استخدامه بسهولة. النظام يمكنك من كتابة المعلومات ويمكنك من قراءة المعلومات.. ليس بالضرورة أن تنشئ GUI يأخذ البيانات من المستخدم... بمعنى آخر أريد تصميم (قاعدة البيانات) هذه البسيطة ليستخدمها المبرمج بعد ذلك!.... بعد تصميم القاعدة قد نفكر في تصميم برنامج لقراءة وطباعة وحفظ العائلة وهذا غير مطلوب!!

المطلوب الدوال، والطريقة، وتصميمها!

#158

UP

تم تعديل هذه المشاركة بواسطة Pharaonic_Guy في 26 يوليو 2005 في 01:38

#159

المثال الذي ذكرته -علي حسب ما فهمته - يبين أن الشخص المدعو عمرو -( والذي له أب وأبناء وأخوان فقط )- موقعه كالآتي..

(جد < أب < ابن)

(خالد< زيد< عمرو)

وهو ما يخالف الشرح النظري الذي وضعته في أي من المشاركة الأولي والثانية.

ولذلك أرجو منك إرفاق صورة توضيحية لشجرةالعائلة ...

تم تعديل هذه المشاركة بواسطة Pharaonic_Guy في 26 يوليو 2005 في 01:43

#160

المشاركة الثانية تمثل الإصدار الثاني من السؤال: فليس بالضرورة أن تكون هذه المعلومات متوفرة (الأم، الزوجة)

النظام يمكنك من إدخال بيانات شجرة عائلة معينة والمكونة من شخص وأبيه وإخوته وأبناءه! تدخل أشخاص، وتدخل صلة القرابات، وبعد ذلك تستطيع قراءة هذه المعلومات عن طريق أوامر معينة تمولها لنا..

النظام يمكنك من إدخال البيانات هذه في النظام

1- ندخل هذه الأشخاص في النظام: زيد وخالد ويوسف وعمرو وماجد الخ....

2- صلة علاقة: عمرو هو ابن زيد

3- زيد هو ابن خالد.

4- يوسف هو أخو زيد.

5- ماجد هو أهو خالد...

6- الخ

7- اطبع لي من هو أبو زيد.

8- أخرج لي من هم إخوان عمرو

9- الخ..

أرجو أن يكون المثال واضحا!!

بالتوفيق!!

#161

هل أنتظر الحلول، أم أنشر حلا؟؟؟

#162

للرفع

أشهد أن لا إله إلا الله ***************** وأشهد أن محمد عبده ورسوله

#163

عندي الآن حلان!!

كلاهما بالVB... أحدهما تستطيع استخدامه حتى في QBasic!!

ليس بالضرورة أن نرى حلا كاملا... لكن المحاولات حتى لو كانت مخطئة تفيد المنتدى كثيرا!!

#164

سأحاول المساعدة:

هذا حل بالجافا... اقرأه وحاول تطبيقه في VB...

لاحظ أن المستخدم أو المبرمج سيستعمل هذه الأوامر ليدخل ويخرج البيانات التي يريد:

Person.getName();
Person.getChildren();
Person.getFather();
Person.addChild();
new Person();

وهذا هو البرنامج البسيط!

import java.util.*;

class Person {
	String name;
	Person father;
	List<Person>children;
	public Person(String personName, Person personFather){
  name=personName;
  children=new Vector<Person>();
  setFather(personFather);
	}
	public Person(String personName){
  this(personName, null);
	}
	public void addChild(Person child){
  children.add(child);
  child.setFather(this);
	}
	private void setFather(Person fatherPerson){
  if(fatherPerson==null)return;
  father=fatherPerson;
	}
	public Person getFather(){
  return father;
	}
	public List<Person> getChildren(){
  return new Vector<Person>(children);
	}
	public String getName(){
  return name;
	}
	public String toString(){
  StringBuffer buffer=new StringBuffer();
  buffer.append("Name: "+name+"\t Father: "+
    ((father==null)?null:father.getName())+"\n");
  for(Person child:getChildren()){
 	 buffer.append("\t"+child.getName());
 	 buffer.append("\n");
  }
  return buffer.toString();
	}


}

//لاحظ كيف للمستخدم أن يستخدم الفئة السابقة في برنامجه ليضيف من يريد إلى شجرة العائلة التي يريد!!

public class Test{
	public static void main(String []args){
  Person me=new Person("Hussam");
  Person father=new Person("Mohammad");
  Person grandFather=new Person("Al-Mulhim");
  father.addChild(me);
  father.addChild(new Person("Abdul-Aziz"));
  father.addChild(new Person("Abdul-Latif"));
  grandFather.addChild(father);
  System.out.println (father);
  System.out.println (grandFather);
	}

}

مازال عندي الحلين بالVB. هل من محاول؟؟ حاول تطبيق المثال السابق بال VB!!

#165

حتى لا أطيل عليكم

هذه أول طريقة باستخدام Types أو الأنواع!! تستطيع تطبيقها حتى في QBasic:

المستخدم يستطيع إدخال المعلومات بطريقتين:

addPerson لإضافة شخص جديد برقم مميز!

makeFatherRelationship لربط شخص مع أبيه.

هذين الدالتين تكفي ليقوم النظام بمعرفة المعلومة التي تريد مثل:

getPerson

getBrothers

getChildren

طبعا التخزين يكون في النوع Person الذي يخزن اسم الشخص ورقمه ورقم أبيه وأرقام الأولاد، وهذه تكفي للوصول للإخوان مثلا وأي فرد آخر!!

Type Person
    name As String
    id As Integer
    fatherID As Integer
    childrenIDs(5) As Integer
End Type

Dim personDataBase() As Person
Dim personCount As Integer

Public Sub startProgram()
ReDim personDataBase(1 To 40) As Person
prepareDatabase 'prepares the database, does nothing really!!!

checkDatabase ' prints All persons in the DataBase,
'Person ID should not be 0!!
Call addPerson("Hussam", 1) ' adds a person to the dataBase with a name: Hussam, and ID = 1
Call addPerson("Yahya", 2) 'adds....
Call addPerson("Yousif", 3)
Call addPerson("Majid", 4)
Call addPerson("Khalid", 5)
Call addPerson("Mohammad", 6)
Call addPerson("Ahmad", 7)
checkDatabase  ' prints the DataBase
'establishing relatives, the next function links a father to a son.
'by ID
' making relative       child               father
makeFatherRelationship personDataBase(2), personDataBase(1)
makeFatherRelationship personDataBase(3), personDataBase(1)
makeFatherRelationship personDataBase(4), personDataBase(1)
makeFatherRelationship personDataBase(1), personDataBase(6)
makeFatherRelationship personDataBase(5), personDataBase(6)
makeFatherRelationship personDataBase(7), personDataBase(2)

checkDatabase  'prints the Data Base

End Sub

Public Function getPerson(ByVal id As Integer) As Person 'can be used b the user
'returns a copy
getPerson = personDataBase(id)

End Function
Public Function getBrothers(ByRef brother As Person) As Person() 'can be used by the user
'returns a copy!
getBrothers = getChildren(personDataBase(brother.fatherID))

End Function

Public Function getChildren(ByRef Father As Person) As Person() 'can be used by the user
' returns copies
ReDim persons(LBound(Father.childrenIDs) To UBound(Father.childrenIDs)) As Person
  
For i = LBound(Father.childrenIDs) To UBound(Father.childrenIDs)
    If (Father.childrenIDs(i) <> 0) Then
        persons(i) = personDataBase(i)
    End If
Next
getChildren = persons
End Function

Public Function addPerson(ByVal name As String, ByVal id As Integer) As Boolean
'used by the user
Dim p As Person
p.name = name
p.id = id
'p.fatherID = -1
Debug.Print id, personDataBase(id).id
If personDataBase(id).id = 0 Then
    personDataBase(id) = p
    addPerson = True
Else
    addPerson = False
End If


End Function

Public Function makeFatherRelationship(ByRef child As Person, ByRef Father As Person) As Boolean
'used by user
If child.fatherID = 0 Then
    child.fatherID = Father.id
    For i = 0 To UBound(Father.childrenIDs)
       If Father.childrenIDs(i) = 0 Then
            Father.childrenIDs(i) = child.id
            makeFatherRelationship = True
            Exit For
        End If
    Next
    
Else
    makeFatherRelationship = False
End If

End Function
Private Sub checkDatabase() ' prints approximatly all info
Debug.Print "Printing All Persons..."
For i = LBound(personDataBase) To UBound(personDataBase)
    If personDataBase(i).id <> 0 Then
        If personDataBase(i).fatherID <> 0 Then
            Debug.Print "Father: "; personDataBase(i).id; personDataBase(i).name; " Father ID and name: "; personDataBase(i).fatherID; " "; personDataBase(personDataBase(i).fatherID).name
        Else
            Debug.Print "Father: "; personDataBase(i).id; personDataBase(i).name; " Father ID and name: "; personDataBase(i).fatherID
        End If
        
        Dim p As Person
        printSons personDataBase(i)
    End If
Next
Debug.Print "---"
End Sub
Private Sub printSons(ByRef Father As Person) 'prints sons (used by checkDataBase Sub)
Debug.Print "  children"
For i = 0 To UBound(Father.childrenIDs)
    If Father.childrenIDs(i) <> 0 Then
        Debug.Print "  "; Father.childrenIDs(i); personDataBase(Father.childrenIDs(i)).name
    End If
Next
End Sub

Private Sub prepareDatabase() ' does nothing!!! it can be used to delete all records!!!
Debug.Print "preparring..Database...."
For i = LBound(personDataBase) To UBound(personDataBase)
    personDataBase(i).id = 0
    personDataBase(i).fatherID = 0
Next

End Sub

الحل الآخر سأرفقه قريبا!!

#166

بما ان الاخ ابو مازن وضع الحل سوف اقوم بطرح سؤال جديد :

عند حفظ ملف نصي من داخل برنامجك كيف تعرف اذا كان هنالك ملف بنفس الاسم الذي تريد حفظه ؟

ابسطهالكم :lol:

انت لما تيجي تحفظ ملف وورد في مسار معين وعند اختيارك لاسم لحفظ الملف على سبيل المثال arab فاذا كان هنالك ملف يحمل الاسم

arab في ذلك المسار فان وورد سوف يخبرك ان هذا الملف موجود فعلا .

فكيف يمكنك التاكد من داخل برنامجك اذا كان هنالك تشابه في اسم الملف الذي تريد الاحتفاظ به؟

من دروسي :

درس مبسط لفهم ال VB6.... Resource File

تعلم تصميم اداة ال Active X خطوة بخطوة (الجزء الأول)

الطريقة المثلى للتعامل مع مسجل النظام( VB6..... (Registry

من برامجي :

Abo Sabreen Messenger v2.1 العملاق

--------------------------------------------------

مفكرة الإسلام؛ طالع أخبار العالم وأخبار المجاهدين بعيدا عن التعتيم الاعلامي.

#167

السلام عليكم ورحمة الله وبركاته

في البداية فقط أردت أن أسأل الأخ أبو مازن هل نستطيع تطبيق database class لنفس المشكل المطروح واذا لم يمكن فماهي الأسباب

أما الأخ أبوصابرين فالحل يكون باستعمال Dir$

If Dir$("c:\arab") <> "" Then 
MsgBox ("The file exists") 
Else 
MsgBox ("The file does not exist") 
End If
#168

هذه الطريقة الثانية باستخدام الفئات classes

هذه فئة Person2

يمكنك استخدامها هكذا

Dim a as new Person2

أضف اسم

a.FirstName = " My Name"

أضف أب

a.Father = new Person2

انظر إلى الشفرة وإلى التجربة!! أرجو أن يكون فهمه سهلا..

Private myChilds(10) As Person2
Private myFather As Person2
Private myName As String
Private id As Integer



 Public Property Get FirstName() As String
    FirstName = myName
 End Property

 Public Property Let FirstName(FN As String)
     myName = FN
 End Property


 Public Property Get Father() As Person2
    Set Father = myFather
    
 End Property
 Function addChild(child As Person2)
    Debug.Print "adding.."; child.FirstName
    For i = 0 To UBound(myChilds)
        If myChilds(i) Is Nothing Then
            Set myChilds(i) = child
            Exit For
        End If
    Next

 End Function
 Public Property Let Father(FatherN As Person2)
    FatherN.addChild Me
    Set myFather = FatherN
 End Property


 Public Property Get childs()
    childs = myChilds
 End Property

هذا هو استخدام الفئة السابقة من المبرمج:

Public Sub testClassPerson2()

Dim a As New Person2
Dim b As New Person2
Dim c As New Person2
Dim d As New Person2
Dim e As New Person2

a.FirstName = "hussam"
b.FirstName = "Mohammad"
c.FirstName = "Yahya"
d.FirstName = "Yousif"
e.FirstName = "Majid"

a.Father = b
c.Father = a
d.Father = a
e.Father = a

printChildren a
printChildren b
printChildren c
printChildren d
printChildren e
End Sub

Public Sub printChildren(ByRef p2 As Person2)
Debug.Print "Children for "; p2.FirstName
For i = 0 To UBound(p2.childs)
    Dim p As Person2
    Set p = p2.childs()(i)
    If p Is Nothing Then
    Else
        Debug.Print i; p.FirstName
    End If
Next
End Sub

إلى سؤال تالي!!

#169

أخي (شبكة الحلم) لم أفهم ما تعنيه! هل تقصد حفظ المعلومات في قاعدة بيانات مترابطة مثل Access أو غيرها.. أعتقد أنه يمكنك ذلك. الحل الأول باستعمال Type تعطيك فكرة عن كيفية عمل ذلك وهو باستعمال الأرقام المعرفة IDs للوصول إلى الأقارب! لم أجربها... لكن جدول فيه الأسماء، وجدول آخر يبين علاقة الأب وابنه!

في نظام RDB

الجدول الأول يحوي

Person ID, Name

والجدول الثاني:

father id, son id.

وعن نفسي أنتظر قواعد البيانات الشيئية OODB .. والتي ستسهل الكثير خاصة في بيانات لها علاقات متشابكة جدا!

هل هذا ما قصدته؟

---------------

فوائد إضافية حول الطريقة الأولى في الحل باستخدام Type

تستطيع تخزين هذه المعلومات بسهولة جدا في ملف دون إدخال كل قيمة على حدة.. فكل مافي الأمر أن تفتح ملفا، وتخزن Person مباشرة في الملف.. لا تخزن اسمه ورقمه ورقم أبيه، بل يكفيك تخزين الوحدة التخزينية لـ Person معين مباشرة على الملف..

أعتقد بمثل الطريقة هذه والله أعلم:

Open "File" as Output #1
Print #1 person1
Print #1 person2

وهكذا،

بالتوفيق!

#171

لماذا مات الموضوع؟؟؟!

#172

السلام عليكم

إن شاء الله مناحول نرد الروح لهالموضوع

عندي سؤال صغير و ارجو المشاركة بأكثر من حل لأنه يقبل أكثر من طريقة

السؤال :

نعلم أن في الفيجوال بيسك يوجد الدوال المثلثية sin - cos ----- إلخ بشكل جاهز للاستعمال الفوري دون اضافة أي مكتبة

كيف نستطيع استخراج arcsin و arccos من الدوال المتوافرة بالفيجوال اي sin - cos بطريقة برمجية دون استخدام قوانين الرياضيات

و هذا السؤال قد أخذ مني عقلي مدة لا بأس بها لأن برنامجي كان متعلق عليه ثم حللته في نومي لشدة تفكيري به حيث أني كنت نائما ثم رأيت نفسي اكتب كود الحل ثم استيقذت و انا متذكر الكود فجربته فعمل طبعا لم أكن أعلم القانون الرياضي الذي يعطي arcsin رياضيا

أرجو المشاركة

#173

انا لا اعرف الاجابه و لكن اريد ان يهتم الافراد بهذا الموضوع لانه رائع

#174

كيف يمكنك أن تحول قيمة الثواني التالية : 13850 إلى دقائق و ثواني و ساعات بحث لاتزيد الثواني عن 60 ولا تزيد الدقائق عن 60 ؟

و بالمناسبة موضوع جميل كما أنه يشغل أمخاخنا (شوي) في هذا الصيف

تم تعديل هذه المشاركة بواسطة 007GB في 19 يوليو 2006 في 13:45

المستبد يتحكم في شؤون الناس بإرادته لا بإرادتهم و يحكمهم بهواه لا بشريعتهم و يعلم من نفسه أنه الغاصب المتعدي فيضع كعب رجله على أفواه الملايين من الناس يسدها عن النطق بالحق و التداعي لمطالبته

#175

السلام عليكم

أخي 00VGB هاهو جواب سؤالك :

ضع صندوقي نص و زر أمر و اكتب الكود التالي في حدث ضغط زر الأمر : مع الملاحظة أنك تستطيع كتابة أي رقم من الثواني في الصندوق الأول ليتم تحويله في الصندوق الثاني

		Dim Hour, Min, Sec As Integer


		TextBox2.Text = TextBox1.Text / 60

		Hour = TextBox1.Text \ 3600
		Min = (TextBox1.Text Mod 3600) \ 60
		Sec = (TextBox1.Text Mod 3600) Mod 60

		TextBox2.Text = "Hour = " & Hour & "   Min = " & Min & "   sec = " & Sec

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

و شكرا

تم تعديل هذه المشاركة بواسطة Xacker في 10 سبتمبر 2006 في 03:47

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

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

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

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

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

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