Proszę o pomoc przy napisaniu programu w Turbo Pascalu

2011-03-17 20:36
0

Witam! :)
Potrzebuję napisać na jutro program, z którym mam problem. Jeśli ktoś umie zrobić ten program, to proszę o podpowiedź, co mam źle w kodzie.
Polecenie zadania:
Dana jest liczba 'K' typu [1..16], oraz ciąg 'K' znaków z zakresu '0'..'1'. Napisz program, który wypisze wartość liczby powstałej w wyniku utworzenia ciągu znaków.

Chodzi o system szesnastkowy.
Np:
Znak '0' + znak '1' + znak '1' = 011
011 w szesnastkowym to będzie 2 do pierwszej + 2 do drugiej. (Tak zrozumiałem to zadanie).

Jest ktoś kto mi pomoże :)?
Kod mojego programu:

USES CRT;
VAR
znak:char;
liczba,wynik,ilosc,wynik2,j,i:byte;
           BEGIN
           clrscr;
           wynik:=1;
           writeln('Ile znakow bedziesz wprowadzal? Maxymalnie 16');
           readln(ilosc);
           for i:=1 to ilosc do
               BEGIN
               writeln('Podaj znak''0'' albo ''1'':');
               readln(znak);
               liczba:=liczba+znak;
               END;
           for i:=1 to ilosc do
               BEGIN
               IF liczba[i]=2 then
                  BEGIN
                  for j:=1 to i do
                      BEGIN
                      wynik:=wynik*2;
                      wynik2:=wynik2+wynik;
                      END;
                  END;
               END;
               writeln(wynik2);
               readkey;
               end.

Proszę o pilną odpowiedź :)

edytowany 2x, ostatnio: Dyzio1414, 2011-03-17 20:47
wstawiaj kod w znaczniki <code=pascal></code> - madmike 2011-03-17 20:42
zmień tytuł na sensowny, opisujący problem - madmike 2011-03-17 20:42
napisz z czym masz problem, "pomocy" lub "proszę o szybką odpowiedź" to nie jest opisanie problemu! - madmike 2011-03-17 20:43
Zadanie nie zrozumiałeś to na 100%. "011 w szesnastkowym to będzie 2 do pierwszej + 2 do drugiej", dla cyfr 011 - kod szesnastkowy to będzie 16+1=17, dla binarnego to będzie 2+1=3 więc to nie jest ani szesnastkowy ani binarny. - _13th_Dragon 2011-03-18 00:17

Pozostało 580 znaków

2011-03-17 23:51
0

011 w szesnastkowym to będzie 2 do pierwszej + 2 do drugiej. (Tak zrozumiałem to zadanie).

to jest system dwójkowy (binarny)

ja bym raczej bym sklonny za troche prostszym rozwiazaniem:

uses CRT;

var
  k,licz,i: Integer;
  c: char;

begin
  Write('Podaj ile znakow bedziesz wprowadzal (1-16): ');
  ReadLn(k);
  WriteLn('Podaj liczbe w systemie binarnym: (', k, ' cyfr)');
  licz:=0;
  for i:=1 to k do
    begin
      Read(c);
      licz:=licz*2;
      licz:=licz+Ord(c)-Ord('0');
    end;
  ReadLn; { liczba jest zakonczona enterem stad wczytanie z wejscia tego znaku }
  WriteLn('Twoja liczba w systemie dziesietnym to: ', licz);
  ReadLn; { czekanie na enter ktory zamknie program }
end.

Nie pozwalam kopiować tego kodu, pokombinuj sobie sam gdzie masz błędy.


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 2x, ostatnio: krwq, 2011-03-17 23:53
No i przy wpisaniu 011 wyjdzie ci 3 zaś autor tematu chcę: "2 do pierwszej + 2 do drugiej" czyli 6 - _13th_Dragon 2011-03-18 00:23
tego dziwnego rozumowania mój mózg chyba nawet nie chciał widzieć :P - krwq 2011-03-18 15:50
A jak to jeszcze połączyć z tym że autor chcę "w szesnastkowym", to mózg całkiem wysiada. No chyba że to jest system binarny ale odwrócony czyli 011 to tak naprawdę 110 - _13th_Dragon 2011-03-18 16:06

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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