Kilka opcji w procedurze. - Pascal


(Pawel Pieczyrak) #1

Witam. Nie umiem powiedzieć o co mi chodzi wprost, więc będę się starał wytłumaczyć to na przykładzie.

Chcę dodać opcje obliczania rezystancji zastępczej do mojego programu. I teraz nie chcę robić ustalonej ich liczby tylko np. jak ktoś wpisze 3 to pobierze od niego 3 dane, a jak wpisze 9 to pobierze 9 dany i na podstawie tych danych zostanie obliczona wartość zastępcza. Dodatkowo po wybraniu ilości oporników program ma się pytać, czy jest to połączenie równoległe czy szeregowe. Czy ktoś może podać mi przykład jak to wykonać ?


(Sawyer47) #2

A program jest CLI czy z GUI?

Jeśli CLI to można to zrobić na wiele sposobów. Użytkownik może albo wszystkie dane podać w jednej linii, oddzielone jakimś ustalonym znakiem, albo podawać pojedynczo aż do jakiejś ustalonej wartości kończącej pobieranie.


(Pawel Pieczyrak) #3

Program działa w trybie tekstowym. Ja chcę tak zrobić, aby użytkownik najpierw podał, ile ma oporników np 6 i na podstawie podanej liczby program ma pobrać 6 danych. Gdyby podał 10 to program ma pobrać dziesięć. To aplikacja musi się dostosować, ile danych ma pobrać od użytkownika, czy 2 czy 15. Przynajmniej chciałbym tak zrobić.


(Sawyer47) #4

Tak też można. Więc w czym problem? Pobierasz liczbę całkowitą, a potem tyle razy ile wynosi, w pętli, pobierasz kolejne wartości od użytkownika.


(system) #5

Zacznijmy od tego że najlepiej wszystko zrobić na tablicach... Bym to zrobił jakoś tak:

program wczytanie_wartości

const

max=100; {maksymalna liczba oporników}

type

tablica = array [1..max] of real; {jednowymiarowa tablica z wartościami oporników}

var

t:tablica;

i,n:integer;


begin

writeln('Podaj liczbę oporników: '):

read(n):

for i:=1 to n do

     begin

     writeln(' Podaj wartosc opornika numer',i);

     read(t[i]);

    end;

end.

(Simplex111) #6

Może coś z tego Ci się przyda :slight_smile:

program Testowy;


const maxR = 100;


type TablicaR = array[1..maxR] of Integer;


var tabR: TablicaR;

    i, Ile, rSzer: Integer;

    rRown: Real;


procedure WczytajDane(var tab: TablicaR; var ileWczytano: Integer);

var i: Integer;

begin

  i:= 1;

  ileWczytano:= 0;

  Writeln('Podawaj wartosci rezystorow (koniec - 0)');

  repeat

    Write(i, '. rezystor = ');

    Readln(tab[i]);

    if tab[i] > 0 then Inc(ileWczytano);

    Inc(i);

  until tab[i-1] = 0;

end;


begin

  WczytajDane(tabR, Ile);

  Writeln;

  Writeln('Liczba rezystorow: ', Ile);


  rSzer:= 0;

  for i:= 1 to Ile do rSzer:= rSzer + tabR[i];

  Writeln('Polaczenie szeregowe: Rz = ', rSzer);


  rRown:= 0;

  for i:= 1 to Ile do rRown:= rRown + 1/tabR[i];

  rRown:= 1/rRown;

  Writeln('Polaczenie rownolegle: Rz = ', rRown:3:2);

  Readln;

end.