x=Import["https://ribes.if.uj.edu.pl/mathematica/zadania/x.dat"]//Flatten
(* Wczytujemy liczby z podanej lokalizacji; zostały wygenerowane w Mathematice więc nie pojawiają się żadne problemy;
polecenie Flatten zamienia listę o wymiarze 1xN na liste jednowymiarowa aby ułatwic póżniejsze operacje. *)

f=Import["https://ribes.if.uj.edu.pl/mathematica/zadania/f.dat"]//Flatten

fx={x,f}//Transpose (* łączymy elementy list w pary; ta postać ułatwia rysowanie wykresów *)

fx=Table[{x[[i]],f[[i]]},{i,1,Length[x]}]; (* inny sposób; przepisanie elementów jeden po drugim *)

(* jeszcze inny sposób: zaczynamy od pustej listy i doklejamy do niej kolejne pary aż do momentu gdy "licznik" dojdzie do wartości równej długości listy (Length[x]) *)
fx={};
licznik=0;
While[licznik<Length[x],licznik++;AppendTo[fx,{x[[licznik]],f[[licznik]]}]
];
fx

(* Jeszcze inny sposób: tworzymy pustą (w tym sensie, że jej elementy nie są jeszcze przypisane; inaczej mówiąc przyjmują wartość Null,coś w rodzaju ,,zbioru pustego'') listę, a nastepnie za pomocą pętli For wpisujemy wartości kolejnych elementów
*)

fx=Table[,{i,1,Length[x]}]

For[i=1,i≤Length[x],i++,fx[[i]]={x[[i]],f[[i]]}]

fx

(* Powyższe przykłady nie wyczerpują wszystkich możliwości, należy wymyślić własny lub wybrać jaden najbardziej zrozumiały czy wygodny i się do niego stosować. *)

(* W tym momencie mamy wczytane i przetworzone dane wejściowe; ZAWSZE należy wykonać wykres przed rozpoczęciem dalszych obliczeń. *)

wykres1=ListPlot[fx]

wykres2=ListPlot[fx,Joined->True,InterpolationOrder->0,PlotStyle->Dotted]

wykres2a=ListPlot[{Most[x],Rest[f]}//Transpose,Joined->True,InterpolationOrder->0,PlotStyle->DotDashed]

wykres3=ListPlot[fx,Joined->True,PlotStyle->Red]

Show[wykres1,wykres2,wykres2a,wykres3,ImageSize->600,Frame->True] (* Jak można się domyślić, dane zostały wygenerowane za pomocą funkcji Sin w przedziale {0,Pi} *)

(* Spodziewany wynik: *)

Integrate[Sin[ζ],{ζ,0,Pi}]

prostokaty1=Sum[f[[i]]*(x[[i+1]]-x[[i]]),{i,1,Length[x]-1}]
(* całka f(x) dx, gdzie f(x) :: f[[i]], dx :: (x[[i+1]]-x[[i]]) *)

prostokaty2=Sum[f[[i+1]]*(x[[i+1]]-x[[i]]),{i,1,Length[x]-1}](* suma pól prostokątów oznaczonych liniami przerywanymi *)

trapezy=Sum[0.5*(f[[i]]+f[[i+1]])*(x[[i+1]]-x[[i]]),{i,1,Length[x]-1}]

(* Sprawdzenie wyniku *)

fxINTERP0=Interpolation[fx,InterpolationOrder->0](* Ustawienie rzędu interpolacji (InterpolationOrder) na zero jest równowazne zastosowaniu metody ,,prostokątów''*)

NIntegrate[fxINTERP0[ζ],{ζ,0,Pi}]//FullForm

fxINTERP1=Interpolation[fx,InterpolationOrder->1]
(* Ustawienie rzędu interpolacji (InterpolationOrder) na jeden jest równowazne zastosowaniu metody ,,trapezów''*)

NIntegrate[fxINTERP1[ζ],{ζ,0,Pi}]//FullForm

fxINTERP=Interpolation[fx]

NIntegrate[fxINTERP[ζ],{ζ,0,Pi}]//FullForm

Options[Interpolation] (* Bez podania opcji interoplacja jest 3 rzędu, tj. wielomianami 3 stopnia *)