Wypełnianie tablicy wartością funkcji

0

Witam, chciałem się zapytać jak utworzyć tablicę składająca się z i elementów które są wartościami funkcji.

for(int i=0;i<80;++i)
	 {
		tab[i] = (-40*log10(1/(sqrt(1+(f*f*39.4784*RC2)))));
	  }

i nie wiem jak zrobić żeby kolejny element w tablicy miał częstotliwość (wartość f) większą o 20 ( przy czym pierwsze f ma mieć wartość zerową), czyli np.:
tab[0]= (-40log10(1/(sqrt(1+(0039.4784RC2))))),
tab[1]= (-40log10(1/(sqrt(1+(202039.4784RC2))))),
tab[2]= (-40log10(1/(sqrt(1+(404039.4784RC2))))) itd...
Z góry dzięki :]

0
(-40*log10(1/(sqrt(1+((i*20)*(i*20)*39.4784*RC2)))))

Nieprawdaż?

0

Dzięki wielkie:D

0

Jeszcze korzystając z okazji chciałbym się zapytać czy dobrze kombinuję na temat algorytmu do rysowania wykresu w trybie tekstowym.
Ma to być charakterystyka filtru RC i chciałem to wykonać w ten sposób że dla 80 wartości częstotliwości wyliczam odpowiadające im wzmocnienia zapisuję te wartości do tablicy i wygląda(po przybliżeniu do części całkowitej) ona mniej więcej tak : 0 0 0 1 1 1 1 2 2 2 2 3 3 4 4 4 5 5 5 6 6 6 7 7 8 8 8 9 9 9 10 10 10...... i tak dalej do np 20. (ogólnie chciałbym zabezpieczyć żeby max wartość w tablicy wynosiła 20). Wykres jest wyskalowany na 80x20 znaków (stąd do 20 wartości wzmocnień) i teraz myślałem nad algorytmem który rysuje np gwiazdki odpowiednio liczba gwiazdek w 1 wierszu tyle ile zer w macierzy w 2 wierszu tyle ile jedynek w macierzy itd..
Powiedzmy że ma wyglądać tak:

000
0000000
00000000000
0000000000000000
0000000000000000000
Wiem wygląda tragiczne ale tak ma być :D

w sumie lepiej by było bez wypełnienia gwiazdkami

000
0000
0000
00
00000
PS: musiałem zmienić na zera bo gwiazdka daje wypunktowanie :D

0

Jak dasz w znacznikach code to nie zmieni na gwiazdki.

const Tb:array[0..32]of Byte=(0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10);
var Y,X:Integer;
begin
  for Y:=20 downto 0 do
  begin
    for X:=Low(Tb) to High(Tb) do
    begin
      if Tb[X]=Y then Write('*') else Write(' ');
    end;
    WriteLn;
  end;
  ReadLn;
end.
0

Dzięki wielkie ale zapomniałem dodać że chodzi mi o C++...
Tak na chłopski rozum for w delphi jest jak for w C++? Write to jak cout?

0
#include <iostream>
using namespace std;

int main()
  {
   unsigned Tb[]={0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10};
   unsigned Size=sizeof(Tb)/sizeof(*Tb);
   for(unsigned y=20;y<=20;--y,cout<<endl) for(unsigned x=0;x<Size;++x) cout<<(" *"[Tb[x]==y]);
   cin.get();
   return 0;
  }
0

Dziękóweczka Jest mega:D próbowałem sam przerobić ten pierwszy kod co podałeś na C++ ale jednak moja wiedza jest za mała... Pozdrawiam

0

Jeszcze ostania sprawa mam taki kod odpowiadający za sprawdzenie czy wpisano liczbę a nie litery

do
                {
		  cout<<"Podaj wartosc rezystancji (w kOmach 10^3): ";
		  cin>> R;
		  bFail = cin.fail();

		  cin.clear();
		  cin.ignore(numeric_limits<signed int>::max(), '\n');

	        }while (bFail==true); 

i problem jest taki że jak wpiszę np: sasf129 to trzeba poprawić a jak wpiszę 129sasf to zapisuję do zmiennej wartość 129 a wolałbym żeby trzeba było poprawić i jeszcze jak zablokować liczby ujemne? Kombinowałem coś z tą częścią

 cin.ignore(numeric_limits<signed int>::max(), '\n'); 

ale żadnych efektów i niestety nic nie mogłem znaleźć na googlach...

0

Jeszcze ostania sprawa mam taki kod odpowiadający za sprawdzenie czy wpisano liczbę a nie litery

do
                {
		  cout<<"Podaj wartosc rezystancji (w kOmach 10^3): ";
		  cin>> R;
		  bFail = cin.fail();

		  cin.clear();
		  cin.ignore(numeric_limits<signed int>::max(), '\n');

	        }while (bFail==true); 

i problem jest taki że jak wpiszę np: sasf129 to trzeba poprawić a jak wpiszę 129sasf to zapisuję do zmiennej wartość 129 a wolałbym żeby trzeba było poprawić i jeszcze jak zablokować liczby ujemne? Kombinowałem coś z tą częścią

 cin.ignore(numeric_limits<signed int>::max(), '\n'); 

ale żadnych efektów i niestety nic nie mogłem znaleźć na googlach...

0

To co napisałeś można uprościć do:

while(true)
  {
   cout<<"Podaj wartosc rezystancji (w kOmach 10^3): ";
   if(cin>>R) break;
   //if(cin>>R>>nomore) break; // zastąpić tym poprzedni wiersz, jeżeli chcesz kontrolować 123abc
   cin.clear();
   cin.sync();
   cout<<"Blad wprowadzania"<<endl<<endl; // tego u ciebie niema ale wypada
  }

Aby nie dopuszczać liczb ujemnych wystarczy zadeklarować R jako unsigned.
Dla kontroli 123abc treba napisać tą funkcję nomore

istream &nomore(istream &s)
  {
   bool bad=false;
   int ch;
   while(((ch=s.get())!='\n')&&(ch!=EOF)) if((ch!=' ')&&(ch!='\t')) bad=true;
   if(bad) s.clear(ios::failbit);
   return s;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1