Program w C++ (Funkcja)
-
- Użytkownik
- Posty: 195
- Rejestracja: 14 paź 2007, o 20:59
- Płeć: Mężczyzna
- Lokalizacja: MM
- Podziękował: 29 razy
Program w C++ (Funkcja)
Witam
Obliczyć :
\(\displaystyle{ t=\frac{\overline{x}-n}{S}}\)
gdzie \(\displaystyle{ \overline{x}=\frac{1}{n}\sum_{i=1}^{n} x_{i}}\) , \(\displaystyle{ S=\sqrt{\frac{1}{n}\sum_{i=1}^{n} (x_{i}-\overline{x})^{2}}}\) , \(\displaystyle{ x_{i} i=1,2,...,n.}\)
Obliczyć :
\(\displaystyle{ t=\frac{\overline{x}-n}{S}}\)
gdzie \(\displaystyle{ \overline{x}=\frac{1}{n}\sum_{i=1}^{n} x_{i}}\) , \(\displaystyle{ S=\sqrt{\frac{1}{n}\sum_{i=1}^{n} (x_{i}-\overline{x})^{2}}}\) , \(\displaystyle{ x_{i} i=1,2,...,n.}\)
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
Program w C++ (Funkcja)
A w czym tu widzisz problem. No chyba, że nie potrafisz programować, ale wtedy odsyłam do jakiegoś kursu C++. Jeśli jednak znasz podstawy to poprostu obliczasz sobie te wartości. Masz dane n i zbiór x1,...,xn, który może być np. reprezentowany przez tablicę z danymi wartościami. Sumowanie wykonujesz oczywiście w pętli. Pozdro
-
- Użytkownik
- Posty: 195
- Rejestracja: 14 paź 2007, o 20:59
- Płeć: Mężczyzna
- Lokalizacja: MM
- Podziękował: 29 razy
Program w C++ (Funkcja)
Właśnie zaczynam się uczyć programowania i dostałem do zrobienia taki program, ale nie wiem jak się za to zabrać, jak np wyliczyć S?
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
Program w C++ (Funkcja)
Żebyś wiedział jak zacząć;
czyli w zmiennej wyrażenie będziesz miał sumę elementów tablicy x, czyli twoich wartości xi. Teraz tą wartością zmiennej posługujesz się w dalszych obliczeniach(np. dzielisz przez n). Teraz już chyba kłopotu być nie powinno
Kod: Zaznacz cały
wyrażenie=0;
for(i=1;i<=n;i++) // <-powoduje zwiększanie się wartości zmiennnej iteracyjnej i od 1 do n
wyrażenie+=x[i]; // <-gdzie x[i] to i-ta wartość
-
- Użytkownik
- Posty: 941
- Rejestracja: 17 gru 2007, o 21:48
- Płeć: Mężczyzna
- Lokalizacja: Kingdom Hearts
- Podziękował: 6 razy
- Pomógł: 222 razy
Program w C++ (Funkcja)
Kod: Zaznacz cały
#include <iostream>
#include <cmath>
using namespace std;
main()
{
ios_base::sync_with_stdio(0);
double a=0,suma,t,S;
int n;
long long *tab;
tab=new long long [n+1];
printf("Wczytaj n: ");
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>tab[i];
a+=tab[i];
}
a/=n;
suma=S=t=0;
for(int i=1;i<=n;i++)
suma=suma+((tab[i]-a)*(tab[i]-a));
suma/=n;
S=sqrt(suma);
if(S==0)
printf("S=0, nie mozna dzielic przez zero!
");
else
{
t=(a-n)/S;
printf("t rowna sie (zaokraglone do 3 miejsc po przecinku) %.3lf
",t);
}
}
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
Program w C++ (Funkcja)
Do matshadow, po co wklejasz pełny kod jeśli pojawia się wskazówka, która może wystarczyć i do tego umożliwi element samodzielności w rozwiązaniu, dla osoby, która sie tego dopiero uczy. A jak już bardzo chciałeś się wykazać i wyręczyć autora tematu to trzaba było podać bezbłedne źródło.
Wrzucam poprawną wersję, choć na pewno dla piasektt byłoby lepiej gdyby doszedł do tego sam, więcej się wtedy nauczy.
Wrzucam poprawną wersję, choć na pewno dla piasektt byłoby lepiej gdyby doszedł do tego sam, więcej się wtedy nauczy.
Kod: Zaznacz cały
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,i;
cin>>n;
double t,a=0,*x=new double[n];
for(i=0;i<n;i++) cin>>x[i];
//^^^To sa dane
for(i=0;i<n;i++) a+=x[i];
a/=n;
for(i=0;i<n;i++) t=pow(x[i]-a,2);
if(!sqrt(t/n)) cout<<"Odchylenie równe 0, t nieokreslone"; //dodałem negację bo sam zapomniałem ;)
else{
t=(a-n)/sqrt(t/n); // podstawienie do wzoru t=(a-n)/S
cout<<t;
}
return 0;
}
Ostatnio zmieniony 1 maja 2008, o 14:05 przez kadiii, łącznie zmieniany 3 razy.
-
- Użytkownik
- Posty: 941
- Rejestracja: 17 gru 2007, o 21:48
- Płeć: Mężczyzna
- Lokalizacja: Kingdom Hearts
- Podziękował: 6 razy
- Pomógł: 222 razy
Program w C++ (Funkcja)
Hmm masz racje, niepotrzebnie wklejałem. Ale jak już mnie poprawiasz, to mi powiedz gdzie mam źle, bo ja błędu nie widzę w moim programie W twoim natomiast nie działa gdy wpiszesz 1 a potem 7
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
Program w C++ (Funkcja)
Zapewne chodzi o ten fragment kodu:
Najpierw tworzysz tablice, a pozniej pytasz o jej rozmiar... Nawet jesli takie bylo zamierzenie, to w tym przypadku tworzy ci sie tablica o teoretycznie losowym wymiarze (nie wiadomo co ma zmienna n w sobie). kadiii, to poprawil poprzez wczytanie najpierw wartosci n a pozniej utworzenie tablicy. Dalej sie ne przygladalem POZDRO
Kod: Zaznacz cały
int n;
long long *tab;
tab=new long long [n+1];
printf("Wczytaj n: ");
cin>>n;
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
Program w C++ (Funkcja)
Tak, ta dziwna alokacja najbardziej raziła. Ale poza tym zupełnie nieuzasadnione łączenie printf i cin. I żeby już wyczerpać to jeszcze dodałbym parę juz takich drobnostek(jakby były tylko one to bym się nie czepił ) - tworzysz tablicę long long a potem sumujesz z niej składniki do double, zerujesz zmienne S i t chociaz zaraz potem do nich przypisujesz wartości. I żebyś nie zrozumiał mnie źle, że chcę wytknąć twoje błędy ponieważ mój główny zamiar ująłeś trafnie w słowach
PozdroHmm masz racje, niepotrzebnie wklejałem (kod źródłowy przyp.kadiii)
-
- Użytkownik
- Posty: 941
- Rejestracja: 17 gru 2007, o 21:48
- Płeć: Mężczyzna
- Lokalizacja: Kingdom Hearts
- Podziękował: 6 razy
- Pomógł: 222 razy
Program w C++ (Funkcja)
Ale wstyd, ja nie moge, że nie zauważyłem że czytam n później niż ustalam rozmiar tablicy Oczywiście że Cię źle nie rozumiem Tylko jeszcze jedno pytanie: wiem że nie wolno mieszać scanf i cin, ale cin i printf chyba można, prawda?
Pozdrawiam
Pozdrawiam
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
Program w C++ (Funkcja)
Pytanie tylko po co?? Przeciez piszac w C++ masz gotowe strumienie, ktore sa IMHO wygodniejsze. Dziala na takiej samej zasadzie, chociaz jak dla mnie to lepiej jest zamiast pisac nawiasy napisac
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
Program w C++ (Funkcja)
I wiele wiele innych... Mozesz poczytac sa tam opisane zalety i wady tych dwoch metod. A co do szybkosci - sory, ale w takim programie to naprawde szybkosc wypisania tekstu sie nie liczy POZDRO... d-idea.htm
http://forums.devx.com/showthread.php?threadid=167768
http://www.daniweb.com/forums/post155393.html