• 0

اكتب برنامج لقراءة a[10] بلغة ++C

ممكن حل هذا السؤال 

 

اكتب برنامج لقراءة a[10]

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

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

أهلاً بك 

هذا برنامج يطبع لك الأعداد المتتابعة في مصفوفة معينة ، مشروح فيه كل خطوة بخطوتها باللغة الإنجليزية ،  يمكنك الإستفادة منه لحل المشكلة الخاصة بك فهي شبيهة الى حد كبير من هذا البرنامج ،  فقط قم باستبدال الارقام  من 0-9 الى الارقام 0 1 ،  و قم بفحص اذا كان العدد الحالي يسواي 1 أو لا ، و اذا كان بالفعل يساوي  1 تقم بإضافته الىت المصفوفة الجديدة ، و هكذا حتى تنتهي من جميع الأرقام المدخلة في البرنامج . 

// برنامج لطباعة أطول مصفوفة متتالية من الأرقام 

#include <bits/stdc++.h> 
using namespace std; 
  
// function that returns the length of the 
// longest increasing subsequence 
// whose adjacent element differ by 1 
void longestSubsequence(int a[], int n) 
{ 
    // stores the index of elements 
    unordered_map<int, int> mp; 
  
    // stores the length of the longest 
    // subsequence that ends with a[i] 
    int dp[n]; 
    memset(dp, 0, sizeof(dp)); 
  
    int maximum = INT_MIN; 
  
    // iterate for all element 
    int index = -1; 
    for (int i = 0; i < n; i++) { 
  
        // if a[i]-1 is present before i-th index 
        if (mp.find(a[i] - 1) != mp.end()) { 
  
            // last index of a[i]-1 
            int lastIndex = mp[a[i] - 1] - 1; 
  
            // relation 
            dp[i] = 1 + dp[lastIndex]; 
        } 
        else
            dp[i] = 1; 
  
        // stores the index as 1-index as we need to 
        // check for occurrence, hence 0-th index 
        // will not be possible to check 
        mp[a[i]] = i + 1; 
  
        // stores the longest length 
        if (maximum < dp[i]) { 
            maximum = dp[i]; 
            index = i; 
        } 
    } 
  
    // We know last element of sequence is 
    // a[index]. We also know that length 
    // of subsequence is "maximum". So We 
    // print these many consecutive elements 
    // starting from "a[index] - maximum + 1" 
    // to a[index]. 
    for (int curr = a[index] - maximum + 1; 
         curr <= a[index]; curr++) 
        cout << curr << " "; 
} 
  
// كود التشغيل
int main() 
{ 
    int a[] = { 3, 10, 3, 11, 4, 5, 6, 7, 8, 12 }; 
    int n = sizeof(a) / sizeof(a[0]); 
    longestSubsequence(a, n); 
    return 0; 
} 

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

مرحباً يونس ..
أنا لم أفهم جيداً ماذا تقصد ؟ هل تقصد أن المطلوب هو البحث عن أطول عنصر في المصفوفة مكون من العدد 1 مثلا لو عندنا المصفوفة التالية [11,000,11111,111] يعطيك البرنامج العدد 11111.
أم أن المطلوب مثلا يكون عندك مصفوفة بهذا الشكل [0, 1, 1, 0, 0, 1, 1, 1, 0] و يعطيك البرنامج السلسلة 111 و هذا ما فهمته من السؤال 
إذا كان هذا هو المطلوب يُمكنك كتابة البرنامج بالشكل التالي :
 


#include <iostream>
using namespace std;

// دالة مساعدة لطباعة عناصر مصفوفة عددية
void printArray(int arr[], int size)
{
    for (int i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }

    printf("\n");
}

// دالة تستقبل مصفوفة أعداد و ترجع سلسلة نصية مكونة من أطول سلسلة وحدات
string max_series(int arr[], int size)
{
    // تعريف المتغيرات المستعملة
    string l, tmp;
    int j, i = 0;
    // القيام بحلقة على عناصر المصفوفة
    while (i < size) {
        // إذا كان العنصر يساوي 1
        if (arr[i] == 1) {
            j = i;
            // القيام بحلقة مادامت العناصر القادمة تساوي 1
            while (arr[j] == 1) {
                // تركيب سلسلة الوحدات
                tmp += to_string(arr[j]);
                j++;
            }
            // شرط إذا كانت سلسلة الوحدات الحالية أطول من السلسلة المخزنة السابقة
            if (tmp.length() > l.length()) {
                l = tmp; // تغيير السلسلة السابقة بالسلسلة الحالية
                tmp = ""; // إفراغ السلسلة الحالية
            }

            i = j; // تغيير فهرس الحلقة
        } else {
            i++;
        }
    }
    return l;
}

int main() {
    // تعريف مصفوفة
    int arr[] = {0, 1, 1, 0, 0, 1, 1, 1, 1, 0};
    // حساب عدد القيم التي تحتويها المصفوفة
    int n = sizeof(arr) / sizeof(arr[0]);
    // طباعة عناصر المصفوفة
    printArray(arr, n);

    // إستدعاء الإقتران
    string l = max_series(arr, n);
    if (l.length() <= 0)
        cout << "array does not contains any 1";
    else
        cout << "serie: " << l << " ==> size: " << l.length();

}

و عند تشغيل البرنامج سيعطيك النتيجة التالية:
cpp_max_serie.thumb.PNG.3791bdd81646cea5557971d3151ed07f.PNG

يُمكنك تجربة البرنامج من خلال هذا: الرابط
بالتوفيق 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0
بتاريخ 8 ساعات قال ماجد قطوسة:

أهلاً بك 

هذا برنامج يطبع لك الأعداد المتتابعة في مصفوفة معينة ، مشروح فيه كل خطوة بخطوتها باللغة الإنجليزية ،  يمكنك الإستفادة منه لحل المشكلة الخاصة بك فهي شبيهة الى حد كبير من هذا البرنامج ،  فقط قم باستبدال الارقام  من 0-9 الى الارقام 0 1 ،  و قم بفحص اذا كان العدد الحالي يسواي 1 أو لا ، و اذا كان بالفعل يساوي  1 تقم بإضافته الىت المصفوفة الجديدة ، و هكذا حتى تنتهي من جميع الأرقام المدخلة في البرنامج . 


// برنامج لطباعة أطول مصفوفة متتالية من الأرقام 

#include <bits/stdc++.h> 
using namespace std; 
  
// function that returns the length of the 
// longest increasing subsequence 
// whose adjacent element differ by 1 
void longestSubsequence(int a[], int n) 
{ 
    // stores the index of elements 
    unordered_map<int, int> mp; 
  
    // stores the length of the longest 
    // subsequence that ends with a[i] 
    int dp[n]; 
    memset(dp, 0, sizeof(dp)); 
  
    int maximum = INT_MIN; 
  
    // iterate for all element 
    int index = -1; 
    for (int i = 0; i < n; i++) { 
  
        // if a[i]-1 is present before i-th index 
        if (mp.find(a[i] - 1) != mp.end()) { 
  
            // last index of a[i]-1 
            int lastIndex = mp[a[i] - 1] - 1; 
  
            // relation 
            dp[i] = 1 + dp[lastIndex]; 
        } 
        else
            dp[i] = 1; 
  
        // stores the index as 1-index as we need to 
        // check for occurrence, hence 0-th index 
        // will not be possible to check 
        mp[a[i]] = i + 1; 
  
        // stores the longest length 
        if (maximum < dp[i]) { 
            maximum = dp[i]; 
            index = i; 
        } 
    } 
  
    // We know last element of sequence is 
    // a[index]. We also know that length 
    // of subsequence is "maximum". So We 
    // print these many consecutive elements 
    // starting from "a[index] - maximum + 1" 
    // to a[index]. 
    for (int curr = a[index] - maximum + 1; 
         curr <= a[index]; curr++) 
        cout << curr << " "; 
} 
  
// كود التشغيل
int main() 
{ 
    int a[] = { 3, 10, 3, 11, 4, 5, 6, 7, 8, 12 }; 
    int n = sizeof(a) / sizeof(a[0]); 
    longestSubsequence(a, n); 
    return 0; 
} 

 

 

بتاريخ 8 ساعات قال ماجد قطوسة:

أهلاً بك 

هذا برنامج يطبع لك الأعداد المتتابعة في مصفوفة معينة ، مشروح فيه كل خطوة بخطوتها باللغة الإنجليزية ،  يمكنك الإستفادة منه لحل المشكلة الخاصة بك فهي شبيهة الى حد كبير من هذا البرنامج ،  فقط قم باستبدال الارقام  من 0-9 الى الارقام 0 1 ،  و قم بفحص اذا كان العدد الحالي يسواي 1 أو لا ، و اذا كان بالفعل يساوي  1 تقم بإضافته الىت المصفوفة الجديدة ، و هكذا حتى تنتهي من جميع الأرقام المدخلة في البرنامج . 


// برنامج لطباعة أطول مصفوفة متتالية من الأرقام 

#include <bits/stdc++.h> 
using namespace std; 
  
// function that returns the length of the 
// longest increasing subsequence 
// whose adjacent element differ by 1 
void longestSubsequence(int a[], int n) 
{ 
    // stores the index of elements 
    unordered_map<int, int> mp; 
  
    // stores the length of the longest 
    // subsequence that ends with a[i] 
    int dp[n]; 
    memset(dp, 0, sizeof(dp)); 
  
    int maximum = INT_MIN; 
  
    // iterate for all element 
    int index = -1; 
    for (int i = 0; i < n; i++) { 
  
        // if a[i]-1 is present before i-th index 
        if (mp.find(a[i] - 1) != mp.end()) { 
  
            // last index of a[i]-1 
            int lastIndex = mp[a[i] - 1] - 1; 
  
            // relation 
            dp[i] = 1 + dp[lastIndex]; 
        } 
        else
            dp[i] = 1; 
  
        // stores the index as 1-index as we need to 
        // check for occurrence, hence 0-th index 
        // will not be possible to check 
        mp[a[i]] = i + 1; 
  
        // stores the longest length 
        if (maximum < dp[i]) { 
            maximum = dp[i]; 
            index = i; 
        } 
    } 
  
    // We know last element of sequence is 
    // a[index]. We also know that length 
    // of subsequence is "maximum". So We 
    // print these many consecutive elements 
    // starting from "a[index] - maximum + 1" 
    // to a[index]. 
    for (int curr = a[index] - maximum + 1; 
         curr <= a[index]; curr++) 
        cout << curr << " "; 
} 
  
// كود التشغيل
int main() 
{ 
    int a[] = { 3, 10, 3, 11, 4, 5, 6, 7, 8, 12 }; 
    int n = sizeof(a) / sizeof(a[0]); 
    longestSubsequence(a, n); 
    return 0; 
} 

 

 

في الحقيقة صديقي.. تجد أن هذه السؤال يحتوي على بعض التعقيد... مع الشرح.. 

لهذا احتاج البرنامج جاهزا..

@عبود سمير ..

ما اقصده هو الاحتمال  الأول 

 

  أن المطلوب هو البحث عن أطول عنصر في المصفوفة مكون من العدد 1 مثلا لو عندنا المصفوفة التالية [11,000,11111,111] يعطيك البرنامج العدد 11111.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن