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

برمجة ذات تفكير منطقي كبير وعالي

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

السلام عليكم

هذا البرنامج الفريد (كود):

#include <stdio.h>
#include <string.h>
int main()
{
	char str[]="- This, a sample string.";
	char pch;
	printf("Splitting string \"%s\"into tokens:\n",str);
	pch=strtok(str," ,.-");
	while(pch!=NULL)
	{
		printf("%s\n",pch);
		pch=strtok(NULL," -,.");
	}
	return 0;

كالعادة سوف أقوم بطرح الأسئلة وأتمنى أن أجد الإجابة:
س1:
[code]char str[]="- This, a sample string.";

}

char str[]="- This, a sample string.";

مفهومة مصفوفة دينماكية :lol:

char *pch;

ممم مؤشر من نوع char ? كلامي صحيح أم لا؟

pch=strtok(str," ,.-");

أعتقد إنه هذه الدالة تقوم بحذف العلامات العلامات الموجودة في الوسيط الثاني؟وهل لها وضائف أخرى؟

while(pch!=NULL)

عاوز تفسير منطقي

لإني لا أعرف الـpch كم يساوي؟ وكيف تكون أصلا NULL أليس المصفوفات هي التي نسمع عنها كلمة NULL دائما؟

pch=strtok(NULL," -,.");

لماذا أضفنا هذا السطر ونحن في آخر رمق من البرنامج

وطبعا الـOUTPUT هو:

اقتباس
Splitting string "- This, a sample string." into tokens:

This

a

sample

string

=================

سؤال خارج هذا الكود:

س:

if(strcmp(line,"/"))
		{
			printf("Hello.\n");
		}

هل كل الدوال لها قيمة عودة واحدة ,, يعني مين يستطيع أن يفسر لي السطر الأول ,, لإني معتاد على أنا أرى ==0 أو <=0 عند الأسطر اللتي يتواجد بها IF ???

أتمنى أن تكونوا قد أجبتموني على هذه الإسئلة .. ولكن آخر سؤال لدي هو:

لماذا كتبنا في السطر هذا:

char *pch;

لماذا جعلنا pch مؤشر من نوع char?

ولماذا لم نجعله متغير من نوع char ؟ وماذا لو لو جعلناه متغير من نوع char

يعني.. متى أخلي pch(أو اي اسم عندي) متغير أو مؤشر؟

وسلامي.

تم تعديل هذه المشاركة بواسطة The_Sniper في 1 مارس 2007 في 20:35

#2

ألا توجد إجابة

!!!

#3

السلام عليكم

أهلاً بالـ Snipper :rolleyes:

لا أدري من أين أتيت بهذا الكود و لكن سوف أحاول إجابة ما أعرفه :wacko:

اقتباس
مفهومة مصفوفة دينماكية
للأسف ليست كذلك :blink: هذه عبارة عن مصفوفة حروف عادية و ليست ديناميكية .. و السبب أن الـ Compiler سوف يحلل النص ليعرف حجمه و يحجز ذاكرة على قد حجم النص زائداً NULL .
اقتباس
ممم مؤشر من نوع char ? كلامي صحيح أم لا؟

صحيح ولكنها غير موجودة في الكود الذي في الأعلى .. :huh:

اقتباس
أعتقد إنه هذه الدالة تقوم بحذف العلامات العلامات الموجودة في الوسيط الثاني؟وهل لها وضائف أخرى؟
هذه الدالة حسب علمي تقوم بفصل النص الى Tokens ( إذا كان هذا غامضاً أستطيع إعطائك مثال )..

أما بالنسبة لـ NULL فهي عبارة عن ثابت لا أكثر و لا أقل و هو يساوي الصفر.

اقتباس
هل كل الدوال لها قيمة عودة واحدة ,, يعني مين يستطيع أن يفسر لي السطر الأول ,, لإني معتاد على أنا أرى ==0 أو <=0 عند الأسطر اللتي يتواجد بها IF ???

IF Statment تستطيع التعامل مع True أو False ,, أي تأخذ نتيجة الـ Expression و على أساس ذلك يتم تنفيذ ما بداخلها أو تجاوزه.

كل ما في الأمر أن هذه الدالة إما أن تعيد True أو False .

بالنسبة للمؤشرات فهناك الكثير من الدروس في المنتدى حولها و إذا صعب عليك شيء فقم بطرحه و ستجد الإجابة بإذن الله ..

تحياتي

#4

مشكور أخوي خالد . أنا أعلم إني متعب جدا :(

ولكن نحب نبرمج :D

إذا كان لديك مثال عن strrok فياليت تعطيني هو :) ونناقشه حبة حبة

وعن المؤشرات أنا أعرفها كأشياء أساسية للمبتدأين ولكن إذا في تعقيد أنا راح أضيع :D

عموما راح أبحث كثير اليوم

+

سوال واحد .. متى أخلي الدالة (مؤشر) ؟ ومتى لا أجعلها (مؤشر)؟

جزاك الله ألف خير

#5

معليش ثقلت علي ولكن كله من النجوم* أو بمعنى أصح (المؤشرات)

س:

void *handle(void *arg)

هذه دالة (مؤشر لإن علامة النجمة موجودة) وطبعا لاتعود بأي قيمة لإنه نوعها void لاشئ

ولكن السؤال الأهم هو ماهو المعامل الذي يمرر لها ؟ :(

والله غريب هذا الوسيط؟

مشكور أخي خالد لك وباقي الإخوان

#6

void*

تعنى ان هذه الدالة تعود بقيمة مؤشر pointer علي مكان في الرام و يمكن تحويل المؤشر الي اي نوع

float*,int*,char*,...

void* هو مؤشر غير محدد النوع

Ali Sayed

#7

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

أهلين أخ Snipper و أخ _Voodoo_ ...

بالنسبة لمثال لـ strtok أعتقد ان هذا مثال جيد :

char str[] = " 12, 34,5678	90";
char* token;
token = strtok(str, " ,");
while (token) {
	cout << token << endl;
	token = strtok(NULL, " ,");


http://www.comp.nus.edu.sg/~tanyeefa/cs1102c/mini0006.html

هذا المثال من الموقع الذي في الأعلى..

حاول الإطلاع عليه و سوف أحاول المساعدة إذا أشكل عليك شيء في هذا المثال ..

بالنسبة لـ void و *void فلهما نفس الاسم مع اختلاف الوظيفة كما وضح الأخ _Voodoo_ ..

void تعني عدم إرجاع أي قيمة أما *void فتعني أن المؤشر ليس له نوع محدد ,, و يتم تحويله إلى نوع معين عن طريق ما يسمى بالـ Dynamic Casting للمؤشر,,

تحياتي

#8

مشكورين على تفاعلكم

إن كان عندكم روابط لمواضيع تتحدث بشكل مفصل عن المؤشرات وخصوصا الدوال ياليت ترفقونها لي

وكيف ووفيت أخوي خالد Thinking Is The First Step << شي جميل

#9

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

هذه وصلة أعتقد أنها جيدة لفهم الموضوع :

http://www.newty.de/fpt/index.html

اقتباس
وكيف ووفيت أخوي خالد Thinking Is The First Step << شي جميل

:lol:

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

تحياتي

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 4 مارس 2007 في 01:07

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

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