Pomoc - Rad sa skupovima

Teme vezane za console/GUI programiranje u C/C++ jeziku
5 post(ov)a • Stranica: 1/1.

Pomoc - Rad sa skupovima

PostPostao/la miki » 04 lip 2014, 21:07

Ne znam da resim erore
Kod: Označi sve
skup.cpp: undefined reference to `citaj(int)'
skup.cpp: undefined reference to `citaj(int)'
skup.cpp: undefined reference to `pisi(Skup)'
skup.cpp: undefined reference to `pisi(Skup)'
skup.cpp: undefined reference to `unija(Skup, Skup)'
skup.cpp: undefined reference to `pisi(Skup)'
skup.cpp: undefined reference to `brisi(Skup*)'
skup.cpp: undefined reference to `presek(Skup, Skup)'
skup.cpp: undefined reference to `pisi(Skup)'
skup.cpp: undefined reference to `brisi(Skup*)'
skup.cpp: undefined reference to `razlika(Skup, Skup)'
skup.cpp: undefined reference to `pisi(Skup)'
skup.cpp: undefined reference to `brisi(Skup*)'
skup.cpp: undefined reference to `brisi(Skup*)'
skup.cpp: undefined reference to `brisi(Skup*)'

Ovo je skup.cpp
c code
#include "skup.h"
#include <stdio.h>
#include <stdlib.h>

int main()
{
Skup s1,s2,s3; int n;
while(1) {
printf("\nn1? "); scanf("%d",&n);
if(n < 0 ) break;
printf("niz1? ");
if(n>0) s1 = citaj(n); else printf("\n");
printf("n2? "); scanf("%d",&n);
if(n < 0) break;
printf("niz2> ");
if(n > 0) s2 = citaj(n); else printf("\n");
printf("s1 = ");pisi(s1);
printf("s2 = ");pisi(s2);
s3 = unija (s1,s2); printf("s1+s2 = "); pisi (s3); brisi(&s3);
s3 = presek (s1,s2); printf("s1*s2 = "); pisi (s3); brisi(&s3);
s3 = razlika (s1,s2); printf("s1-s2 = "); pisi (s3); brisi(&s3);
brisi(&s1); brisi (&s2);
}
return 0;
}

Ovo je skup.h
c code
/* skup.h - zaglavlje modula za rad sa skupovima  */

typedef struct { int *a,n; } Skup; /* Struktura skupa */

Skup unija (Skup s1,Skup s2); /* Unija dva skupa */
Skup presek (Skup s1,Skup s2); /* Presek dva skupa */
Skup razlika (Skup s1,Skup s2); /* Razlika dva skupa */
int pripada (Skup s,int b); /* Da li broj pripada skupu ? */
void dodaj (Skup *ps,int b); /* Dodavanje broja u skup */
Skup citaj (int n); /* Citanje skupa */
void pisi (Skup s); /* Ispisivanje skupa */
void brisi (Skup *ps); /* Brisanje skupa */

i ovo je skup.c
c code
/* skup.c - Funkcije modula za rad sa skupovima */
#include "skup.h"
#include <stdio.h>
#include <stdlib.h>

Skup unija(Skup s1,Skup s2) { /* Unija dva skupa */
Skup s; int i, j;
s.a = malloc((s1.n+s2.n)*sizeof(int));
s.n = s1.n;
for(i=0;i<s1.n;i++) s.a[i] = s1.a[i];
for(j=0;j<s2.n;j++) {
for(i=0;i<s1.n && s1.a[i] != s2.a[j];i++);
if(i==s1.n) s.a[s.n++] = s2.a[j];
}
s.a = realloc(s.a,s.n * sizeof(int));
return s;
}
Skup presek(Skup s1,Skup s2) { /* Presek dva skupa */
Skup s; int i, j;
s.a = malloc((s1.n<s2.n ? s1.n : s2.n)*sizeof(int));
s.n = 0;
for(i=0;i<s1.n;i++) {
for(j=0;j<s2.n && s2.a[j] != s1.a[i];j++);
if(j < s2.n) s.a[s.n++] = s1.a[i];
}
s.a = realloc(s.a,s.n * sizeof(int));
return s;
}
Skup razlika(Skup s1,Skup s2) { /* Razlika dva skupa */
Skup s; int i, j;
s.a = malloc(s1.n * sizeof(int));
s.n = 0;
for(i=0;i<s1.n;i++) {
for(j=0;j<s2.n && s2.a[j] != s1.a[i];j++);
if(j==s2.n) s.a[s.n++] = s1.a[i];
}
s.a = realloc (s.a,s.n * sizeof(int));
return s;
}
int pripada(Skup s,int b) { /* Da li broj pripada skupu? */
int i;
for(i=0;i<s.n && s.a[i]!=b;i++);
return i<s.n;
}
void dodaj(Skup *ps,int b) { /* Dodavanje broja skupu */
if(!pripada(*ps,b)){
ps->a = realloc (ps->a,(ps->n+1) * sizeof(int));
ps->a[ps->n++] = b;
}
}
Skup citaj (int n) { /* Citanje skupa */
Skup s; int i,b;
s.a = NULL; s.n = 0;
for(i=0;i<n;i++) { scanf("%d", &b); dodaj(&s, b); }
return s;
}
void pisi(Skup s) { /* Ispisivanje skupa */
int i;
for(i=0;i<s.n;printf("%d",s.a[i++]));
printf("\n");
}
void brisi (Skup *ps) { /* Brisanje skupa */
free(ps->a); ps->a = NULL; ps->n = 0;
}
Izrada kompletnih C/C++ zadataka, javite se na krsticm1996@gmail.com

Re: Pomoc

PostPostao/la gagiD » 04 lip 2014, 21:35

Mislim da je najpametnije da se fajl u kojem je main() nazvati main.c , zbog preglednosti.

Koliko vidim kod tebe skup.c nije ukljucen u skup.cpp(ne znam zasto .cpp) i zato su "nedefinisane" te funkcije.

I za C kod je preglednije koristiti [code2="c"][/code2] ( bez navodnika naravno ) nego [code][/code] :)


// Promjenio sam i naslov.

Re: Pomoc - Rad sa skupovima

PostPostao/la Armin » 05 lip 2014, 07:52

Jel ti se fajlovi nalaze unutar projekta il su individualni? Moraju bit u zajednickom projektu da bi ih mogao linkat.
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla

Re: Pomoc - Rad sa skupovima

PostPostao/la miki » 06 lip 2014, 10:29

Svi fajlovi su u zajednickom projektu
Izrada kompletnih C/C++ zadataka, javite se na krsticm1996@gmail.com

Re: Pomoc - Rad sa skupovima

PostPostao/la gagiD » 06 lip 2014, 18:38

Je li rijeseno ovo ili?

Ako ne dodaj ovo u skup.h:

c code
#ifndef SKUP_H_INCLUDED
#define SKUP_H_INCLUDED
/* skup.h - zaglavlje modula za rad sa skupovima */

typedef struct { int *a,n; } Skup; /* Struktura skupa */

Skup unija (Skup s1,Skup s2); /* Unija dva skupa */
Skup presek (Skup s1,Skup s2); /* Presek dva skupa */
Skup razlika (Skup s1,Skup s2); /* Razlika dva skupa */
int pripada (Skup s,int b); /* Da li broj pripada skupu ? */
void dodaj (Skup *ps,int b); /* Dodavanje broja u skup */
Skup citaj (int n); /* Citanje skupa */
void pisi (Skup s); /* Ispisivanje skupa */
void brisi (Skup *ps); /* Brisanje skupa */


#endif // SKUP_H_INCLUDED


skup.c nema potrebe za include-ovima, jer se oni ukljucuju u main.c(skup.cpp), pa nema potrebe dva puta

I zaglavlje main.c(skup.cpp) neka izgleda ovako:

c code
#include <stdio.h>
#include <stdlib.h>
#include "skup.h"
#include "skup.c"


Inace include nije velika mudrost, samo se sadrzaj nekog fajla postavi u fajl u koji se ukljucuje. A za rezultat imamo bolju preglednost.


5 post(ov)a • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.