Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 30. 12. 2011 15:50 — Editoval hucik (30. 12. 2011 16:05)

hucik
Zelenáč
Příspěvky: 4
Reputace:   
 

pascal - rovnice o 4 neznámých

Mám za úkol v pascalu vytvořit program pro výpočet soustavy 4 rovnic o 4 neznámých. Rozhodl jsem se použít Cramerovo a Sarrusovo pravidlo, akorát že můj program vždy spadne nebo vypíše, že soustava nemá řešení. Pomozte mi prosím, aby to počítalo :-D
Děkuji

Sarrus + Crameron (dole)
http://ifanda.cz/clanky/matematika/mozn … terminantu

Code:

program matdet;

uses
  crt;
  
type
  Tpole = array[1..5,1..5] of real;
  
var
  m,n,i: integer;
  r: Tpole;
  d0,d1,d2,d3,d4,x1,x2,x3,x4: real;


procedure zapis;

    begin
      writeln('Vitejte v programu pro vypocet rovnic o ctyrech neznamych. V nasledujicich krocich postupujte dle instrukci, program zbytek spocita. Stisknete ENTER');
      readln();
      
      clrscr;
      writeln('Nyni dle navodu zapiste hodnoty rovnic');
      m:= 1;
      
      for i:= 1 to 4 do
        begin
          clrscr;
          n:= 1;
          
              
          writeln('ax1 + bx2 + cx3 + dx4 = e');
          writeln('Zapis "a" hodnotu ',m,'. rovnice, ');
          readln(r[m,n]);
          writeln('Zapis "b" hodnotu ',m,'. rovnice, ');
          readln(r[m,n+1]);
          writeln('Zapis "c" hodnotu ',m,'. rovnice, ');
          readln(r[m,n+1]);
          writeln('Zapis "d" hodnotu ',m,'. rovnice, ');
          readln(r[m,n+1]);
          writeln('Zapis "e" hodnotu ',m,'. rovnice, ');
          readln(r[m,n+1]);
              
          m:= m+1;
        end;
    end;


procedure determinanty;

    var 
      a,b,c,d: integer;    
    
    begin      
            
      d0:= ( r[1,1]*r[2,2]*r[3,3]*r[4,4] + r[2,1]*r[3,2]*r[4,3]*r[1,4] + r[3,1]*r[4,2]*r[1,3]*r[2,4] + r[4,1]*r[1,2]*r[2,3]*r[3,4] )
         - ( r[4,1]*r[3,2]*r[2,3]*r[1,4] + r[1,1]*r[4,2]*r[3,3]*r[2,1] + r[2,1]*r[1,2]*r[4,3]*r[3,4] + r[3,1]*r[2,2]*r[1,3]*r[4,4] );
      
      if d0 <> 0 then 
      
        begin
          a:= 1;
          b:= 2;
          c:= 3;
          d:= 4;
          
          d1:= ( r[1,a]*r[2,b]*r[3,c]*r[4,d] + r[2,a]*r[3,b]*r[4,c]*r[1,d] + r[3,a]*r[4,b]*r[1,c]*r[2,d] + r[4,a]*r[1,b]*r[2,c]*r[3,d] )
             - ( r[4,a]*r[3,b]*r[2,c]*r[1,d] + r[1,a]*r[4,b]*r[3,c]*r[2,d] + r[2,a]*r[1,b]*r[4,c]*r[3,d] + r[3,a]*r[2,b]*r[1,c]*r[4,d] );
      
          a:= a-4;
          b:= b+3;
          d2:= ( r[1,a]*r[2,b]*r[3,c]*r[4,d] + r[2,a]*r[3,b]*r[4,c]*r[1,d] + r[3,a]*r[4,b]*r[1,c]*r[2,d] + r[4,a]*r[1,b]*r[2,c]*r[3,d] )
             - ( r[4,a]*r[3,b]*r[2,c]*r[1,d] + r[1,a]*r[4,b]*r[3,c]*r[2,d] + r[2,a]*r[1,b]*r[4,c]*r[3,d] + r[3,a]*r[2,b]*r[1,c]*r[4,d] );
        
          b:= b-3;
          c:= c+2;    
          d3:= ( r[1,a]*r[2,b]*r[3,c]*r[4,d] + r[2,a]*r[3,b]*r[4,c]*r[1,d] + r[3,a]*r[4,b]*r[1,c]*r[2,d] + r[4,a]*r[1,b]*r[2,c]*r[3,d] ) 
             - ( r[4,a]*r[3,b]*r[2,c]*r[1,d] + r[1,a]*r[4,b]*r[3,c]*r[2,d] + r[2,a]*r[1,b]*r[4,c]*r[3,d] + r[3,a]*r[2,b]*r[1,c]*r[4,d] );
      
          c:= c-2;
          d:= d+1;
          d4:= ( r[1,a]*r[2,b]*r[3,c]*r[4,d] + r[2,a]*r[3,b]*r[4,c]*r[1,d] + r[3,a]*r[4,b]*r[1,c]*r[2,d] + r[4,a]*r[1,b]*r[2,c]*r[3,d] )
             - ( r[4,a]*r[3,b]*r[2,c]*r[1,d] + r[1,a]*r[4,b]*r[3,c]*r[2,d] + r[2,a]*r[1,b]*r[4,c]*r[3,d] + r[3,a]*r[2,b]*r[1,c]*r[4,d] );
         
            
          x1:= d1/d0;
          x2:= d2/d0;
          x3:= d3/d0;
          x4:= d4/d0; 
          
          writeln('x1 = ',x1);
          writeln('x2 = ',x2);
          writeln('x3 = ',x3);
          writeln('x4 = ',x4);
  
        end     
                
        else 
          begin
            writeln('Rovnice maji bud zadne nebo nekonecne mnoho reseni.');
          end;
 
    readln();
  end;
  
begin 
  zapis;
  determinanty;  
end.

Offline

  • (téma jako vyřešené označil(a) janca361)

#2 30. 12. 2011 20:51

Dioxid
Příspěvky: 416
Reputace:   13 
 

Re: pascal - rovnice o 4 neznámých

Zdravím, obávám se že problém je v tom, že Sarrusovo pravidlo je jen pro matice 3x3.


Jsem omylný, proto ne vše, co jsem napsal, je zaručeně správně.
468

Offline

 

#3 31. 12. 2011 12:07

hucik
Zelenáč
Příspěvky: 4
Reputace:   
 

Re: pascal - rovnice o 4 neznámých

Jo takhle... no potom je téma vyřešeno, děkuji :)

Offline

 

#4 01. 01. 2012 11:48

hucik
Zelenáč
Příspěvky: 4
Reputace:   
 

Re: pascal - rovnice o 4 neznámých

Prosím ještě jednou o pomoc... chyba bude nejspíše v zadávání hodnot. Pro kontrolu jsem si je nechal vypsat a ať už jsem si předtím zadal cokoli, vždy mi vypíše všechny hodnoty nulové :( jsem už zoufalý, compilator žádnou chybu nehlásí, prosím o radu

Code:

program mat;

uses crt;


    type
      tpole = array[1..5,1..5] of integer;
    var
      m,i: integer;
      r: tpole;
      
      
procedure zapis;
    begin
      clrscr;
      m:= 1;
      
      for i:= 1 to 4 do
        begin
          
          
          clrscr;
          writeln('Nyni dle navodu zapiste hodnoty rovnic');      
          writeln('ax1 + bx2 + cx3 + dx4 = e');
          writeln('Zapis "a" hodnotu ',m,'. rovnice, ');
          readln(r[m,1]);
          writeln('Zapis "b" hodnotu ',m,'. rovnice, ');
          readln(r[m,2]);
          writeln('Zapis "c" hodnotu ',m,'. rovnice, ');
          readln(r[m,3]);
          writeln('Zapis "d" hodnotu ',m,'. rovnice, ');
          readln(r[m,4]);
          writeln('Zapis "e" hodnotu ',m,'. rovnice, ');
          readln(r[m,5]);
              
          m:= m+1;
        end;
    end;
    
begin

zapis;

for i:= 1 to 4 do

        begin               
          writeln(r[m,1]);
          
          writeln(r[m,2]);
          
          writeln(r[m,3]);
          
          writeln(r[m,4]);
          
          writeln(r[m,5]);
              
          m:= m+1;
        end;
        
readln;

end.

Offline

 

#5 01. 01. 2012 14:21

Dioxid
Příspěvky: 416
Reputace:   13 
 

Re: pascal - rovnice o 4 neznámých

Doporučoval bych používat v cyklech tu samotnou "řídící" proměnnou (v tomto případě i), ne pomocnou ( tu máš pojmenovanou m). To ale není chyba. Chyba je, že před cyklem v hlavním programu chybí
m:=1;
Takže po proceduře zapis v m zůstane hodnota 5 (čtyřikrát přičítáme jedničku, na začátku je tam jednička). V dalším cyklu, kde se vypisuje, bude tedy m nabývat hodnot 5 až 9 (jen se přičítá čtyřikrát jednička). Vypisujeme tedy hodnoty např. r[6,4], r[8,3], kde nic uloženo není. Program by tedy měl buď spadnout (pole je jen 1..5, nikoli 1..9) nebo vypsat nulu (do r[8,3] jsme opravdu nic neuložili -> je tam nula).

Řešením je tedy buď přidat řádek s nastavením m:=1; nebo vypisovat podle proměnné i, jak je videt v kódu zde:

Code:

program mat;

uses crt;


    type
      tpole = array[1..5,1..5] of integer;
    var
      m,i: integer;
      r: tpole;
      

procedure zapis;
    begin
      clrscr;

      for i:= 1 to 4 do
        begin


          clrscr;
          writeln('Nyni dle navodu zapiste hodnoty rovnic');
          writeln('ax1 + bx2 + cx3 + dx4 = e');
          writeln('Zapis "a" hodnotu ',m,'. rovnice, ');
          readln(r[i,1]);
          writeln('Zapis "b" hodnotu ',m,'. rovnice, ');
          readln(r[i,2]);
          writeln('Zapis "c" hodnotu ',m,'. rovnice, ');
          readln(r[i,3]);
          writeln('Zapis "d" hodnotu ',m,'. rovnice, ');
          readln(r[i,4]);
          writeln('Zapis "e" hodnotu ',m,'. rovnice, ');
          readln(r[i,5]);


        end;
    end;
    
begin

zapis;

for i:= 1 to 4 do

        begin               
          writeln(r[i,1]);

          writeln(r[i,2]);

          writeln(r[i,3]);

          writeln(r[i,4]);

          writeln(r[i,5]);

        end;
        
readln;

end.

Jsem omylný, proto ne vše, co jsem napsal, je zaručeně správně.
468

Offline

 

#6 01. 01. 2012 15:04

hucik
Zelenáč
Příspěvky: 4
Reputace:   
 

Re: pascal - rovnice o 4 neznámých

Děkuji, už to jede správně :)

Offline

 

#7 01. 01. 2012 15:49

Dioxid
Příspěvky: 416
Reputace:   13 
 

Re: pascal - rovnice o 4 neznámých

Není zač, možná by bylo vhodné téma označit za vyřešené.


Jsem omylný, proto ne vše, co jsem napsal, je zaručeně správně.
468

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson