Witam serdecznie!
Poniżej zamieszczam zadanie ze wskaźnikami wykonane w dwóch wersjach. W pierwszej w ogóle się nie kompiluje, a w drugiej program wywala mniej więcej w miejscu gdzie jest delete []tab; .
Oto kod:
Wersja 1
// lista5zad1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
int Horner (int n, int x){
int (*tab);
int y=0;
int u,b;
tab=(int(*)) calloc(n,sizeof(*tab));
if (tab == NULL) goto brak_pamieci;
for (u=0;u<=n;u++){
fprintf(stderr,"Podaj wspolczynnik: ");
scanf_s("%d",&tab[u]);
}
for (b=n;b>=0;b--)
y=y*x+tab[b];
brak_pamieci:
free(tab);
return y;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n,x,d;
fprintf(stderr,"Podaj stopien wielomianu: ");
scanf_s("%d",&n);
fprintf(stderr,"Podaj x: ");
scanf_s("%d",&x);
d=Horner(n,x);
printf("Wartosc wielomianu = %d\n",d);
return 0;
}
Wersja 2
// lista5zad1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
int Horner (int n, int x){
int (*tab);
int y=0;
int u,b;
tab = new int[n];
if (tab == NULL) goto brak_pamieci;
for (u=0;u<=n;u++){
fprintf(stderr,"Podaj wspolczynnik: ");
scanf_s("%d",&tab[u]);
}
for (b=n;b>=0;b--)
y=y*x+tab[b];
brak_pamieci:
delete []tab;
return y;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n,x,d;
fprintf(stderr,"Podaj stopien wielomianu: ");
scanf_s("%d",&n);
fprintf(stderr,"Podaj x: ");
scanf_s("%d",&x);
d=Horner(n,x);
printf("Wartosc wielomianu = %d\n",d);
return 0;
}