Prvo da ispravimo gramatičke i pravopisne greške:
Citat:
Zanima me samo što mi izbaci "Segmentation fault". Ako može neko tačno da kaže zašto. Inace, nema veze za ovo za for (posto je u a veci zadnji broj). Inace, zadatak glasi: spojiti dva rastuća niza brojeva u jedan rastući niz.
Drugo, program je napisan jako neuredno, tj. teško za čitanje. Ako koristiš Code::Blocks okruženje, u Plugins meniju imaš opciju "Source code formatter (AStyle)", pa je koristi.
E, sad, program puca zato što u drugoj else grani ne povećavaš i za jedan, pa onda taj uslov biva stalno ispunjen, zbog čega se m stalno povećava za 1, dok ne pređe opseg niza c.
To nije jedina greška u programu. Program zapravo treba da glasi:
Code (c):
#include <stdio.h>
int novi
(int a
[], int b
[], int na
, int nb
, int c
[])
{
int i
= 0, j
= 0, m
= 0;
while (i
< na
&& j
< nb
) {
if (a
[i
] > b
[j
]) {
if (m
== 0 || b
[j
] > c
[m
- 1]) {
c
[m
++] = b
[j
++];
} else {
++j
;
}
} else {
if (m
== 0 || b
[j
] > c
[m
- 1]) {
c
[m
++] = a
[i
++];
} else {
++i
;
}
}
}
while (i
< na
) {
if (m
== 0 || a
[i
] > c
[m
- 1]) {
c
[m
++] = a
[i
++];
} else {
++i
;
}
}
while (j
< nb
) {
if (m
== 0 || b
[j
] > c
[m
- 1]) {
c
[m
++] = b
[j
++];
} else {
++j
;
}
}
return m
;
}
int main
()
{
int a
[] = {1, 2, 5, 40};
int b
[] = {3, 7, 12};
int c
[(sizeof(a
) + sizeof(b
))/sizeof(int)];
int i
;
int na
= sizeof(a
)/sizeof(int);
int nb
= sizeof(b
)/sizeof(int);
int x
= novi
(a
, b
, na
, nb
, c
);
for(i
= 0; i
< x
; ++i
) {
printf("%d\n", c
[i
]);
}
return 0;
}
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.