اذهب إلى المحتوى
  • 0

structures and array

محمد عنيبة

السؤال

#include <iostream>
#include <string.h>
using namespace std;
struct stud {
    char n[30];
    int sn;
    float dr[3], sum, avr;
};

void read(stud x[], int n)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        cout << "\n enter student " << i << " name:";
        cin.getline(x[i].n, 30);
        cout << "\n enter student " << i << " sn:";
        cin >> x[i].sn;
        cout << "\n enter student " << i << " 3 dr:";
        x[i].sum = 0;
        for (j = 0; j < 3; j++)
        {
            cin >> x[i].dr[j];
            x[i].sum += x[i].dr[j];
        }
        x[i].avr = x[i].sum / 3;
        cin.ignore();
    }
}
void print(stud x[], int n)
{
    int i, j;
    cout <<"\nname" << "\t" << "s n\td1\td2\td3\tsum\tavg\n";
    cout << "==================================================";
    for (i = 0; i < n; i++)
    {
        cout << "\n" << x[i].n << "\t" << x[i].sn << "    ";
        for (j = 0; j < 3; j++)
            cout << x[i].dr[j] <<"    ";
        cout << " " << x[i].sum << " " << x[i].avr;
    }
}
void sort(stud x[], int n)
{
    int i, j;
    stud t;
    for (i = 0; i < n; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (strcmp(x[i].n, x[j].n) > 0)
            {
                t = x[i];
                x[i] = x[j];
                x[j] = t;
            }
        }
    }
}

void search(stud x[], int n)
{
    char s[30];

    cout << "enter the student you are searching for: ";
    cin >> s;
    for (int i = 0; i < n; i++)
    {      
        if (x[i].n == s)
        {
            cout <<x[i].n << "\t" << x[i].sn << "    ";
            for (int j = 0; j < 3; j++)
                cout << x[i].dr[j] << "    ";
            cout << " " << x[i].sum << " " << x[i].avr;
        }
        else
        {
            cout << "wrong search";
        }
    } 
}

int main()
{
    stud list[120];
    int n = 3;
    read(list, n);
    print(list, n);
    sort(list, n);
    print(list, n);
    search(list, n);

    return 0;

}

هذا برنامج  يصمم تركيبة (اسم طالب ورقمه ودرجاته في ثلاث مواد ) لثلاث طلاب ويحسب المتوسط والمجموع لكل طالب ويرتب الطلاب في النهاية يبحث عن طالب بس تلك الأخيرة فيها مشكلة فهو لا يبحث عن طالب بل يعتبر الشرط خاطئاً 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

السلام عليكم 

ده تصحيح للكود بتاعك

#include <iostream>
#include <string.h>
using namespace std;
struct stud {
    char n[30];
    int sn;
    float dr[3], sum, avr;
};

void read(stud x[], int n)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        cout << "\n enter student " << i << " name:";
        cin.getline(x[i].n, 30);
        cout << "\n enter student " << i << " sn:";
        cin >> x[i].sn;
        cout << "\n enter student " << i << " 3 dr:";
        x[i].sum = 0;
        for (j = 0; j < 3; j++)
        {
            cin >> x[i].dr[j];
            x[i].sum += x[i].dr[j];
        }
        x[i].avr = x[i].sum / 3;
        cin.ignore();
    }
}
void print(stud x[], int n)
{
    int i, j;
    cout <<"\nname" << "\t" << "s n\td1\td2\td3\tsum\tavg\n";
    cout << "==================================================";
    for (i = 0; i < n; i++)
    {
        cout << "\n" << x[i].n << "\t" << x[i].sn << "    ";
        for (j = 0; j < 3; j++)
            cout << x[i].dr[j] <<"    ";
        cout << " " << x[i].sum << " " << x[i].avr;
    }
}
void sort(stud x[], int n)
{
    int i, j;
    stud t;
    for (i = 0; i < n; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (strcmp(x[i].n, x[j].n) > 0)
            {
                t = x[i];
                x[i] = x[j];
                x[j] = t;
            }
        }
    }
}

void search(stud x[], int n)
{
    char s[30];

    cout << "enter the student you are searching for: ";
    cin >> s;
    for (int i = 0; i < n; i++)
    {      
        if (strcmp(x[i].n , s) == 0)
        {
            cout <<x[i].n << "\t" << x[i].sn << "    ";
            for (int j = 0; j < 3; j++)
                cout << x[i].dr[j] << "    ";
            cout << " " << x[i].sum << " " << x[i].avr;
        }
        else
        {
            if(i == (n-1))
            cout << "wrong search";
        }
    } 
}

int main()
{
    stud list[120];
    int n = 3;
    read(list, n);
    print(list, n);
    sort(list, n);
    print(list, n);
    search(list, n);

    return 0;

}

المشكلة كانت انك بتقارن مصفوفة بنص باستخدام ال== وده غلط عدلت لك الموضوع بعمل المقارنة بواسطة الدالة ()strcmp 

بعدها كانت المشكلة انه لو كان العنصر اللي تبحث عنه بالاندكس 3 مثلاً حيطبع wrong search مرتين قبل ما يجيب القيمة الصحيحة فقمت اضفت شرط ان طباعة العبارة wrong search يتم فقط لو كان العنصر اخر عنصر في المصفوفة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...