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

مساعدة في تحويل برنامج من لغة السي إلى لغة السي بلص بلص

بدأه time run error في 20 فبراير 2011 · 3 رد · 554 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لو سمحتوا في حد يقدر يحولي هذا البرنامج من لغة السي إلى لغة السي بلص بلص

وإذا ممكن بغيت أعرف الفرق في كودات اللغتين

يعني كل كود في السي وايش يقابله في لغة السي بلص بلص

وشكرا لكم جزيلا

الكود:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*
 * 
 */
struct Point
{
    int x;
    int y;
};

struct Point pt[10001];
int compare_x(const void* a,const void* b)
{
    struct Point* A = (struct Point*) a;
    struct Point* B = (struct Point*)b;

    if (A->x == B->x)
        return 0;
    else if (A->x > B->x)
        return 1;
    else
        return -1;
}

int compare_y(const void* a,const void* b)
{
    struct Point* A = (struct Point*)a;
    struct Point* B = (struct Point*)b;

    if (A->y == B->y)
        return 0;
    else if (A->y > B->y)
        return 1;
    else
        return -1;
}
float distance(struct Point a,struct Point b)
{
    return sqrt (( (a.x-b.x)*(a.x - b.x) ) + (  (a.y-b.y)*(a.y-b.y)  ));
}
float divide_conquer(struct Point pt[],int l,int r)
{
    if (l==r)
    {
        return 0;
    }
    if ((r-l)==1)
    {
      return distance(pt[l],pt[r]);
    }

    else if ((r - l) == 2)
    {
        int i,j ; float min_dist; float tmp;
        min_dist = distance(pt[l],pt[r]);
        for (i = l ; i < r; i++)
            for (j = i+1; j <= r; j++)
            {
                tmp = distance(pt,pt[j]);
                if (tmp < min_dist)
                    min_dist = tmp;
            }
        return min_dist;
    }
    else
    {
        float u,v; int m; float min_dist; int i,j, k;
        m = (l+r) / 2;
        u = divide_conquer(pt,l,m);
        v = divide_conquer(pt,m,r);
        min_dist = (u < v ? u : v);

        if (m-1 >= l)
        {
            for (i = m-1; i >= l; i--)
                if (distance(pt[m],pt) > min_dist) break;

        }
        if (m+1 <= r)
        {
            for (j = m+1; j <= r; j++)
                if (distance(pt[m],pt[j]) > min_dist) break;
        }

        for (  ; i < j; i++)
            for (k = i+1; k <= j; k++)
            {
                u = distance(pt,pt[k]);
                if (u < min_dist)
                    min_dist = u;
            }

        return min_dist;
    }
}

float brute_force(struct Point ar[],int N)
{
    int i,j;
    float min_dist,tmp;
    min_dist = distance(ar[0],ar[1]);
    for (i=0;i<N-1;i++)
        for (j=i+1;j<N;j++)
        {
            tmp = distance(ar,ar[j]);
            if (tmp < min_dist)
                min_dist = tmp;
        }
    return min_dist;
}
int main()
{
    int N; int i; float d;

    freopen("input.in","r",stdin);
    while (1)
    {

        fscanf(stdin,"%d",&N);

        if (N == 0 ) break;

        for (i = 0 ; i < N; i++)
        {
            fscanf(stdin,"%d %d",&pt.x,&pt.y);
        }

        qsort(pt,N,sizeof(struct Point),compare_x);

        d = divide_conquer(pt,0,N-1);

        if (d < 10000)
            printf("%.4f\n",d);
        else
            printf("INFINITY/n");

    }
}

تم تعديل هذه المشاركة بواسطة هويدي في 21 فبراير 2011 في 13:29

#2

قم بإستخدام iostream عوضا عن stdio ... في fopen .. و printf و أخواتهما..

و إستخدم cmath على أنها math.h ..

بالنسبه ل stdlib.h ... لم تستخدمها؟

#3
time run error كتب:

السلام عليكم

لو سمحتوا في حد يقدر يحولي هذا البرنامج من لغة السي إلى لغة السي بلص بلص

وإذا ممكن بغيت أعرف الفرق في كودات اللغتين

يعني كل كود في السي وايش يقابله في لغة السي بلص بلص

وشكرا لكم جزيلا

الكود:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*
 * 
 */
struct Point
{
    int x;
    int y;
};

struct Point pt[10001];
int compare_x(const void* a,const void* b)
{
    struct Point* A = (struct Point*) a;
    struct Point* B = (struct Point*)b;

    if (A->x == B->x)
        return 0;
    else if (A->x > B->x)
        return 1;
    else
        return -1;
}

int compare_y(const void* a,const void* b)
{
    struct Point* A = (struct Point*)a;
    struct Point* B = (struct Point*)b;

    if (A->y == B->y)
        return 0;
    else if (A->y > B->y)
        return 1;
    else
        return -1;
}
float distance(struct Point a,struct Point b)
{
    return sqrt (( (a.x-b.x)*(a.x - b.x) ) + (  (a.y-b.y)*(a.y-b.y)  ));
}
float divide_conquer(struct Point pt[],int l,int r)
{
    if (l==r)
    {
        return 0;
    }
    if ((r-l)==1)
    {
      return distance(pt[l],pt[r]);
    }

    else if ((r - l) == 2)
    {
        int i,j ; float min_dist; float tmp;
        min_dist = distance(pt[l],pt[r]);
        for (i = l ; i < r; i++)
            for (j = i+1; j <= r; j++)
            {
                tmp = distance(pt,pt[j]);
                if (tmp < min_dist)
                    min_dist = tmp;
            }
        return min_dist;
    }
    else
    {
        float u,v; int m; float min_dist; int i,j, k;
        m = (l+r) / 2;
        u = divide_conquer(pt,l,m);
        v = divide_conquer(pt,m,r);
        min_dist = (u < v ? u : v);

        if (m-1 >= l)
        {
            for (i = m-1; i >= l; i--)
                if (distance(pt[m],pt) > min_dist) break;

        }
        if (m+1 <= r)
        {
            for (j = m+1; j <= r; j++)
                if (distance(pt[m],pt[j]) > min_dist) break;
        }

        for (  ; i < j; i++)
            for (k = i+1; k <= j; k++)
            {
                u = distance(pt,pt[k]);
                if (u < min_dist)
                    min_dist = u;
            }

        return min_dist;
    }
}

float brute_force(struct Point ar[],int N)
{
    int i,j;
    float min_dist,tmp;
    min_dist = distance(ar[0],ar[1]);
    for (i=0;i<N-1;i++)
        for (j=i+1;j<N;j++)
        {
            tmp = distance(ar,ar[j]);
            if (tmp < min_dist)
                min_dist = tmp;
        }
    return min_dist;
}
int main()
{
    int N; int i; float d;

    freopen("input.in","r",stdin);
    while (1)
    {

        fscanf(stdin,"%d",&N);

        if (N == 0 ) break;

        for (i = 0 ; i < N; i++)
        {
            fscanf(stdin,"%d %d",&pt.x,&pt.y);
        }

        qsort(pt,N,sizeof(struct Point),compare_x);

        d = divide_conquer(pt,0,N-1);

        if (d < 10000)
            printf("%.4f\n",d);
        else
            printf("INFINITY/n");

    }
}

لا تقم بشيء :)

في حقيقه الامر سوف يعمل البرنامج بالسي بلس كما في السي ، اي ان اي برنامج تكتبه بلغه السي القديمه سيعمل بالسي بلس ، قد يكون هناك اختلافات بسيطه جداً جداً لل compilers مثلا ولا تعد تذكر.

هل برنامجك مكتوب بال سي نعم

هل برنامجك مكتوب بالسي بلس نعم ايضاً

حيث ان ال ++C امتداد لل سي .

اذا اردت ان تصحح سؤالك سيكون

كيف احول البرنامج من procedural الى object-oriented

#4

شكرا لكل من رد

ربما لم أجيد صياغة السؤال

لذلك لم تفهموا قصدي

ما كنت أقصده هو :

الكودات التي تقابل السي في لغة السي بلص

مثلا

print تقابلها cout

fscan تقابلها cin

وهكذا

واريد توضيح أكثر للمكتبات في السي والسي بلص

أرجو أن يكون السؤال أو الإستفسار وضح لديكم

وأرجو المساعدة

شكرا

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

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

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

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

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