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

[ تمت الإجابة ]مشكل في كود بالمصفوفات والتوابع

بدأه Kimsekai في 16 ديسمبر 2012 · 5 رد · 538 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم أنا جديد في المنتدى و هذا أول طلب عندي ، أريد صنع بنرامج لإضافة أسماء المدن في Array، إستعملتFunction للبحت عن إذا ما كانت المدينة موجودة في ال Array الذي عرفته فوق أم لا ، لكن المشكل هو أن الكود لا يعمل ما أريد لما أضيف مدينة جديدة و أضغط على 3 لا يعطيني جميع المدن التي سجلتها ! ، ممكن أن تعلموني أين أخطأت لو سمحتم

و شكرا لكم

<#include <cstdlib
#include <iostream>
#include <fstream>
using namespace std;
int recherche(string V[], string Vil, int N);

int main(int argc, char *argv[])
{
    string V[200]={"Agadir","Fes","Tanger","Casablanca"},Vil;
    int i,j,y,choix,N;
    N=4;
    do
    {
    cout<<"1.	Créer une nouvelle ville."<<endl;
    cout<<"2.	Lister une ville."<<endl;
    cout<<"3.   Quiter."<<endl;
    cin>>choix;
    switch(choix)
    {
            case 1:
                 cout<<"Saisir la ville a ajouter : "<<endl;
                 cin>>Vil;
//               N=V.size();
                 y=recherche(V,Vil,N);
                 if(y=-1)
                 {
                         V[N]=Vil;
                     cout<<"La Ville est ajoutée"<<endl;
                 }
                 else
                 {
                       cout<<"Cette ville déja existe "<<endl;
                       }
                 break;
            case 2:
                 for(i=0;i<N;i++)
                 {
                                 cout<<V<<endl;

                  }

                 break;
            }
            }
            while(choix!=3);
    system("PAUSE");
    return EXIT_SUCCESS;
}
int recherche(string V[], string Vil, int N)
{
    int i,y=-1;
    for(i=0;i<N;i++)
    {
                    if(Vil==V)
                    {
                                 y=i;
                    }
     }
     return y;
}

تم تعديل هذه المشاركة بواسطة Kimsekai في 16 ديسمبر 2012 في 17:23

#2

الخطأ الأول: المعامل == يستخدم للمقارنة، أما المعامل = يستخدم للـ assignment، و بالتالي هذا السطر :

if(y=-1)

من المفترض أن يكون كالتالي:

if ( y == -1 )

الخطأ الثاني: لابد داخل switch ان تكون هناك case default و في حالتك شكلها قد يبدو كالتالي:

default:
	cout << "invalid choice try again"  << endl;
	break;

داخل recherche إذا تم إيجاد العنصر الذى يتم البحث عنه سيتم حفظ موقعه داخل y و المقترض بعدها إستخدام break للخروج من الـ loop حيث لا يوجد داعي للمتابعه.

داخل recherche عملية البحث عن النص ستكون case sensitive و بالتالي إذا كانت المقارنة بين إسمي مدينتين مع إختلاف حالة الحروف حينها ستكون النتيجة false.

الرقم 3 ينهي البرنامج و الرقم 2 هو من يطبع محتويات المصفوفة.

إذا تخطي عددالمدن 100 سيحدث exception.

استخدم المسافات و السطور الفارغة بقدر الإمكان للتسهيل على قارئ الكود.

الكود بعد التعديل:

#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
int recherche(string V[], string Vil, int N);

int main(int argc, char *argv[])
{
    string V[200]={"Agadir","Fes","Tanger","Casablanca"}, Vil;
    int i, j, y, choix, N;
    N = 4;

    do
    {
		cout<<"1.   Créer une nouvelle ville." << endl;
		cout<<"2.   Lister une ville." << endl;
		cout<<"3.   Quiter." << endl;
		cin>>choix;

		switch(choix)
		{
		case 1:
			cout << "Saisir la ville a ajouter : " << endl;
			cin >> Vil;
	//		N = V.size();
			y = recherche(V,Vil,N);
			if ( y == -1 )
			{
				V[N] = Vil;
				cout << "La Ville est ajoutée" << endl;
			}
			else
			{
				cout << "Cette ville déja existe " << endl;
			}
			break;

		case 2:
			for ( i = 0; i < N; i++)
			{
				cout << V << endl;
			}
			break;

		default:
			cout << "invalid choice try again"  << endl;
			break;
		}
	}
	while(choix != 3);

    system("PAUSE");

    return EXIT_SUCCESS;
}

int recherche(string V[], string Vil, int N)
{
    int i, y = -1;

    for ( i = 0; i < N; i++)
    {
		if(Vil == V)
		{
			y = i;
			break;
		}
	}
	return y;
}

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة C++er في 16 ديسمبر 2012 في 18:07

1

مدونتي: C++ Tips and Tricks

#3

شكرا جزيلا لك أخي الغالي :)

#4

لكن عندي مشكل آخر ، لاحضت السطر

//              N = V.size();

وضعته على شكل كومنت لأنه لا يستجيب عند ال compilation

ماذا أفعل ؟

#5

الكائن V عبارة عن مصفوفة من string و ليس string واحدة :)

#6

لو سمحت أخي ممكن التوضيح أكتر لم أفهم ، و إعطائي حلا :)

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

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

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

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

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