C++ Problem

Pages: 12
Hello people I have only a little problem with this task.

I think I have solved the rask right but I am not sure perhaps all experts here can help me:

Task:

It is a function to be created, which by an array a with the method "Sort
Mix "ascending.
Function using recursion: sortMerge (n, a)
Here the procedure is as follows:
If an item contains a maximum of one is finished (already sorted)
otherwise
Create 2 matching arrays b and c
Train 2 halves of the array and save it in a new array b and c
Note:
a new array of names h and m elements can be generated as follows:
double * h = new double [m];
The type is double; other similar types;
m is an expression / a variable of type int
With delete [] h, you can delete it again.
Sort b and c with SortMerge
Mix b and c with the function of internship 9 and store the result in a
Delete b and c.

Proceed to creating a suitable program to test the function.
Example of a step in the algorithm:
Sort is a: 11 2 9 7 8 3 2 with 7 elements.
In 2 parts disassemble and store in b and c: b: 11 2 9 c: 7 8 3 2
The 2 parts with SortMerge by: b: 2 9 11 c: 2 3 7 8
The 2 parts to a mix a: 2 2 3 7 8 9 11


My programm:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>

using namespace std;


    void sortMerge(int n, int *a){
    void merge(int *a,int p,int *b,int q, int *c,int n);
    if (n>1) {

        int *b = new int[n/2];
        int *c = new int[(n + 1)/2];
        int i;
        for(i=0; i < n/2; i++) {
            b[i] = a[i];
        }
        for(i=n/2; i < n; i++) {
            c[i - n/2] = a[i];
        }

       
        sortMerge(n/2, b);
        sortMerge(n-n/2, c);

        
        merge(b,n/2,c,n-n/2,a,n);

       
        delete b;
        delete c;
    }
}


void merge(int *b,int p,int *c,int q, int *a,int n)
{
    int i=0,j=0,k=0;
    while(i<p && j<q)
    {
        if(b[i]<=c[j]) {
            a[k]=b[i];
            i++;
        } else {
            a[k]=c[j];
            j++;
        }
        k++;
    }
    if(i==p) {
        while(j<q) {
            a[k]=c[j];
            j++;
            k++;
        }
    } else {
        while(i<p) {
            a[k]=b[i];
            i++;
            k++;
        }
    }
}


When I try to run the programm , it shows an error.

undefined reference to winmain.

Can somebody please tell me what I am doing wrong and perhaps help me.
Last edited on
Hello all experts around. Can somebody tell me why my programm is not working?

Iam confused at the moment.

At the very least, you need to
1. replace
1
2
        delete b;
        delete c;
with
1
2
        delete[] b;
        delete[] c;

2. add a main function, for example
1
2
3
4
5
int main()
{
    int a[] = {11, 2, 9, 7, 8, 3, 2};
    sortMerge(7, a);
}

3. Set up your project to build a console application, so that it stops looking for winmain
Last edited on
You have no entrypoint. Where should your program start from if you have no main/winmain ?
My Programm is now looking so :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>

using namespace std;

    int main(){
    void sortMerge(int n, int *a){
    void merge(int *a,int p,int *b,int q, int *c,int n);
    if (n>1) {

        int *b = new int[n/2];
        int *c = new int[(n + 1)/2];
        int i;
        for(i=0; i < n/2; i++) {
            b[i] = a[i];
        }
        for(i=n/2; i < n; i++) {
            c[i - n/2] = a[i];
        }

        // Arrays einzeln rekursiv sortieren
        sortMerge(n/2, b);
        sortMerge(n-n/2, c);

        // Arrays b und c zusammenfügen
        merge(b,n/2,c,n-n/2,a,n);

        // Arrays b und c wieder löschen
        delete [] b;
        delete [] c;
    }
}


void merge(int *b,int p,int *c,int q, int *a,int n)
{
    int i=0,j=0,k=0;
    while(i<p && j<q)
    {
        if(b[i]<=c[j]) {
            a[k]=b[i];
            i++;
        } else {
            a[k]=c[j];
            j++;
        }
        k++;
    }
    if(i==p) {
        while(j<q) {
            a[k]=c[j];
            j++;
            k++;
        }
    } else {
        while(i<p) {
            a[k]=b[i];
            i++;
            k++;
        }
    }
}

    }



Why is the programm still not working?

I don`t understand this.

Please help me.
You cannot declare functions inside other functions, like you do in line 6 and 7.

Put these before main().
1
2
void sortMerge(int n, int *a){
    void merge(int *a,int p,int *b,int q, int *c,int n);



Also your sortMerge() implementation is missing, you will get linker errors.
Last edited on
Hello I corrected my programm a little:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>

using namespace std;

    void sortMerge(int n, int *a){
    void merge(int *a,int p,int *b,int q, int *c,int n);
    int main(){

    if (n>1) {

        int *b = new int[n/2];
        int *c = new int[(n + 1)/2];
        int i;
        for(i=0; i < n/2; i++) {
            b[i] = a[i];
        }
        for(i=n/2; i < n; i++) {
            c[i - n/2] = a[i];
        }

        // Arrays einzeln rekursiv sortieren
        sortMerge(n/2, b);
        sortMerge(n-n/2, c);

        // Arrays b und c zusammenfügen
        merge(b,n/2,c,n-n/2,a,n);

        // Arrays b und c wieder löschen
        delete[] b;
        delete[] c;
    }
}


void merge(int *b,int p,int *c,int q, int *a,int n)
{
    int i=0,j=0,k=0;
    while(i<p && j<q)
    {
        if(b[i]<=c[j]) {
            a[k]=b[i];
            i++;
        } else {
            a[k]=c[j];
            j++;
        }
        k++;
    }
    if(i==p) {
        while(j<q) {
            a[k]=c[j];
            j++;
            k++;
        }
    } else {
        while(i<p) {
            a[k]=b[i];
            i++;
            k++;
        }
    }
}

}


But I really don´t understand what I should do now?

Also your sortMerge() implementation is missing, you will get linker errors.

Can somebody tell me how my implementation should be?
You're going too fast.
You don't know what int main() is and you're already writing functions.
Try with a simpler example next time, begin here: http://www.cplusplus.com/doc/tutorial/
Yeah haha.I also think so but can you Tell me what is wrong in my Code please because I am Görings Mad with this task.
Can somebody tell what I should I correct in my programm?

Because my programm is still not working.
Why are you asking what is wrong and do not read compiler error messages?!!! It is the compiler that says what is wrong with your program.
My Compiler is telling that there is a Problem with One bracket. But i dont find the mistakes. Thats why I am asking.
Can only somebody Tell me how I can correct this Problem?
Just please post all compling errors and linking errors here.
Maybe we can help you.
I am getting the error } before token.

Where is my mistake?
In previous program, compiler tells that in line "if (n>1)", "n" is undeclared.

Assign any value to array a, and assign the size of array "a" to n:

using namespace std;

int a[] = {11, 2, 9, 7, 8, 3, 2};
int n = 7;

void sortMerge(int n, int *a); // (deleted {)
void merge(int *a,int p,int *b,int q, int *c,int n);

int main(){


erase last }

Now builder tells: you are missing to define mergesort().

yet to resolve the recursion ...

I modified your program like this:
#include <iostream>
using namespace std;
int a[] = {11, 2, 9, 7, 8, 3, 2};
int n = 7;
void merge(int *a,int p,int *b,int q, int *c,int n);
void sortMerge(int n, int *a) {
if (n>1) {
int *b = new int[n/2];
int *c = new int[(n + 1)/2];
int i;
for(i=0; i < n/2; i++) {
b[i] = a[i];
}
for(i=n/2; i < n; i++) {
c[i - n/2] = a[i];
}
// Arrays einzeln rekursiv sortieren
sortMerge(n/2, b);
sortMerge(n-n/2, c);
// Arrays b und c zusammenfügen
merge(b,n/2,c,n-n/2,a,n);
// Arrays b und c wieder löschen
delete[] b;
delete[] c;
}
}
void merge(int *b,int p,int *c,int q, int *a,int n) {
int i=0,j=0,k=0;
while(i<p && j<q) {
if(b[i]<=c[j]) {
a[k]=b[i];
i++;
} else {
a[k]=c[j];
j++;
}
k++;
}
if(i==p) {
while(j<q) {
a[k]=c[j];
j++;
k++;
}
} else {
while(i<p) {
a[k]=b[i];
i++;
k++;
}
}
}
int main(){
sortMerge(7, a);
for (int i=0; i<n; i++) cout << a[i] << " ";
system("PAUSE");
return 0;
}
Last edited on
post erased
Last edited on
erased
Last edited on
erased
Last edited on
Sorry People your Forum postet my Comment 3 Times.
Last edited on
Pages: 12