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

[مخالف]اين الخطأ بربكم

مغلق
بدأه justalayoubi في 25 أبريل 2012 · 10 رد · 347 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بربكم ساعدوني يا اخوتي هذه المره ....

فقد طرحت هذا السؤال في مرتين سابقتين ولم اجد الجواب الشافي ... ويعلم الله كم اجتهدت كي اكتب هذا البرنامج ولكن به قليل من الاخطاء ( ينفذ فقط الجزء الخاص بمعكوس و منقول المصفوفه ولكن يعطيني خطأ عند الضرب)

من كان لديه فكره فليساعدني بها ساعدكم الله ووفقكم ....

* مرفقه البرنامج .

bool.cpp

#2

لازالت اقرأ بداية الكود ولكن هذا السطر غريب نوع ما

B = new int[rb*cb];

في حين انك عرفت B كمؤشر من نوع float اعتقد انك تحتاج اما لتغيير نوع المتغير او عمل casting

تم تعديل هذه المشاركة بواسطة mental-driller في 25 أبريل 2012 في 12:57

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3

اولا.. اشكرك كثيرا علي الرد وقراءتك للبرنامج

حاولت تغيير نوع المتغيير ولم يجدي نفع مازال البرنامج يعطيني رساله خطأ عند التنفيذ .... اما casting فلا ادري كيف اقوم يذلك :sad: (انا مبتدئه بالبرمجه)

#4

هل من الممكن ان تكتب لي الخطأ ؟

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#5

bool.cpp(91) : error C2664: 'multiply' : cannot convert parameter 1 from 'float *' to 'int *'

#6

1>bool.obj : error LNK2001: unresolved external symbol "void __cdecl multiply(float *,int,float *,int,int,float *)" (?multiply@@YAXPAMH0HH0@Z)

fatal error LNK1120: 1 unresolved externals

وهذه الاخطاء بعد التعديل في نوع المتغير

#7
justalayoubi كتب:

بربكم ساعدوني يا اخوتي هذه المره ....

فقد طرحت هذا السؤال في مرتين سابقتين ولم اجد الجواب الشافي ... ويعلم الله كم اجتهدت كي اكتب هذا البرنامج ولكن به قليل من الاخطاء ( ينفذ فقط الجزء الخاص بمعكوس و منقول المصفوفه ولكن يعطيني خطأ عند الضرب)

من كان لديه فكره فليساعدني بها ساعدكم الله ووفقكم ....

* مرفقه البرنامج .

أخى الكريم لقد أصلحت كل الاخطاء التى بالكود . الكود الاصلي يقع على يمين الكود المعدل فى صورة تعليقات وفقنا واياك الله

واى اخطاء نرجو ادراجها هنا.

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

/* 
 * File:   main.cpp
 * Author: Mohammed Abu Zayed
 * * Created on April 25, 2012, 1:02 PM
 */

#include <cstdlib>
#include <cstdio>
#include<iostream>
#include <iomanip> //#include<conio.h>

using namespace std;

#define MAX 10

void transpose(float *A, int m, int n);
void inverse(float *AT, int ra, int ca);
void multiply(
              int* A, //first matrix 
              int ra, //first matrix rows 
              int* B, //second matrix 
              int cb, //second matrix columns 
              int sh, //SHARED DIMENSION as 'first' columns and 'second' rows MUST BE THE SAME 
              int* X //to store the result
              );

void get_mat(float *m, int &X, int &c); // void get_mat(float*& m, int& X, int& c)
void disp(float* m, int X, int c);
void multiply(float* AI, int ra, float* B, int cb, int sh, float* X); // void multiply(int* AI, int ra, int* B, int cb, int sh, int* X);

float a[10][10];
float b[10][10];
float c[10][10];

int main()
{
    float *A, *AI, *AT, *B, *X;
    int ra, ca; // rows and columns for matrix ai
    int rb, cb; // rows and columns for matrix b
    int i, j;
    cout << "First matrix size(rows columns) = ";
    cin >> ra >> ca;

    cout << "Second matrix size(rows columns) = ";
    cin >> rb >> cb;

    //if (ca != rb){
    //	cout << "Error: The matrices cannot be multilplied, size mismatch.";
    //	return 0;  
    //}

    A = new float[ra * ca];
    AT = new float[ra * ca];
    AI = new float[ra * ca];
    B = new float[rb * cb]; //  B = new int[rb * cb];
    X = new float[ra * cb]; // X = new int[ra * cb];


    get_mat(A, ra, ca);
    get_mat(B, rb, cb);
    cout << "Original matrix\n";
    disp(A, ra, ca);


    for (i = 0; i < ca; i++)
        for (j = 0; j < ra; j++)
        {
            a[j] = A[ca * i + j];
            cout << a[j] << "\n";

        }

    //TRANSPOSE		
    transpose(A, ra, ca);

    cout << "Transposed matrix\n";

    for (i = 0; i < ca; i++)
        for (j = 0; j < ra; j++)
        {
            AT[ca * i + j] = a[j];
            cout << AT[ca * i + j] << "\n";

        }
    //INVERSE
    inverse(AT, ra, ca);

    cout << "Inverse matrix\n";

    for (i = 0; i < ca; i++)
        for (j = 0; j < ra; j++)
        {
            AI[ca * i + j] = b[j];
            cout << AI[ca * i + j] << "\n";


        }
    //MULTIPLY
    //multiply(int* AI, int ra, int* B, int cb, int sh, int* X);
    multiply(AI, ra, B, cb, ca, X);    

    cout << "\n\nResult = \n";
    disp(X, ra, cb);
    cout << "\nResult Transpose = \n";
    disp(AT, ra, ca);
    cout << "\nResult Inverse = \n";
    disp(AI, ra, ca);

    cout << "Press any key to exit...";
    system("puase"); // getch();
    delete[] A;
    delete[] AT;
    delete[] AI;


    return 0;
}

void transpose(float *A, int m, int n)
{
    int i, j;

    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
        {
            a[j] = A[n * i + j];
            cout << a[j] << "\n";
        }

    cout << endl << "Displaying Matrix Transpose: " << endl << endl;
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            cout << a[j] << " ";
        }
        cout << endl << endl;
    }

    std::cin.get(); // getch();
}

void inverse(float *AT, int ra, int ca)
{

    float d, m;
    int i, j, k;

    for (i = 0; i < ra; i++)
        for (j = 0; j < ca; j++)
        {
            a[j] = AT[ca * i + j];
            cout << a[j] << "\n";
        }


    for (i = 0; i < ca; i++)
    {
        for (j = 0; j < ra; j++)
        {
            if (i == j)
                b[j] = 1;
            else
                b[j] = 0;
        }
    }

    if (a[0][0] == 0)
    {
        for (j = 0; j < ca; j++)
        {
            c[0][j] = b[1][j];
            c[0][j] = a[1][j];
            a[1][j] = a[0][j];
            a[0][j] = c[0][j];
            b[1][j] = b[0][j];
            b[0][j] = c[0][j];
        }
    }

    for (i = 0; i < ca; i++)
    {
        d = a;

        for (j = 0; j < ra; j++)
        {
            a[j] = a[j] / d;
            b[j] = b[j] / d;
        }

        for (k = 0; k < ca; k++)
        {
            if (k != i)
            {
                m = a[k];
                for (j = 0; j < ra; j++)
                {
                    a[k][j] = a[k][j]-(a[j] * m);
                    b[k][j] = b[k][j]-(b[j] * m);
                }
            }
        }
    }

    cout << "\nInverse of matrix is:\n"; //printf("\nInverse of matrix is:\n");
    for (i = 0; i < ca; i++)
    {
        for (j = 0; j < ra; j++)
            printf(" %f ", b[j]);

        printf("\n");

    }
    std::cin.get(); // getch();
}

void get_mat(float *m, int &X, int &c)
{
    cout << "Enter [" << X << "x" << c << "] Matrix :\n";
    for (int i = 0; i < X * c; i++)
        cin >> m;
}

void multiply(float* AI, int ra, float* B, int cb, int sh, float* X)
{
    for (int i = 0; i < ra * cb; ++i)
    {
        X = 0;
        for (int j = 0; j < sh; ++j)
            X += AI[(i / cb) * sh + j] * B[i % cb + j * cb];
        if (X > 1)
        {
            X = 1;
        }
    }
}

void disp(float* m, int X, int c)
{
    for (int i = 0; i < X * c; i++)
    {
        !(i % c) && cout << endl;
        cout << m << '\t';
    }
    cout << endl;
}

//*/

وها هى المخرجات:

First matrix size(rows columns) = 2
2
Second matrix size(rows columns) = 2
2
Enter [2x2] Matrix :
1
2
3
4
Enter [2x2] Matrix :
5
6
7
8
Original matrix

1       2
3       4
1
2
3
4
1
2
3
4

Displaying Matrix Transpose: 

1 3 

2 4 

Transposed matrix
1
3
2
4
1
3
2
4

Inverse of matrix is:
 -2.000000  1.500000 
 1.000000  -0.500000 

Inverse matrix
-2
1.5
1
-0.5


Result = 

0.5     0
1       1

Result Transpose = 

1       3
2       4

Result Inverse = 

-2      1.5
1       -0.5
sh: puase: not found
Press any key to exit...
RUN SUCCESSFUL (total time: 19s)

هذا والله ولى التوفيق.

تم تعديل هذه المشاركة بواسطة AudaNix في 25 أبريل 2012 في 14:46

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#8

مشكور اخي علي البرنامج و وفقك الله في حياتك ....

ولكن هذا البرنامج لاينفذ تعليمه الضرب ( غير موجود في المخرجات)

واليك الاصل في البرنامج ...

اكتب برنامج بحيث يكون الدخل A ,B و يكون الخرج X= A.B

(A عباره عن معكوس منقول مصفوفه ) اي لابد من ايجاد منقول المصفوفه A وبعدها نوجد معكوسها ومن ثم تضرب في B وهكذا نحصل علي الخرج :sad: :blink:

#9
justalayoubi كتب:

مشكور اخي علي البرنامج و وفقك الله في حياتك ....

ولكن هذا البرنامج لاينفذ تعليمه الضرب ( غير موجود في المخرجات)

واليك الاصل في البرنامج ...

اكتب برنامج بحيث يكون الدخل A ,B و يكون الخرج X= A.B

(A عباره عن معكوس منقول مصفوفه ) اي لابد من ايجاد منقول المصفوفه A وبعدها نوجد معكوسها ومن ثم تضرب في B وهكذا نحصل علي الخرج :sad: :blink:

حسمبا فهمت من رد أن البرنامج يحسب المنقول والمعكوس بنجاح؟ أليس كذلك؟

ما باقى علينا سوى المضروب أى الدالة multiply لما لا تعمل؟ أن شاء سنحاول مساعدتكم....

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#10

اي نعم المنقول والمعكوس يعملان بصوره جيده ولكن المشكله في داله الضرب فهي لاتعمل

مشكور اخي ووفقك الله في خدمه الاخرين ( وانا ايضا سأبذل جهدي ومحاولاتي لحل المشكله :) )

#11

الأخ الكريم/الأخت الكريمة

السلام عليكم ورحمة الله وبركاته

مرحباً بكم في منتدى الفريق العربي للبرمجة

تأسف إدارة المنتدى لغلق الموضوع وذلك لمخالفته قوانين المشاركات .

قواعد طرح المشاركات

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

{username}

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

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

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