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

استشكال في المصفوفات الحرفية

بدأه khaled_prg في 20 أبريل 2010 · 11 رد · 859 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اليوم جئتكم بسؤال يتعلق بالمصفوفات الحرفية :)

نص التمرين:

اكتب برنامج يطلب من المستخدم إدخال جملة,حرف,عدد (n) ، ثم يُظهر البرنامج جملة جديدة تبدأ بالحرف المُدخل و تتكون من n حرف.

مثال:

إذا أدخل المستخدم البيانات التالية:

الجملة:khaled

الحرف:l

العدد:5

فإن البرنامج سيظهر الجملة التالية:

led

وهذه محاولتي في التمرين:

#include<stdio.h>
int main(void)
{
char phrase[30],c;
int n,i,j;
printf("أدخل الجملة");
scanf("%s",phrase);
printf("أدخل الحرف");
scanf("%s",c);
printf("أدخل العدد");
scanf("%d",&n);
for(j=0;phrase[j];j++)
if(c==phrase[j])
for(i=0;i<n && phrase!='\0';i++)
printf("%c",phrase);
return 0;
}

ملاحظة:نتفادى الحالة التي يكون فيها الحرف المُدخل غير موجود في الجملة , و إذا تكرر نأخذ الحرف الأول.

تحياتي.

تم تعديل هذه المشاركة بواسطة khaled_prg في 20 أبريل 2010 في 01:49

#2

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

#include<stdio.h>
int main(void)
{
char phrase[30],c;
int n,i,j;
printf("Enter a Word:");
scanf("%s",phrase);
printf("Enter a letter:");
scanf(" %c",&c);
printf("Enter n:");
scanf("%d",&n);
for(i=0;phrase!='\0';i++){
if(c==phrase)
{
n+=i;
for(i;i<n && phrase!='\0';i++)
printf("%c",phrase);
}
}
return 0;
}
tvquran_6.gif

#3

تستطيع تكتب الكود بطريقة أفضل باستخدام دوال السي:

#include<stdio.h>
#include <string.h>
int main(void)
{
char phrase[30],c;

int n,i,j;
char * p;

printf("Enter a Word:");
scanf("%s",phrase);
printf("Enter a letter:");
scanf(" %c",&c);
printf("Enter n:");
scanf("%d",&n);

p=strchr(phrase,c);
p-=phrase;
printf("%.*s",n,phrase+(int)p);


}
tvquran_6.gif

#4
اقتباس

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

#include<stdio.h>
int main(void)
{
char phrase[30],c;
int n,i,j;
printf("Enter a Word:");
scanf("%s",phrase);
printf("Enter a letter:");
scanf(" %c",&c);
printf("Enter n:");
scanf("%d",&n);
for(i=0;phrase!='\0';i++){
if(c==phrase)
{
n+=i;
for(i;i<n && phrase!='\0';i++)
printf("%c",phrase);
}
}
return 0;
}

اقتباس
تستطيع تكتب الكود بطريقة أفضل باستخدام دوال السي:

#include<stdio.h>
#include <string.h>
int main(void)
{
char phrase[30],c;

int n,i,j;
char * p;

printf("Enter a Word:");
scanf("%s",phrase);
printf("Enter a letter:");
scanf(" %c",&c);
printf("Enter n:");
scanf("%d",&n);

p=strchr(phrase,c);
p-=phrase;
printf("%.*s",n,phrase+(int)p);
}

أشكرك على المساعدة :wub:

ممكن تشرح الطريقتين بشيء من التفصيل :wink: لأنني مازلت مبتدأ في لغة السي :blush: و أحتاج إلى شرح مفصل :cool:

عندي سؤال آخر :blush: :

في الطريقة الثانية كتبت:

int main(void)

ولكنك لم تكتب :

return 0;

لماذا ؟

و كبف يكون الكود صالح و أنت لم تُعِدْ قيمة للدالة الرئيسية ؟ مع أنك قلتَ في البداية أنها تُعيد عدد من النوع int !

أرجو التوضيح :) وشكرا.

في أمان الله

تم تعديل هذه المشاركة بواسطة khaled_prg في 20 أبريل 2010 في 10:25

#5

انظر هنا :

scanf("%s",c);

المتغير c حرف لذلك تستخدم معه %c

والطريقةالصحيحية :

scanf(" %c"c);

بالنسبة للدالة strchr فهي تعيد مؤشر لموقع اول حرف

بالنسبة للدالة الرئسية نعم الاصح فقط نسيت وضع ريتين .

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 20 أبريل 2010 في 19:43

tvquran_6.gif

#6
اقتباس
بالنسبة للدالة الرئسية نعم الاصح فقط نسيت وضع ريتين .

أنت قلت الأصح و لم تقل الصحيح مما يعني أن الطريقة الثانية صحيحة :wink: و لكنها ليست الأفضل (من ناحية عدم وضع return ) :huh: مع العلم أنني قمت بترجمتها في الكومبايلر و كانت صحية 100% :ohmy:

و لكن كبف يكون الكود صالح و أنت لم تُعِدْ قيمة للدالة الرئيسية ؟ مع أنك قلتَ في البداية أنها تُعيد عدد من النوع int !

أرجو التوضيح :) وشكرا.

في أمان الله

تم تعديل هذه المشاركة بواسطة khaled_prg في 21 أبريل 2010 في 10:07

#7

منطقيا يجب ان تعيد الدالة قيمه .

لكن إذا لم تكتب return 0 سوف يعيد البرنامج القيمه صفر اذا أنتهاء.

اي انها نفس الشي كتبتها ام لم تكتبها أقراء ان شئت هنا

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 21 أبريل 2010 في 11:07

tvquran_6.gif

#8
اقتباس
لكن إذا لم تكتب return 0 سوف يعيد البرنامج القيمه صفر اذا أنتهاء.

اي انها نفس الشي كتبتها ام لم تكتبها أقراء ان شئت هنا

أولا أشكرك على المساعدة :wub: و أرجو من المولى عز و جل أن يزيدك علما و إيمانا و يزيدك من فضله :) إنه على كل شيء قدير.

بالنسبة للرابط الذي وضعتَه فلم أستطع الإستفادة منه :blush: لأنني لا أعرف الإنجليزية :blush: فنحن ندرس في الجامعة باللغتين الفرنسية و العربية :wink: لذا أرجو منك أن تكتب لي خلاصة القول باللغة العربية لكي يتسنى لي الفهم أنا و باقي الإخوة الذي لا يعرفون االإنجليزية :)

في أمان الله

#9

إذا فتحت الرابط ستجد المثالي التالي :

#include<iostream>

	int main()
	{
		std::cout << "This program returns the integer value 0\n";
	}

المثال أورده مصمم اللغة نفسها.

tvquran_6.gif

#10
اقتباس

إذا فتحت الرابط ستجد المثالي التالي :

#include<iostream>

        int main()
        {
                std::cout << "This program returns the integer value 0\n";
        }

المثال أورده مصمم اللغة نفسها.

شوف يا أستاذي الفاضل :) أنا لا أشك في البروفيسور Bjarne Stroustrup و لكنني أطلب توضيح منطقي لعدم كتابة return مع أننا كتبنا في بداية الكود int main و الكود صحيح 100% ! :ohmy: :huh:

بالمناسبة :wink: فقد سألتُ أستاذنا في الجامعة و قال لي بأنه يمكننا الإستغناء عن return في بعض المترجمات ! لأن كل دالة قامت بأداء عملها بشكل صحيح ستُعيد 1 :wacko: مثل الدالة printf و scanf و ... الخ !!!

وقد سألته : الدالة التي أدت وظيفتها بشكل صحيح ستعيد قيمة إلى نفسها أو إلى الدالة الرئيسية ؟

فقال لي : إلى الدالة الرئيسية ! :ohmy:

قلت له : كيف ؟

بحسب فهمي للقضية فإن الدالة printf (مثلا) ستعيد القيمة 1 إذا تمت عملية الإخراج بشكل صحيح إلى نفسها و يمكننا إظهار هذه القيمة في الدالة الرئيسية :sleep:

لم يجبني على هذه النقطة :mad: :blush:

أرجوا التوضيح .. و إذا كتبتَ خلاصة قول البروفيسور Bjarne Stroustrup عن هذه القضية فهذا أحسن :wub:

تحياتي.

#12
اقتباس
In C++, main() need not contain an explicit return statement. In that case, the value returned is 0, meaning successful execution. For example:

الي فهمته من هذه العبارة انني لست في حاجة لوضع return 0 لان الدالة سوف تعيدها بصفر ان لم تكن مكتوبه. وهذا يعني ان البرنامج تم بنجاح.

tvquran_6.gif

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