Program Obliczający ilość kółek w liczbie.

0

Witam mam do napisania program w Turbo Pascalu który po wczytaniu liczby z wejscia obliczy ilość kółek w tej liczbie np jeśli wczytamy 88 to na wyjściu ma pojawić się 4 ( jedna ósemka to dwa kółka) jak wczytamy np 2581 na wyjściu ma pojawic sie dwa ( bo jest tu jedna ósemka) natomiast jak wczytamy inną luiczbe np 7 4 3 na wyjsciu powinno pojawic sie zero. Nie mam za bardzo pomysłu jak to zrealizować Prosiłbym o jakieś wskazówki.

0

sprawdź każdy znak wprowadzonej liczby i jeśli jest = 8 to dodaj 2 do sumy kółek

0

80 to 2 kółeczka czy 3?
a w 6890 ile będzie?

6

To jest skomplikowana sprawa. Musisz użyć sieci neuronowej która będzie bawić się w rozpoznawanie obrazu i stwierdzać ile jest kółek...

0
function ile_kolek(liczba:integer)
const kolka:array[0..9] of integer = (1,0,0,0,0,0,1,0,2,1);
var s:string;
    i, ile:integer;
begin
  str(liczba, s);
  ile:=0;
  for i:=0 to length(s)-1 do
    inc(ile,kolka[s[i]]);
  ile_kolek:=ile;
end;

Nie sprawdzane.
Ponadto, celowo jest tu pewien błąd.

0

Dziękuje wszystkim za odpowiedzi myślałem że jednak obejdzie sie bez korzystania z funkcji łańcuchowych a tu jednak trzeba było a z tym miałem największy problem ;) z tablicą widze że dobrze myślałem tu ktoś pytał jeszcze jak to ma byc jesli mamy 80 to są trzy kołka ósemka to dwa a 0 no to wiadomo trzecie.

0

że jednak obejdzie sie bez korzystania z funkcji łańcuchowych

A nie obejdzie się? Nikt tak nie powiedział. Tak po prostu jest łatwiej.

z tablicą widze że dobrze myślałem tu ktoś pytał jeszcze jak to ma byc jesli mamy 80 to są trzy kołka ósemka to dwa a 0 no to wiadomo trzecie.

Znaków interpunkcyjnych nie umiesz stawiać to ciężko quotować.
Ja zamiast tablicy bym użył case, sądzę że by czytelniej było...

0
merkury napisał(a):

... że jednak obejdzie sie bez korzystania z funkcji łańcuchowych a tu jednak trzeba ...
Wcale nie trzeba:

const Map:array['0'..'9'] of Byte=(1,0,0,0,0,0,1,0,2,1);
var Ch:Char;
var Cnt:Integer;
var F:Boolean;
begin
  while true do
  begin
    Write('Podaj liczbe: ');
    F:=true;
    Cnt:=0;
    while true do
    begin
      Read(Ch);
      if Ch=#13 then Continue;
      if Ch=#10 then Break;
      if ('0'<=Ch)and(Ch<='9') then Inc(Cnt,Map[Ch]) else F:=false;
    end;
    if F then WriteLn('Ilosc kolek wynosi ',Cnt)
    else WriteLn('To nie jest liczba');
    WriteLn;
  end;
end.
0

Też się zaciekawiłem tematem, ale cos mi nie wychodzi. Mógł by mi ktoś wytłumaczyć gdzie mam błąd?

program kolka;
 uses Crt;
 var liczba,ilosc2:integer;
function liczba_kolek(liczba:integer):integer;
const kolka:array[0..9] of integer =(1,0,0,0,0,0,1,0,2,1);
var i,b,kod,ile:integer;
    s,t:string;
begin
 str(liczba,s);
 ile:=0;
for i:=0 to length(s)-1 do
 begin
  t:=copy(s,i,1+i);
  val(t,b,kod);
  ile:=ile+kolka[b];
 end;
liczba_kolek:=ile;
end;

Begin
 ClrScr;
 write('Podaj liczbe, aby policzyc w niej kolka: ');
 read(liczba);

  ilosc2:=liczba_kolek(liczba);
 Writeln('Liczba ma kolek: ',ilosc2);

 readkey;
end.
1
function cyrklesy(w:cardinal; i:integer):integer;
begin
  if i>9 then cyrklesy:=cyrklesy(w, i div 10) + (w shr (2*(i mod 10))) and 3
  else cyrklesy:= (w shr ((i mod 10)shl 1)) and 3;
end;

var i: integer;
begin
  readl( i );
  writeln( cyrklesy(397313, i) );
end.

user image

0

można dużo prościej:

function cyrklesy(w, y: cardinal):integer;
begin
  cyrklesy := (w shr (y mod 10) and (w shr 1 shr (y mod 10))) and 1 + (w shr (y mod 10)) and 1;
  if y > 9 then Inc(cyrklesy, cyrklesy(w, y div 10));
end;
 
var i: cardinal;
begin
  readln( i );
  writeln( cyrklesy(833, i) );
end;

user image

0

TomRiddle a czym jest elipsa jak nie spłaszczonym kołem :D

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