Pięć modułów do rozwiązania, z którymi mam problem -

Fristajler_2005

Pięć modułów do rozwiązania, z którymi mam problem -

Post autor: Fristajler_2005 »

Mam problem z nastepującymi zadankami. Mam do napisania coś takiego:

1. Zdefiniuj funkcję UsunSpacjeBiale (ciąg), która usunie z jakiegoś ciągu spacje białe (usunie spacje boczne + zamieni większą ilość spacji pomiędzy wyrazami na jedną).
2. Zdefiniuj funkcje Kwadraty (ciąg), która wszystkie słowa w dowolnym ciągu umiesci w nawiasach kwadratowych.
3. Zdefiniuj funkcję Numeryczna (ciąg) sprawdzającą, czy podany ciąg jest wartością numeryczną - wynikiem powinna być wartość True lub False
4. Zdefiniuj funkcję Dodaj (ciąg1, ciąg2), ktorej wznikiem jest suma wartosci numerycznych reprezentowanych przez dwa ciagi lub 0 jesli jeden z nich nie reprezenutuje wartosci numerycznej.
5. Zdefiniuj funkcje Binarna (liczba), ktora dowolna, naturalna liczbe zamieni na jej postac binarna - funkcja musi uwzglednic wszystkie mozliwe wprowadzone dane, akceptowac w przypadku poprawnych - wyswietlac komunikat Zle dane w przypadku wprowadzeia liczby innej niz dodatnia.

Moglby mi ktos to rozwiazac. Bylbym bardzo wdzieczny. Jestem poczatkujacy. Probowalem sam do tego dojsc i nie moge. Prosze o pomoc. Za rozwiazanie DUZY PUNKT POMOCY
Awatar użytkownika
Sulik
Użytkownik
Użytkownik
Posty: 161
Rejestracja: 1 lis 2005, o 11:50
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 44 razy

Pięć modułów do rozwiązania, z którymi mam problem -

Post autor: Sulik »

5.

Kod: Zaznacz cały

function Binarna(liczba: LongInt) : string;
var
  s: string;
  a, r : LongInt;
begin
  if liczba < 0 then
  begin
    writeln('Zla');
    Binarna := '';
    exit;
  end;
  s := '';
  a := liczba;
  repeat
    r := a mod 2;
    if r=0 then
      s:='0'+s
    else
      s:='1'+s;
    a := a div 2;
  until a=0;
  Binarna := s;
end;

Fristajler_2005

Pięć modułów do rozwiązania, z którymi mam problem -

Post autor: Fristajler_2005 »

Ok. Dzienx. Czekam na dalsze

[ Dodano: Sob Lis 26, 2005 3:43 pm ]
OK. Drugie i trzecie juz mam. Jeszcze zostało Pierwsze i czwarte. Pomoże ktoś?
Awatar użytkownika
Sulik
Użytkownik
Użytkownik
Posty: 161
Rejestracja: 1 lis 2005, o 11:50
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 44 razy

Pięć modułów do rozwiązania, z którymi mam problem -

Post autor: Sulik »

3.

Kod: Zaznacz cały

function Kwadraty(ciag: string): string;
var
  a,s : string;
  i : Integer;
begin
  if Length(ciag)>0 then
  begin
    if ciag[1]<>' ' then ciag := '['+ciag;
    if ciag[length(ciag)]<>' ' then ciag := ciag+']';
    s := '';
    for i := 1 to Length(ciag)-1 do
    begin
      a := ciag[i];
      if (ciag[i] =' ') and (ciag[i+1]<> ' ') then
        a := ciag[i] + '[';
      if (ciag[i]<>' ') and (ciag[i+1] = ' ') then
        a := ciag[i] + ']';
      s := s + a;
    end;
    s := s+ciag[Length(ciag)];
  end else s := '';
  Kwadraty := s;
end;
[edit] Heh, trzeba było wcześniej, ja też mam :)

1.

Kod: Zaznacz cały

function UsunSpacjeBiale(ciag: string): string;
var
  i : integer;
begin
  i := 1;
  while i <= Length(ciag)-1 do
    if (ciag[i]=' ') and (ciag[i+1]=' ') then delete(ciag, i, 1) else i := i + 1;
  if ciag[1]=' ' then delete(ciag, 1, 1);
  if ciag[Length(ciag)]=' ' then delete(ciag, Length(ciag), 1);
  UsunSpacjeBiale := ciag;
end;
[ Dodano: 26-11-2005, 15:27 ]
A czy funkcja 4 może korzystać z funkcji 3?
Fristajler_2005

Pięć modułów do rozwiązania, z którymi mam problem -

Post autor: Fristajler_2005 »

Może. Zadanie czwarte ponoć ma być na podstawie trzeciego. Zostało mi tylko to czwarte. Licze na pomoc.

Przepraszam. Poprawka. Do tego czwartego jeszcze zostały mi dwa moduły, a mianowicie:

6. Zdefiniuj funkcję Haslo, ktora wygeneruje haslo skladające się z 8 do 16 znaków, którymi moga być małe i duże litery, oraz cyfry.
7. Zdefiniuj funkcję totek, która wygeneruje sześć różnych liczb z przedziału 1..49.

To wszystko z zadań. Będę wdzięczny za rozwiązanie. Pozdrawiam.
Awatar użytkownika
Sulik
Użytkownik
Użytkownik
Posty: 161
Rejestracja: 1 lis 2005, o 11:50
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 44 razy

Pięć modułów do rozwiązania, z którymi mam problem -

Post autor: Sulik »

4. Można też rozwiązać bez dodatkowych funkcji (IntToStr i StrToInt), ale będzie dużo brzydziej i dłużej. Funkcja Dodaj wykorzysuje funkcję Numeryczna z pkt. 3.

Kod: Zaznacz cały

function IntToStr(liczba: Integer): string; {zamienia liczbe na ciag znakow}
var
  s : string;
begin
  str(liczba, s);
  IntToStr := s;
end;

function StrToInt(ciag: string): Integer; {zamienia ciag znakow na liczbe}
var
  n, err : Integer;
begin
  val(ciag, n, err);
  StrToInt := n;
end;


function Dodaj(ciag1, ciag2: string): string;
var
  s1, s2:  string;
  r, i : Integer;
  s : string;
begin
  if (not Numeryczna(ciag1)) or (not Numeryczna(ciag2)) then
  begin
    Dodaj := '0';
    exit;
  end;                                                  

  if Length(ciag1) > Length(ciag2) then  {robi tak, by s1 byla dluzsza z liczb, a s2 krotsza}
  begin
    s1 := ciag1;
    s2 := ciag2;
  end else
  begin
    s1 := ciag2;
    s2 := ciag1;
  end;

  while Length(s1) > Length(s2) do  {uzupelnia krotsza liczbe zerami na poczatku}
    s2 := '0' + s2;

  s := '';
  r := 0;
  for i := Length(ciag1) downto 1 do
  begin
    s:=IntToStr(((r + StrToInt(s1[i])+StrToInt(s2[i])) mod 10))+s;
    r:=(r + StrToInt(s1[i])+StrToInt(s2[i])) div 10;
  end;

  if r <> 0 then s := IntToStr(r)+s;
  Dodaj := s;
end;


[ Dodano: 26-11-2005, 20:16 ]
2 pytanka:
Czy długość Hasła (funkcja 6) ma być argumentem funkcji, czy losowana?
W jaki sposób ma być zwracana wartość przez funkcję totek?
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

Pięć modułów do rozwiązania, z którymi mam problem -

Post autor: Fibik »

Kod: Zaznacz cały

function haslo : string;
var c, len : integer;
      s : string;
begin

   s := '';

   for len := random(9)+8 downto 1 do
    begin
     c := random(26+26+10);
     
     if c < 26 then inc(c, ord('a'))
     else if c < 26+26 then inc(c, ord('A') - 26)
     else inc(c, ord('0') - (26+26));
     
     s := s + char(c);
    end;

   haslo := s;
end;

Awatar użytkownika
Sulik
Użytkownik
Użytkownik
Posty: 161
Rejestracja: 1 lis 2005, o 11:50
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 44 razy

Pięć modułów do rozwiązania, z którymi mam problem -

Post autor: Sulik »

Kod: Zaznacz cały

function Haslo:string;
var
  znaki: string;
  s : string;
  i, n : Integer;
begin
  znaki:='QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890';
  n := Random(8)+9; {losuje liczbe od 9 do 16}
  s := '';
  for i:=1 to n do
    s:= s + znaki[Random(Length(znaki))+1];
  Haslo := s;
end;
I koniecznie trzeba dopisać gdzieś w programie (ale przed wywołaniem funkcji hasło, np. zaraz po begin) polecenie Randomize. Nie może być ono w funkcji, gdyż w takim wypadku wywołanie jej wiele razy w krótkim czasie dało by identyczne rezultaty.
Fristajler_2005

Pięć modułów do rozwiązania, z którymi mam problem -

Post autor: Fristajler_2005 »

W zasadzie wszystko jest w tresci zadań, ale zrób jak uważasz. Najlepsza bedzie najprostsza metoda ;]
Awatar użytkownika
Sulik
Użytkownik
Użytkownik
Posty: 161
Rejestracja: 1 lis 2005, o 11:50
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 44 razy

Pięć modułów do rozwiązania, z którymi mam problem -

Post autor: Sulik »

To w takim razie wynik jest zwracany jako ciąg znaków - 6 liczb oddzielonych spacjami. I tak samo jak w hasło - należy wstawić Randomize na początku programu.

Kod: Zaznacz cały

function totek:string;
var
  liczby: array[1..6] of integer;
  i, j : Integer;
  niepowt: Boolean;
  a, s : string;
begin
  for i := 1 to 6 do
    repeat
      liczby[i] := Random(49)+1;
      niepowt := True; {zakladamy, ze wartosc nie wystapila wczesniej}
      for j:=1 to i-1 do {sprawdzamy, czy nowowylosowana liczba nie wystapila juz wczesniej}
        if liczby[j]=liczby[i] then niepowt := False;
    until niepowt;
  s:=';
  for i:=1 to 6 do
  begin
    str(liczby[i], a);
    s := s + a + ;
  end;
  totek := s;
end;
Fristajler_2005

Pięć modułów do rozwiązania, z którymi mam problem -

Post autor: Fristajler_2005 »

dZIENX SERDECZNE. wSZYSTKO DZIAŁA. sZEGÓLNE PODZIĘKOWANIA DLA SULIKA ;]
ODPOWIEDZ