Pomoc w dokończeniu programów

0

Witam serdecznie, potrzebuję nieco pomocy w dokończeniu poniższych programów. Wkrótce mam zaliczenie z informatyki i niestety nie mam smykałki do programowania. Załączam treści zadań i fragmenty programów, które do tej pory napisałem. Z góry dziękuję za wszelką pomoc.

1.Zaprojektować program konsolowy, w którym:
• losowo (funkcja random) wypełniana jest tablica o wymiarze 5x5 liczbami
rzeczywistymi od 0 do 1.
• liczby te zapisywane są w pliku.
• tablica zostaje wyświetlona na ekranie
• następnie program zlicza ile liczb jest mniejszych od 0,5 i wyświetla odpowiednią
informację na ekranie.

program program9;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
tab = array [1..5, 1..5] of real;
var
t1, t2 : tab;
wie,kol: integer;
plik: TextFile;

begin
assignfile(plik,'5x5.txt');
rewrite(plik);
randomize;
  for wie:=1 to 5 do
    for kol:= 1 to 5 do
    t1[wie,kol]:=random(2);
    for wie:=1 to 5 do
        begin
          for kol:= 1 to 5 do
          write(plik,t1[wie,kol]:2:3,' ');
          writeln;
        end;
  closeFile(plik);
       for wie:=1 to 5 do
        begin
          for kol:= 1 to 5 do
          write(t1[wie,kol]:2:3,' ');
          writeln;
        end;

readln;

end.

2.Zaprojektować program konsolowy, w którym:
• jednowymiarowa tablica będzie wypełniona tekstami (np. nazwami zwierząt).
• program znajdzie w tablicy tekst najwcześniejszy w alfabecie.

3.Zaprojektować program konsolowy, w którym:
• wypełniamy liczbami rzeczywistymi tablicę 4x4 i wyświetlamy ja na ekranie,
• następnie drugi i czwarty wiersz tablicy wypełniamy zerami i ponownie wyświetlamy
tablicę na konsoli.

program program11;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
tab = array [1..4, 1..4] of real;
var
t1, t2 : tab;
wie,kol: integer;


begin
randomize;
for wie:=1 to 4 do
for kol:= 1 to 4 do
t1[wie,kol]:=random(100);
for wie:=1 to 4 do
begin
for kol:= 1 to 4 do
write(t1[wie,kol]:4:3,' ');
writeln;
end;

readln;
end.

4.Zaprojektować program konsolowy w Delphi, w którym:
• tworzony jest plik z danymi typu rekordowego Pacjent (nr, nazwisko, wiek_lat,
choroba).
• program wpisuje do pliku dane trzech dowolnych pacjentów.
• drugi program potrafi przeczytać te dane i wypisać je na ekranie.

program program12;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
pliki = text;
pacjent=record
        nr:integer;
        nazwisko:string[20];
        wiek_lat:integer;
        choroba:string[40];
  end;

var dane:pacjent;
  grupa:array[1..3] of pacjent;
  k:1..3;
  plik: file of pacjent;
  srednia:integer;
  N:integer;
  pacjenci:pliki;
begin
  assign(pacjenci,'pacjenci.txt');

  for k:=1 to 3 do
  begin
  write('Podaj numer: ');
  readln(dane.nr);
  writeln;
  write('Podaj nazwisko: ');
  readln(dane.nazwisko);
  writeln;
  write('Podaj wiek: ');
  readln(dane.wiek_lat);
  writeln;
  write('Podaj chorobe: ');
  readln(dane.choroba);
  writeln;
  grupa[k]:=dane; //przepisanie danych do tablicy
  end;
  for k:=1 to 3 do
  begin
  rewrite(pacjenci);
    writeln(grupa[k].nr,' ',grupa[k].nazwisko,' ',grupa[k].wiek_lat,' ',grupa[k].choroba);
  end;
  close(pacjenci);
  readln;
end. 

5.Zaprojektować program konsolowy w Delphi, w którym:
• podawać będziemy w pętli for dane 3-ch osób jako rekordów: Osoba (nazwisko,
wzrost, rok_ur), np:
Nowak 187 1959
Kowalski 168 1978
Malinowski 190 1977
• program umieszcza dane w odpowiedniej 3-elementowej tablicy rekordów, następnie
wyświetla je wszystkie w osobnych wierszach, oraz oblicza i wyświetla średnią
arytmetyczną wzrostu wszystkich osób.

 program program13;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
osoba=record
        nazwisko:string[20];
        wzrost:integer;
        rok_u:integer;
  end;

var dane:osoba;
  grupa:array[1..3] of osoba;
  k:1..3;
  plik: file of osoba;
  srednia:integer;
begin
  for k:=1 to 3 do
  begin
  write('Podaj nazwisko: ');
  readln(dane.nazwisko);
  writeln;
  write('Podaj wzrost: ');
  readln(dane.wzrost);
  writeln;
  write('Podaj rok urodzenia: ');
  readln(dane.rok_u);
  writeln;
  grupa[k]:=dane; //przepisanie danych do tablicy
  end;
  for k:=1 to 3 do
  begin
    writeln(grupa[k].nazwisko,' ','Wzrost:',grupa[k].wzrost,' ','Rok urodzenia:',grupa[k].rok_u);

  end;
  readln;
end.
1

• losowo (funkcja random) wypełniana jest tablica o wymiarze 5x5 liczbami
rzeczywistymi od 0 do 1.

A czy jeśli ma być wypełniona liczbami rzeczywistymi to przypadkiem nie mają to być liczby zmiennoprzecinkowe z przedziału [0 .. 1] jak np. 0,35, 0, 70 itd.? Bo jeśli tak, to nie wystarczy wylosować Random(2), bo uzyskasz jedynie 0 lub 1; A jeśli mają to być liczby stałoprzecinkowe/decymalne to dlaczego w treści jest wzmianka o rzeczywistych? Jeśli potrzebujesz wylosować liczbę zmiennoprzecinkową to użyj funkcji Random dla większego przedziału, np. Radnom(101) i podziel wylosowaną liczbę przez 100 - dzięki temu będziesz miał precyzję do dwóch miejsc po przecinku; W dalszych wymaganiach masz przecież napisane, że trzeba zsumować liczby większe od 0,5, więc co, będziesz zliczał same jedynki? Przemyśl to;

• tablica zostaje wyświetlona na ekranie

Do wyrównania kolumn wykorzystałeś wewnętrzne formatowanie procedury WriteLn - możesz wykorzystać funkcję Format i jej formatowanie - od razu ustalisz ilość miejsc po przecinku, szerokość kolumny i wyrównanie do którejś krawędzi (dzięki temu sformatujesz od razu cały wiersz);

2.Zaprojektować program konsolowy, w którym:
• jednowymiarowa tablica będzie wypełniona tekstami (np. nazwami zwierząt).
• program znajdzie w tablicy tekst najwcześniejszy w alfabecie.

Tutaj nie widzę kodu - nie wiesz jak to zrobić?

W takim razie trzeba napisać coś, co wyznaczy najwcześniejszy w alfabecie łańcuch - sprawdzaj po literce każdy element i odrzucaj dotąd, aż zostanie jeden; Nie wiem czy chcesz to zrobić po ASCII, czy wyznaczyć własny zbiór znaków i w nim sprawdzać - sposób z ASCII byłby prostszy - napisz coś, a jak nie będzie działać to zawsze się coś podpowie;

Możesz też wykorzystać gotowe metody sortujące, jak np. QuickSort - najpierw sortujesz tablicę, potem podajesz pierwszy element na wyjście i gotowe;


Jeśli czegoś nie wiesz to próbuj napisać, a jak nie podziała i nie będziesz wiedział jak to rozwiązać to wtedy napisz - tutaj raczej nikt za Ciebie tego nie dokończy, jeśli nie wykażesz się chęciami; Podać kod to nie problem, zaś aby dojść do rozwiązania trzeba coś zrobić, nie tylko poprosić o pomoc;

0

Dzięki serdeczne za wskazówki, gdybyś tak jeszcze mógł mi jakoś podpowiedzieć w kwestii jak zrobić w tym trzecim zadaniu wyzerowanie wiersza 2 i 4. Zrobiłem w tej chwili, że wpisuję po indeksach zera np. [2,1] itd., ale to nie jest zbytnio poprawne.

1

3.Zaprojektować program konsolowy, w którym:
• wypełniamy liczbami rzeczywistymi tablicę 4x4 i wyświetlamy ja na ekranie,
• następnie drugi i czwarty wiersz tablicy wypełniamy zerami i ponownie wyświetlamy
tablicę na konsoli.

Wypadałoby napisać sobie dwie procedury: do wypełniania macierzy liczbami oraz wyświetlania; Można też napisać procedurę do wypełniania zerami danego wiersza, gdzie za argument przyjmujemy jego indeks i w pętli wypełniamy;

Nie wiem dlaczego pytasz jak wypełnić zerami dany wiersz - możesz prócz zwykłej pętli wykorzystać np. FillMemory ze wskazaniem na pierwszy element danego wiersza, ale kombinowanie w ten sposób raczej nie będzie najlepszym rozwiązaniem ;)

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