Pascal - vložení čísel do matice – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pascal - vložení čísel do matice – Pascal – Fórum – Programujte.comPascal - vložení čísel do matice – Pascal – Fórum – Programujte.com

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

ovlaky0
Duch
3. 2. 2017   #1
-
0
-

Zdravím, už dlouho nemůžu přijít na to, jak dostanu čísla do matice. Je to tak, že nejdřív čísla do programu vypíšu, udělám s nimi pár matematických operací (sčítání, odčítání a násobení), a pak nevím, jak ty výsledky tam dosadit. Poradí mi někdo? 

Potřebuji, aby byla ve tvaru s čísli:

ab   b0  bd

b0  bcd d0

bd   d0  de

Na internetu jsem vždy našel jen doplnění do matice náhodnými vygenerovanými číslicemi nebo přímým zadáváním do matice, ale já tam do té matice potřebuji dosadit z již zadaných hodnot. Mockrát děkuji.

program matice;

uses
  SysUtils;


var a,b,c,d,e,f,g:real;
    ab,bcd,de,b0,d0,bd:real;
    m1:array[1..3, 1..3] of integer;
    aa:char;

begin
  write('a = '); read(a);
  write('b = '); read(b);
  write('c = '); read(c);
  write('d = '); read(d);
  write('e = '); read(e);
  write('f = '); read(f);
  write('g = '); read(g);
  writeln;
  readln();
  ab:=a+b;
  writeln('ab  = ',ab:6:3);
  bcd:=b+c+d;
  writeln('bcd  = ',bcd:6:3);
  de:=d+e;
  writeln('ab  = ',de:6:3);
  b0:=b*(-1);
  writeln('b0  = ',b0:6:3);
  d0:=d*(-1);
  writeln('d0  = ',d0:6:3);
  bd:=0;
  writeln('bd  = ',bd:6:3);
  readln();
end.
Nahlásit jako SPAM
IP: 90.179.26.–
gna
~ Anonymní uživatel
930 příspěvků
3. 2. 2017   #2
-
0
-

   

m[x,y]:=z;
Nahlásit jako SPAM
IP: 213.211.51.–
ovlaky0
Duch
3. 2. 2017   #3
-
0
-

#2 gna
Děkuji. 

program matice;

uses
  SysUtils;


var a,b,c,d,e,f,g:real;
    ab,bcd,de,b0,d0,bd,i,j:real;
    m1:array[1..3, 1..3] of integer;
    aa:char;

begin
  write('a = '); read(a);
  write('b = '); read(b);
  write('c = '); read(c);
  write('d = '); read(d);
  write('e = '); read(e);
  write('f = '); read(f);
  write('g = '); read(g);
  writeln;
  readln();
  ab:=a+b;
  writeln('ab  = ',ab:6:3);
  bcd:=b+c+d;
  writeln('bcd  = ',bcd:6:3);
  de:=d+e;
  writeln('ab  = ',de:6:3);
  b0:=b*(-1);
  writeln('b0  = ',b0:6:3);
  d0:=d*(-1);
  writeln('d0  = ',d0:6:3);
  bd:=0;
  writeln('bd  = ',bd:6:3);
  readln();
  for i:= 1 to 3 do
  for j := 1 to 3 do
  c:=[ab, b0,bd, b0, bcd, d0, bd, d0, de]
  m1[i,j]:=c;
  write(' ',m1[i,j]);
  readln();
end.

Zapsal jsem to tak, ale nefunguje mi to. Nemohu na to přijít.

Nahlásit jako SPAM
IP: 90.179.26.–
gna
~ Anonymní uživatel
930 příspěvků
3. 2. 2017   #4
-
0
-

Řídící proměnné (i ,j) cyklu musí být ordinálního typu (třeba integer). Real není ordinální typ.

Co čekáš od toho, že do realu (c) přiřadíš set?

Pokud v tom cyklu chceš provést více příkazů, tak musíš použít složený příkaz (begin-end).

Nahlásit jako SPAM
IP: 213.211.51.–
ovlaky0
Duch
3. 2. 2017   #5
-
0
-

#4 gna
Dobře, i a j jsem dal jako integer. To c jsem tam už jednou použil, to byla chyba. Změnil jsem ho tedy na písmeno h, ale nevím, do jakého typu proměnné ho mám dát? A ten set hodnot přiřazuji proto, že nevím, jak to jinak do té matice dostat, abych získal:

ab   b0  bd

b0  bcd d0

bd   d0  de

Nahlásit jako SPAM
IP: 90.179.26.–
gna
~ Anonymní uživatel
930 příspěvků
3. 2. 2017   #6
-
0
-

Proměnnou můžeš použít kolikrát chceš. Jde o to, že c je typu real - to je desetinné číslo. Nemůžeš do něj přiřazovat sadu hodnot.

Pole je řada prvků nejakého typu. K jednotlivým prvkům se přistupuje přes název pole a index prvku(-ů) v hranatých závorkách. Ve tvém případě je m1[1,1] první prvek.

Cyklus for opakovaně provádí následující příkaz a mění hodnotu řídící proměnné. Není to žádné zaklínadlo, že chceš pracovat se skupinou hodnot.

Nahlásit jako SPAM
IP: 213.211.51.–
ovlaky0
Duch
4. 2. 2017   #7
-
0
-

#6 gna
Promiňte, ale mám v tom úplně guláš. Učitel nás to nikdy neučil, řekl, ať si to nastudujeme na internetu a vytvoříme. Já už se ale dál přes toto nehnu. Už jsem zkoušel několik pokusů, jak to tam dosadit, ale vždy je tam nějaká chyba. Nepomůžete mi prosím, jak to tam dostanu a jakými přesně příkazy? Děkuji.

Nahlásit jako SPAM
IP: 90.179.26.–
gna
~ Anonymní uživatel
930 příspěvků
4. 2. 2017   #8
-
0
-

S tím tady někdo chodí každou chvíli. A VŽDYCKY je to lež.

Pokud se to má plnit nějakým algoritmem, tak ho budeš muset vymyslet. Jak nastavovat konkrétní prvky jsem ti napsal.

m1[1,1] := neco; m1[1,2] := neco; m1[1,3] := neco; ...

Tak jak to máš napsané nemá cyklus smysl. Ani to pole. Jestli jen máš spočítat hodnoty a vypsat je v tabulce, tak tam prostě dáš sérii writů.

Nahlásit jako SPAM
IP: 213.211.51.–
ovlaky0
Duch
4. 2. 2017   #9
-
0
-

#8 gna
Mockrát Vám děkuji! Dlouho jsem si s tím hrál, až jsem na to přišel, samozřejmě s Vaší pomocí. Jinak, lež to bohužel není, ale aspoň z toho mám velkou radost. :-)

Nahlásit jako SPAM
IP: 90.179.26.–
ovlaky0
Duch
9. 2. 2017   #10
-
0
-

Ještě bych se chtěl zeptat, jestli je možné v Pascalu provést jako v Excelu příkaz Determinant matice? Je na to speciální ''kód''? Děkuji.

Nahlásit jako SPAM
IP: 90.179.26.–
Sniper
~ Anonymní uživatel
213 příspěvků
9. 2. 2017   #11
-
0
-

No "příkaz" (tj. funkce) na to přímo nebude, možná v nějakých maticových knihovnách, každopádně jsou na to postupy a jejich implementace není až tak složitá https://en.wikipedia.org/wiki/Determinant

Nahlásit jako SPAM
IP: 90.179.201.–
Mircosoft+1
Věrný člen
9. 2. 2017   #12
-
0
-

Standardní předdefinované knihovny pro počítání s maticemi pokud vím neexistují, je potřeba napsat si je sám. Už jsem to jednou dělal - viz odkaz v podpisu, sekce Unitky, jednotka Matyka. Ale je stavěná na univerzálnost, ne na srozumitelnost. Spíš by se ti mohly hodit sekce Návody (základy pascalu) a Škola (nějaký příklad na matice tam je).

Omlouvám se za spamování :-).

Nahlásit jako SPAM
IP: 212.79.106.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
ovlaky0
Duch
10. 2. 2017   #13
-
0
-

Děkuji za nápady, ale našel jsem už něco jednoduše zpracovaného. Ovšem, problémem je, že do matice načítá ze souboru. Jakou úpravu mám udělat, aby mi dosazoval již zadané hodnoty? Vím, že stačí jen udělat něco z posledním algoritmem, ale ani po 4 hodinách jsem prostě na to nepřišel... 

Program Vyp_Determinantu;
{Program vypocita determinant matice ulozene v souboru det.txt v tomto
formatu: rad determinantu (max. 10), jednotlive prvky po radcich}


Uses Crt;


Const HMez = 10;

Type TMatice = array [1..HMez,1..HMez] of real;

var Matice: TMatice;
    s: text;
    n: byte;
    i, j: byte;


Procedure VypisMatici(var Matice: TMatice; rad: byte);
var i, j: byte;
begin
  for i:=1 to rad do begin
    for j:=1 to rad do write(Matice[i,j]:6:2);
    writeln;
  end;
  writeln;
end;


Function Determinant(Det: TMatice; rozmer: byte): real;
{Pocita determinant rozvojem podle 1. radku}
var i, k, l, radek, sloupec : byte;
    vysledek: real;
    SubDet: TMatice;
    znamenko: real;
begin
  if rozmer=1 then
    Determinant:=Det[1,1]
  else if rozmer>1 then begin
    vysledek:=0; {vysledek determinantu}
    for i:=1 to rozmer do begin
      {pro prvky v radku -> rozvoj podle 1. radku}
      {i. prvek radku}
      for k:=2 to rozmer do begin {pro radky od 2. do konce}
        sloupec:=0;
        for l:=1 to rozmer do
          if l<>i then begin
            inc(sloupec);
            SubDet[k-1,sloupec]:=Det[k,l];
          end;
      end;
      znamenko:=1;
      for k:=1 to i+1 do znamenko:=znamenko*(-1);
      vysledek:=vysledek+Det[1,i]*znamenko*Determinant(SubDet, rozmer-1);
    end;
    Determinant:=vysledek;
  end;
end;


begin
  ClrScr;
  assign(s, 'det.txt');
  reset(s);
  readln(s, n);
  for i:=1 to n do
    for j:=1 to n do
      read(s, Matice[i,j]);

  VypisMatici(Matice, n);
  writeln('Prosim cekejte, probiha vypocet ...');
  writeln('Hodnota determinantu: ',Determinant(Matice, n):0:2);
  ReadKey;
end.
Nahlásit jako SPAM
IP: 90.179.26.–
gna
~ Anonymní uživatel
930 příspěvků
10. 2. 2017   #14
-
0
-

To už si děláš srandu. Prostě tu matici místo načítání ze souboru naplň po svém. S čím si nevíš rady?

To máš do školy a chceš to odevzdávat, když nechápeš ani řádek?

Nahlásit jako SPAM
IP: 213.211.51.–
ovlaky0
Duch
10. 2. 2017   #15
-
0
-

#14 gna
Ano, mám to do školy. Matici pevné velikosti 6x6 mám naplněnou předem zadanými čísly. Když jí dám vypočítat a vypsat, napíše chybu, že u matice chybí rozměr (dle definice řádku: Function Determinant(Det: TMatice; rozmer: byte): real;). Když tam teda dám 6, determinant vyjde 0.

Nahlásit jako SPAM
IP: 90.179.26.–
gna
~ Anonymní uživatel
930 příspěvků
11. 2. 2017   #16
-
0
-

A co jako? Zkus jinou matici.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý