Programování pascal

Od: Datum: 05.12.16 06:34 odpovědí: 18 změna: 08.12.16 22:49
avatar

Dobrý den, poradili byste mi prosím s tímto programem?

Druhý obrázek je zdrojový kód, co mám upravit a třetí obrázek je to, co jsem zatím udělala.

Mám tam spíš použít for n:=1 to 12 do begin...? Nebo bude to takhle fungovat a musím upravit jen to, co se má vypsat?

Tady je soubor v .pas http://leteckaposta.cz/678901260

Ještě k tomu patří jednotka http://leteckaposta.cz/490390962

Moc děkuji



Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Od: ctenar*
Datum: 05.12.16 13:34

Mám tam spíš použít for n:=1 to 12 do begin...? Nebo bude to takhle fungovat
Je to jedno. Oba budou fungovat. Ten tvůj současný zápis je hezčí (obecnější, čistčí).

Několik vylepšení:

  1. jednou tam máš "X" a jednou "x". To asi bude překladači vadit (nerozeznaná/neznámá proměnná)

  2. proč vymýšlet novou proměnnou "k", když v zadání už je pojmenovaná "N"?

  3. stejně s T → S

  4. podle zadání bych spíše ukládal výsledné součty do jednorozměrného pole S[N]

  5. nikde v programu (ani tom prvním) se nepíše, co je "np"

  6. překládat jsem to nezkoušel, jen jsem to procházel na papíře (monitoru). To je FreePascal/Lazaurus? Neznám přesnou syntaxi, takže případné chyby nedokážu odhalit.


doplněno 05.12.16 13:44:

Dále:

  1. b a x jsou nyní matice a ne vektory, proto by bylo přehlednější je označit B a X, stejně jako je označena A

  2. nemá tam náhodou být X:=B/A? Takhle, jak to máš teď ty, podle mě jen dělíš tu matici jednotkovou maticí, výsledkem čehož je původní matice. *nevi*

Ohodnoceno: 2x
 
Datum: 05.12.16 21:52
avatar

Moc děkuji, dělám to v pascalu - tam na velikosti písmen nezáleží, ale pro přehlednost je to určitě lepší, děkuji. A co mám prosím vypsat do writeln? Výsledek by měl vypadat nějak takto:


doplněno 05.12.16 22:01:

A když nezáleží na velikosti písmen, tak nemůžu nehradit k N?


doplněno 05.12.16 22:09:

Jak mám prosím zapsat ukládání do pole S[N] a jak to mám opravit to np? Děkuji

Od: ctenar*
Datum: 05.12.16 22:44

co mám prosím vypsat do writeln?

Místo T=X[i,j]+T budeš mít S[k]=X[i,j]+S[k] a v writeln budeš místo T:13... mít S[k]:13...

Ta náhrada k-N byl jen můj nápad. Udělej si to, jak ti to vyhovuje.

Co je np a kde se vzalo doteď netuším. Že by se odkazovalo na tu knihovnu uNRGauss?

Ohodnoceno: 2x
 
Datum: 06.12.16 06:34
avatar

Moc děkuji a jak mám prosím deklarovat to S[k]? To je array of real?

Od: ctenar*
Datum: 06.12.16 16:59

Ano, S je jednorozměrné pole reálných čísel, stejně jako byly v 1.příkladu b a x.

Ohodnoceno: 2x
 
Datum: 06.12.16 21:05
avatar

Děkuji, ale jak mám to S deklarovat, už ho tam mám jako reálné a když do var napíšu S[k], tak to mi nebere, můžu to nechat tak jen s tím S?

Od: ctenar*
Datum: 07.12.16 01:26

Musíš dát stejně jako v tom ukázkovém programu:

var

S : array of real;

Máš tam to SetLength(S,n)?

Nemusíš to vůbec řešit s tím S jako polem. Klidně to udělej jak jsi to měla původně: S jako jedno reálné číslo. Já jen že s tím vektorem to vypadá "čistčí".

Ohodnoceno: 1x
 
Datum: 07.12.16 06:51
avatar

Děkuji a jak to mám prosím všechno vypsat? Mám to udělat pro každé k do 12 nebo to jde nějak zjednodušit?

Od: ctenar*
Datum: 07.12.16 07:18

Co chceš vypisovat? Ty součty nebo tu matici jako jsi poslala na obrázku? Tu matici můžeš vypisovat na tom oranžovém řádku, kde teď jen počítáš součet.

Ohodnoceno: 0x
 
Datum: 07.12.16 08:11
avatar
Chtěla bych to jako na obrázku, matici i součet
Od: ctenar*
Datum: 07.12.16 09:21

Po řádku X:=B/A budeš mít: writeln("H^-1 pro n=", k);

a okolo oranžového řádku budeš mít:

for i=1 to k dobegin

for j=1 to k do begin

write (X[k]:10, " ");

S[k]=S[k]+X[i-1,j-1]

end

writeln

end

writeln ("Soucet prvků: ", S[k], "=n^2=", k^2);

nebo něco takového. Určitě si to budeš umět doladit sama a doplnit chybějící syntaktické znaky.

Ohodnoceno: 0x
 
Datum: 07.12.16 16:40
avatar

Co prosím znamená to X[k]? To je matice k x k? Mám ji deklarovat? Nejde mi to stjeně jako s S. Když to udělám bez [k], nevypíše to proměnnou takového typu. Děkuji

Od: ctenar*
Datum: 07.12.16 18:26

Promiň, ne X[k], ale X[i-1,j-1].

Vidím, že moc nebo vůbec nechápeš rozdíl mezi proměnnou o jedné hodnotě ("X"), polem X (tj.skupinou několika proměnných - X[k], te´dy X[1], X[2], ..., X[N]) a maticí X (polem proměnných, které jsou sami polem, tedy pole polí, nebo též dvourozměrnou maticí proměnných, v níž konkrétní proměnná má index/polohu i,j - X[i,j], A[m,n], apod.)

Až tohle pochopíš, tak pak budeš chápat i jak to deklarovat ( var X: ...), iniciovat (SetLength) a přistupovat k hodnotách (např. S=X[r,s]).

Potom pro tebe bude hračka opravovat nebo měnit programy, jako je tento úkol.

Ohodnoceno: 0x
 
Datum: 07.12.16 22:12
avatar

Moc děkuji a jak prosím udělám cyklus pro to vypsání?

Zkoušela jsem na 22. řádku dát for k:=1 to 12 do begin

Děkuji

 

Od: ctenar*
Datum: 07.12.16 23:26

Myslím, že nějak takto by to mohlo být, ale opravdu si to odzkoušej sama. Koukni, co to vypisuje, co se změní, když něco v programů změníš, přehodíš řádky apod. Jen tak se naučíš programovat. Nemá smysl, abychom ti tady poslali kompletní zdrojový kód.


doplněno 07.12.16 23:31:

Nevím, jak dlouho trvá spočítání pro k=12, ale pro rychlejší zkoušení programu to můžeš dočasně omezit jen třeba do k=5.

Ohodnoceno: 0x
 
Datum: 08.12.16 20:46
avatar

Moc moc děkuji, už to funguje. Ještě by mě zajímalo, proč když do zdrojového kódu přidám knihovnu crt, tak se po spuštění exe souboru všechno rychle načte, ale pak už nemůžu najet na začátek? Děkuji


doplněno 08.12.16 20:52:

Zkoušela jsem i jiný pc, ale je to tam stejné.

http://leteckaposta.cz/103178670

Od: ctenar*
Datum: 08.12.16 22:30

Nevím, co je "najet na začátek". Jako že se ti odroluje výpis?

Bez CRT můžeš najet zpátky na začátek?

Nepouští se verze bez crt v "DOSovém okně" a verze s crt si otevírá vlastní Windowsové okno?

Nevím, jak to přesně FreePascal překládá. Na Windows jsem ho ještě běžet v reálu neviděl.

Ohodnoceno: 0x
 
Datum: 08.12.16 22:49
avatar

Nejde to odrolovat. Bez CRT to jde. Otevře se vlastní Windows okno .exe soubor.

To je jedno, není to důležité.

Moc děkuji

 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz

 
Copyright © 2004-2017 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.