Mam takie zadanko:
Kosz.
Witaj, popraw proszę tytuł tematu tak aby wstępnie informował o problemie, użyj przycisku EDYTUJ , który znajdziesz w prawym dolnym rogu Swojego posta-> następnie skorzystaj z opcji Użyj pełnego edytora. Dziękuję za uwagę.
Tip: Unikaj słów: “problem”, “help”, “pomocy” i.t.p. Tego typu słowa nie spowodują szybszej reakcji a mogą odnieść odwrotny skutek od oczekiwanego, tytuł tematu ma być skróconym opisem Twojego posta- powodzenia.
Po wyjaśnieniach na PW, temat przywrócony z kosza.
Przekazujesz tab przez referencję albo zwracasz wskaźnik (masz mieć 2 rozwiązania)
Co do b masz użyć tej funkcji jako parametru wywołania, dalej masz dobrze opisane.
że a) będzie tak
#include <stdio.h>
#include <stdlib.h>
int F(int *tab,int n){
int i;
for(i=0;i<n;++i){
tab[i]=tab[i]*tab[i]*tab[i];
}
}
int G(int a,int b, int k,int *n,int *tab){
int i;
*n=((b-a)/k)+1;
tab = (float*) malloc(*n * sizeof *tab);
for(i=0;i<*n;++i){
tab[i]=a;
a=a+k;
}
F(tab,*n);
return &tab[0];
}
int main()
{
int a,b,k,i,n=0;
printf("Podaj wartosc poczatkowa\n");
scanf("%d",&a);
printf("Podaj wartosc koncowa\n");
scanf("%d",&b);
printf("Podaj wartosc kroku\n");
scanf("%d",&k);
int *tab;
tab=G(a,b,k,&n,tab);
for(i=0;i<n;++i){
printf("%d\n",tab[i]);
}
return 0;
}
mógłbyś jakoś jaśniej (a i w C z tego co się doczytałem nie ma referencji dopiero w C++)
a b dalej nie wiem jak;/
Tak. Ten człowiek często gada od rzeczy, więc możesz go przestać słuchać. Masz zwrócić tablicę przez wskaźnik, co już masz oraz przez wartość. W tym drugim przypadku nagłówek powinien wyglądać następująco
int* fun(...)
PS
Wskaźnik wymieniłem, ty lepiej powiedz jak inaczej chcesz zwrócić tablicę przez parametr (pierwszy myślnik)
Co do kodu, nie przejdzie ci w c, nawet jak dodasz returna w pierwszej funkcji ze względu na przymus deklaracji zmiennych na początku.
A kto mówił, że przez wskaźnik napisałeś źle? Mówimy o referencji z twojego postu, co jest głupotą. To jest C, tu nie ma referencji, zwracać możesz coś przez wskaźnik, bądź wartość.
bo jak dam float w deklaracji to mi nie działa ;/ wynik na końcu 0 mi wyświetla cały czas
poczytaj o wzorcach w printf/scanf
tak zmieniam wyświetlanie na %f
dalej z float nie działa już kompletnie nie wiem jak, idę na wódkę… jak byś mógł to prosił bym o działający przykład:) a z b) hm chyba pójdę na konsultacje jak dorwę prowadzącego przed kolosem
Z postu #4 to nie wynika (wszędzie %d), poza tym coś takiego jest bez sensu malloc-ujesz obszar pamięci rzutowany na float, pod wskaźnik int-owy.
#include <stdio.h>
#include <stdlib.h>
int F(int a){
a=a*a*a;
}
int G(int a,int b, int k,int *n){
int i;
*n=((b-a)/k)+1;
int *tab;
tab = (float*) malloc(*n * sizeof *tab);
for(i=0;i<*n;++i){
tab[i]=F(a);
a=a+k;
}
return &tab[0];
}
int main()
{
int a,b,k,i,n=0;
printf("Podaj wartosc poczatkowa\n");
scanf("%d",&a);
printf("Podaj wartosc koncowa\n");
scanf("%d",&b);
printf("Podaj wartosc kroku\n");
scanf("%d",&k);
int *tab;
tab=G(a,b,k,&n);
for(i=0;i<n;++i){
printf("%d\n",tab[i]);
}
return 0;
}
Teraz F chyba powinna być dobrze co do (//myślnik pierwszy b jest całkowicie zbędne) jak chcesz wtedy określić zakres tablicy ?
Moja diagnoza? Najpierw poćwicz czytanie ze zrozumieniem, dopiero potem bierz się za programowanie. W przypadku pierwszego myślnika
#include <stdio.h>
#include <stdlib.h>
int F(int a){
a=a*a*a;
return a;
}
int FF(int a){
a=sqrt(abs(a));
return a;
}
void G(int a,int b, int k,int n,float *tab){
int i;
//*n=((b-a)/k)+1;
//float *tab;
//tab = (float*) malloc(*n * sizeof *tab);
for(i=0;i<n;++i){
tab[i]=F(a);
a=a+k;
}
}
int *GG(int a,int b, int k,int n,int FUN(int)){
int i;
//*n=((b-a)/k)+1;
float *tab;
tab = (float*) malloc(n * sizeof *tab);
for(i=0;i<n;++i){
tab[i]=FUN(a);
a=a+k;
}
return tab;
}
int main()
{
int a,b,k,i,n=0;
printf("Podaj wartosc poczatkowa\n");
scanf("%d",&a);
printf("Podaj wartosc koncowa\n");
scanf("%d",&b);
printf("Podaj wartosc kroku\n");
scanf("%d",&k);
n=((b-a)/k)+1;
float *tab;
//tab = (float*) malloc(n * sizeof *tab);
tab=GG(a,b,k,n,FF);
for(i=0;i<n;++i){
printf("%0.1f\n",tab[i]);
}
return 0;
}