Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
ondra181
Člen
Avatar
ondra181:18.11.2012 15:58

Zdravím, už znovu sa na vás obraciam a prosím vás o pomoc, mám 2 funkcie a main potrebujem v 1. funkcii načítať do prvkov pola poslať to do mainu a potom do druhej funkcie....vedel by mi niekto poradiť s pointermi? skúšal som vytvoriť v maine int cena[200], pocet; niekde som to tak videl a potom som posuval do funkcie1(int cena[], int pocet)v returne som dava return cena; a pri volan9 v maine som daval funkcia1(cena, pocet); nefunguje mi to vobec :/ ak by mi niekto vedel pomôcť budem velmi vďačný

 
Odpovědět
18.11.2012 15:58
Avatar
Odpovídá na ondra181
Drahomír Hanák:18.11.2012 16:08

V Céčku se musí pole předávat pointerem. Ale je s tím strašně moc práce, je tam vysoká chybovost a nedá se to nijak testovat.

Jelikož je v Céčku pole pointer (resp. pole[i] == *(pole+i)), lze to udělat asi takhle:

void fce1(int *cena, int pocet);

Pak se funkci musí předat adresa proměnné - např. fce1(&cena, 10)

To ovšem ovlivňuje proměnnou, kam pointer ukazuje, z čehož plyne ta velká chybovost. Navíc je nelogické, že funkce upravuje proměnné někde jinde. Měla by dostat hodnotu a vrátit výsledek nezávisle na okolí. Jinak to ale myslím v Céčku udělat nejde.

 
Nahoru Odpovědět
18.11.2012 16:08
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na ondra181
Lukáš Hruda:18.11.2012 16:25

Specifikuj "nefunguje"...

 
Nahoru Odpovědět
18.11.2012 16:25
Avatar
ondra181
Člen
Avatar
ondra181:18.11.2012 16:28

a dá sa nejak vrátit hodnota pola bez použitia pointerov?

 
Nahoru Odpovědět
18.11.2012 16:28
Avatar
ondra181
Člen
Avatar
Odpovídá na Lukáš Hruda
ondra181:18.11.2012 16:32

nefunguje error mi to nehlásí ale nenačítá do pola nič a vypisuje len náhodné hodnoty ktoré sú tam od začiatku lebo som pole nenuloval...

 
Nahoru Odpovědět
18.11.2012 16:32
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na ondra181
Lukáš Hruda:18.11.2012 16:34

Mohl bys sem hodit kód?

 
Nahoru Odpovědět
18.11.2012 16:34
Avatar
Odpovídá na Lukáš Hruda
Drahomír Hanák:18.11.2012 16:34

Z toho kódu funkcie1(int cena[], int pocet) je jasné, že to nefunguje ;) V Céčku takhle pole prostě nejde předávat v parametru funkce.

 
Nahoru Odpovědět
18.11.2012 16:34
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Lukáš Hruda:18.11.2012 16:36

Ale jde, jako parametr funkce je int cena[] úplně to samý jako int* cena.

 
Nahoru Odpovědět
18.11.2012 16:36
Avatar
Kit
Tvůrce
Avatar
Odpovídá na ondra181
Kit:18.11.2012 16:37

Zkusil jsem si to udělat jako funkci vracející pointer. Třeba si z toho vybereš:

#include <stdio.h>
#include <stdlib.h>

#define SIZE 8

int *gener() {
  int *mem,*ptr,i;
  mem=(int *)malloc(SIZE*sizeof(int));
  ptr=mem;
  for(i=0;i<SIZE;i++) {
    *ptr=i*3;
    ptr++;
  }
  return mem;
}

int tisk(int *mem) {
  int *ptr,i;
  ptr=mem;
  for(i=0;i<SIZE;i++) {
    printf("%d\n",*ptr);
    ptr++;
  }
}

int main() {
  int *p;
  p=gener();
  tisk(p);
}
Nahoru Odpovědět
18.11.2012 16:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
ondra181
Člen
Avatar
ondra181:18.11.2012 16:38

int nacitaj_pocet_dni(){

char c;
int i,j=0,dni[200];

FILE *fr = fopen("zajazdy­.txt", "r");

while (feof(fr) == 0){
for(i=1;i<=7;i++){
c=0;
if(i == 7){
fscanf(fr,"%d\n\n", &dni[j]);
printf("%d\n", dni[j]);
}
else{
while(c != '\n' && c!= EOF){
c=getc(fr);
if(c == EOF){
break;
}
}
}
}
j++;
}

return 0;

}

int main(){

char c;

do{
c=getchar();

else if(c == 'n'){
nacitaj_pocet_dni();
}

}
while(c != 'k');

return 0;

}

 
Nahoru Odpovědět
18.11.2012 16:38
Avatar
Kit
Tvůrce
Avatar
Odpovídá na ondra181
Kit:18.11.2012 16:48

Používej tlačítko "Vložit zdrojový kód", ať se to dá číst.

Nahoru Odpovědět
18.11.2012 16:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.