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

أريدالمساعدة ياجماعة ؟؟("سؤال في السي")

مغلق
بدأه angel" في 9 أكتوبر 2004 · 5 رد · 497 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عندي برنامج صغير يطلب من المستخدم ان يدخل عدة سطور من النصوص ثم أطبع له في جدول عددظهور كل حرف؟؟؟

كيف يحل؟؟؟

هل يوجد دالة تحسب عددظهور الحرف؟؟؟وهل أخزنهافي مصفوفة واستخدمpointer of Array???

شــــــــــــــــــــــاكرلكم ...زأرجومنكمردسريع...

#2

السلام عليكم,

من بين الطرق لحل هذا هي أن نعمل array من نوع int مثلا int freq[26] تكون عندنا فيه 62 قيمة وكل قيمة ستدل على عدد التكرار لحرف ما فمثلا freq[0] سيحتوي على عدد تكرار الحرف A بينما freq[1] سيحتوي على تكرار الحرف B إلى غير ذلك.

بعد هذا نقوم بقراءة الملف حرفا بحرف وكل حرف سنغيره إلى كابتل مثلا وننقص منه قيمة 65 وهي قيمة الحرف A ونضع النتيجة في متغير x مثلا . وهنا ستكون عندنا x تسلوي 0 إذا كان الحرف A وستكون قيمتها 1 إذا كان الحرف B إلى غير ذلك . وبعد هذا ما علينا سوى أن نزيد 1 إلى التغير freq[x] كما يلي freq[x]++.

وفي النهاية سيعطينا كل array عدد تكرار الحرف الذي يدل عليه.

إلى اللقاء.

#3

شكراا جزيل لك ياclik...بس مافهمت عليك

لكن أريدالحل باpointer

وهذا الكود ضبط لسطرواحدبس(جملة واحدة فقط)وانا أريدلعدة سطور

#include<stdio.h>

#include<string.h>

int main(){

char s[80],*p,ch;

int l,i,c,j;

printf("ENTER THE TEXT \n");

gets(s);

l=strlen(s);

p=s;

for(j=1;(j<=l);++p,j++){

c=1;

for(i=1;(i<l);i++)

if((*p==*(p+i)))

if(*p!='\0')

{ c++;

*(p+i)='\0';}

else

c=0;

ch=*p;

if(c!=0)

printf("%c%d\n",ch,c);}

return 0;}

#4

مرحباً..

هذه هي الطريقة التي تفضل بكتابتها chik

انا قمت بترجمتها لكود

#include <stdio.h>

char to_lower(char s)
{
	if(s >= 'A' && s <= 'Z')
  return (s + 32);
	else
  return s;
}

int main()
{
	int c, ch, i;
	int freq[26];

	// this is to initialize the variables.
	for(i=0; i<26; i++)
  freq = 0;

	while((c=getchar()) != 'q')
	{
  ch = to_lower(c); // we now have a lower case character in ch
  
  if(ch >= 'a' && ch <='z')
 	 freq[ch-'a']++;
	}

	printf("\n=== result ====\n");
	for(i=0; i<26; i++)
  printf("%c freq: %d\n", i+'a', freq);


	return 0;
}

سيقوم هذا البرنامج باستقبال الحروف (الاسطر) حتي تدخل حرف q

بالتوفيق !! :) :)

#5

مشكوووووووووووووووورجزيل الشكر وجعله في موازيين حسناتك باجربه وأشوف

#6

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

السلام عليكم

حاولت حل الكود بعد فهم ماقاله الاخ المشرف chik فله الشكر.

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

غير مايلي بالبرنامج :

1 – غير المصفوفة CHAR بحيث تحتوي كل الحروف من a – z

A-Z .

2 – غير المصفوفة التي تحسب التكرار للحرف countCHAR الى 52 بدلا 8 . وهي عدد الحروف.

3 – غير كل for من 8 إلى 52 .

لم أحاول إن اكتب كل الكود حتى تستطيع أن تقوم بالتعديلات وأنت فاهم . ولأني مشغول في اختبار الثلاثاء أن شاء الله

بالتوفيق.

البرنامج

#include <stdio.h>
#include <string.h>


void CountCarcter();

int main()
{
	CountCarcter();

	return 0;
}


void CountCarcter()
{

	char TEMP[512];
	char CHAR[] = {'A','B','C','D','a','b','c','d' }; 
	char ch;
	int CountCHAR[8]; //CountCHAR[52];
	int n,i;

	for( i=0; i<8; i++ )
  CountCHAR = 0;


	i = 0;

	printf("Enter TEXT :\n");
	ch = getchar();

	while( ch != '.' ) 
	{
  TEMP = ch;
  ch = getchar();
  i++;

	}

  TEMP = '\0';
  n = strlen(TEMP);

  for( i=0; i<n; i++ )
  {
 	 for( int j=0; j<n; j++ )
 	 {
    if( CHAR == TEMP[j] )
    {
   	 CountCHAR += 1; 

    }
 	 }


  }

  for( i=0; i<8; i++ )
  printf("\n\t%c = %d ",CHAR,CountCHAR );

  printf("\n\n\n");

  

}

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

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

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

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

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

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

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

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