[ 0Mashinac0 @ 28.03.2010. 10:13 ] @
naime treba da ispishem program za reshavanje polinoma preko hornerove sheme, gde su koeficijenti realni a x se krece od 0 do 1 sa nekim korakom 0.0001 shto i nije mnogo bitno
E sad ja sam uradio to onako seljacki, ali to nije to jer nije upotrebljivo, jer se odnosi samo na polinom 10og stepena shto mi je i zadato u zadatku, ali treba ga napraviti univerzalnim
Drugi problem je shto sve treba da odradim najprostije preko funkcija, ne smem da koristim nizove niti bilo shta drugo
Da bi znali o cemu pricam evo ta "seljacka" varijanta koja moze se reci radi
Code:

#include <stdio.h>


float polinom( float a0,float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float x );


main()
     {

     float a0,a1,a2,a3,a4,a5,a6,a7,a8,a9;
     float pol,x;

     printf("\n Unesite koeficijente: \n");
     scanf("%f %f %f %f %f %f %f %f %f %f ",&a0,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9);

     for(x=0;x<1;x=x+0.0001)
       {
                            
       pol = polinom(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,x);

       printf("x=%f P(x)0 %f\n",x,pol);
       }
     system("PAUSE");

     }


float polinom( float a0,float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float x )
     {

     return  (a0+x*(a1+x*(a2+x*(a3+x*(a4+x*(a5+x*(a6+x*(a7+x*(a8+x*(a9+x))))))))));

     }


E sad sam zaglavio kod opshteg reshenja, jer ne znam kako da povezem stepene n sa koeficijentima a kojih ima n+a, i da mi vrti unosjenje za svaki koeficijent u zavisnosti kojeg mi je stepena polinom
konkretnije sa nizovima bi ishlo ovako neshto
Code:

...nesho...

 printf("Unesite stepen polinoma:");
 scanf("%d",&n);
 for(i=0;i<=n;i++)
   {
    printf("Unesite koeficijent uz %d stepen:",i);
    scanf("%f",&a[i]);
   }
for(x=0;x<=1;x=x+0.0001)
  {
  p=a[0];
 xp=x;
 for(i=1;i<=n;i++)
    {
     p=p+a[i]*xp;
     xp=xp*x;

....neshto...

A sad ovaj treci kod nemojte zameriti sigurno je pun greshaka i nebuloza ali tu sam samo nabacao kako sam mislio da to uklopim, ali sam jednostavno zakucao, a moguce da nishta ne valja pa da ne moze ni da se ispravi...
Code:

#include<stdio.h>

float polinom(float y,float x,int a, int n, int i);

main()

     {
      
     float pol,x,y,a,n;

     printf("Unesite stepen polinoma:");
     scanf("%d",&n);
     for(i=0;i<=n;i++)

  
     y = a(0);  

     for(i=0;i<=n;i++)
       {
       printf("Unesite koeficijent uz %d stepen:",i);
       scanf("%f",&a(i));
       }

     for(x=0;x<=1;x=x+0.00001)
       {
                         
         pol=polinom(y,x,a,n,i);

         printf("x=%f P(x)0 %f\n",x,pol);
       }
     system("PAUSE");
     }


     float polinom(float y,float x,int a, int n, int i)
       {
         return y=x*y + a(i);    
       }

Eto to bi bila moja muka, pa ako je neko raspolozen :)
Unapred zahvalan
[ Mihajlo Cvetanović @ 28.03.2010. 10:46 ] @
U funkciji polinom parametar a treba da bude niz, int* a, a parametar i je suvišan, jer u samoj funkciji treba da imaš for petlju koja ide od n do 0 i računa y = a[i ] + x * y, gde je početno y=1. Parametar y je suvišan (i ta promenljiva treba da bude lokalna, kao i i), jer je to povratna vrednost funkcije.

Uzgred, preporučujem zamenu float sa double u celom kodu (i zamena %f sa %lf). Čisto za svaki slučaj.
[ 0Mashinac0 @ 28.03.2010. 10:54 ] @
Pa naveo sam gore primer to je drugi kod kako to preko nizova radi, samo je drugacije obelezeno
Code:

 for(i=1;i<=n;i++)
    {
     p=p+a[i]*xp;

pitanje je moze li se nako drugacije uraditi, menjati ovo a u zavisnosti od n, bez niza, da se napravi funkcija koja povezuje a i n?
[ Mihajlo Cvetanović @ 28.03.2010. 11:03 ] @
Moraš da imaš petlju, a sa funkcionalne strane svejedno je da li će da stoji u funkciji ili van nje. Sa estetske strane bolje je da stoji u funkciji.

U drugom kodu nemaš petlju.
[ 0Mashinac0 @ 28.03.2010. 11:18 ] @
Pa i ja bih ubacio u funkciju, ali nije mi jasno kako bi ta for petlja izgledala? Granice ishle od 0 do n i sa njom bih menjao vrednost a?
Ako moze nekoliko linija koda, ne znam ovo da ispishem :(
[ Mihajlo Cvetanović @ 28.03.2010. 11:38 ] @
Objasnio sam, ali dobro, evo koda. Umesto

Code:
float polinom( float a0,float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float x )
{
     return  (a0+x*(a1+x*(a2+x*(a3+x*(a4+x*(a5+x*(a6+x*(a7+x*(a8+x*(a9+x))))))))));
}

treba

Code:
double polinom(double *a, int n, double x)
{
     double y = 1.0;

     for (int i = n - 1; i >= 0; --i)
          y = a[i] + y * x;

     return y;
}
[ 0Mashinac0 @ 28.03.2010. 12:25 ] @
shvatio sam ovo, ali u prvom postu sam napisao da ne smem da koristim nizove, tako da mi ovo ne pomaze, ovosa a
[ Mihajlo Cvetanović @ 28.03.2010. 12:33 ] @
Pazi stvarno... E pa onda dok učitavaš trenutni koeficijent računaš i y. Tu isto imaš petlju. Kad se završi učitavanje koeficijenata automatski imaš gotovo y.
[ 0Mashinac0 @ 28.03.2010. 12:47 ] @
Ovako neshto?

Code:

double polinom(double a, int n, double x)
{
     double y = 1.0;

     for(a=0;a<=n;a=a+1)
       {
       printf("Unesite koeficijent uz %d stepen:",n);
       scanf("%lf",&a);

       y = a + y * x;
       
       return y;
      }
}
[ Mihajlo Cvetanović @ 28.03.2010. 15:58 ] @
Mislio sam da sam rešio problem, ali zapravo nisam. Trenutno mi izgleda nemoguće da vrtiš x i računaš y(x), a da ne držiš koeficijente negde, u nekom nizu. Mislim da je zadatak pogrešno sročen, ili da si ti pogrešno shvatio to "bez nizova".
[ 0Mashinac0 @ 28.03.2010. 16:04 ] @
Pa veruj mi nisam pogreshno shvatio, zadaci sa nizovima su vraceni i trazen drugi nacin, tako da ja nisam ni slao svoj odgovor koji ukljucuje nizove jer sam se udarao sa ovim, ne znam kako bih drugacije izveo, bash kako kazesh na koju foru bih povezao koeficijente sa brojem stepena i unosio svaki i racunao... Verovatno je moguce cim je trazen drugi nacin..
[ Mihajlo Cvetanović @ 28.03.2010. 16:31 ] @
Možda je uslov da nema nizova na steku, ali da su dozvoljeni nizovi u hipu (malloc).
[ 0Mashinac0 @ 28.03.2010. 16:34 ] @
To prevazilazi moje moucnosti, na kraju su poslati onu seljacku varijantu i ovaj pokushajni kod pa shta bude, nije greh ne znati...
Hvala na trudu