tasker3 Napisano Styczeń 30, 2013 Zgłoś Share Napisano Styczeń 30, 2013 Opracować aplikację w Delphi, która dla danego N-elementowego (N<=20) ciągu liczb całkowitych wyznacza: 1. liczbę elementów ciągu 2. mniejszy spośród elementów skrajnych, tzn. pierwszy i ostatni 3. liczbę elementów ciągu większych od obliczonej wartości 4. Nowy ciąg, składający się z nieparzystych elementów ciągu danego Pierwsze (działa): var pom:string; i: integer; begin i:=0; repeat pom:=StringGrid1.Cells[0, i]; if pom <> '' then begin i:=i+1; x:=StrToFloat(pom); end; until ( pom = '' ) or ( I = StringGrid1.RowCount ); N:=i; label9.Caption:=IntToStr(N); end; Drugie(działa): var m:real; i:integer; begin m:=0; for i:=1 to N do if (x<x[1]) then m:=x else if (x>x[1]) then m:=x[1]; label10.caption:=floattostr(m); end; Trzeci(nie wiem jak zrobić): Czwarty (czarna magia).... ;| Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Styczeń 30, 2013 Zgłoś Share Napisano Styczeń 30, 2013 Odnośnie punktu 3: liczbę elementów ciągu większych od obliczonej wartościAle od jakiej obliczonej wartości? Na podst. czego ta wartość jest obliczana? Natomiast punkt 4: Możesz użyć albo listy albo zwykłej tablicy dynamicznej (bo i tak w takim programie nie ma co bawić się zupełnie w wydajność i cokolwiek). Tak więc: var Nieparzyste : Array of Integer; i : Integer; for i := 0 to Length(Twoj_Zadany_Ciag) - 1 do begin if (Twoj_Zadany_Ciag[i] mod 2 <> 0) then begin SetLength(Nieparzyste, Length(Nieparzyste) + 1); Nieparzyste[Length(Nieparzyste) - 2] = Twoj_Zadany_Ciag[i]; end; end; Pisane z pamięci i prawdopodobnie są błędy bo nie mam żadnego środowiska na dysku zainstalowanego do kodzenia a druga sprawa dawno już w delphi nie kodziłem więc pewnie coś schrzaniłem z zakresem tablicy. Ale generalnie chodzi o to, że: 1. Iterując cały ciąg sprawdzasz czy X mod 2 0 (znaczy, że liczba nieparzysta) 2. Zwiększasz tablicę nowego ciągu o 1element 3. Wpisujesz w ostatni element tablicy tą nieparzystą liczbę. Edit: Aa teraz czytam jeszcze raz i to mają być wsadzone w nowy ciąg nieparzyste liczby z tego ciągu czy chcesz z tego ciągu skopiować tylko 1,3,5,7,9 element itd. ? Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
tasker3 Napisano Styczeń 31, 2013 Autor Zgłoś Share Napisano Styczeń 31, 2013 Odnośnie punktu 3: Ale od jakiej obliczonej wartości? Na podst. czego ta wartość jest obliczana? Natomiast punkt 4: Możesz użyć albo listy albo zwykłej tablicy dynamicznej (bo i tak w takim programie nie ma co bawić się zupełnie w wydajność i cokolwiek). Tak więc: var Nieparzyste : Array of Integer; i : Integer; for i := 0 to Length(Twoj_Zadany_Ciag) - 1 do begin if (Twoj_Zadany_Ciag[i] mod 2 <> 0) then begin SetLength(Nieparzyste, Length(Nieparzyste) + 1); Nieparzyste[Length(Nieparzyste) - 2] = Twoj_Zadany_Ciag[i]; end; end; Pisane z pamięci i prawdopodobnie są błędy bo nie mam żadnego środowiska na dysku zainstalowanego do kodzenia a druga sprawa dawno już w delphi nie kodziłem więc pewnie coś schrzaniłem z zakresem tablicy. Ale generalnie chodzi o to, że: 1. Iterując cały ciąg sprawdzasz czy X mod 2 <> 0 (znaczy, że liczba nieparzysta) 2. Zwiększasz tablicę nowego ciągu o 1element 3. Wpisujesz w ostatni element tablicy tą nieparzystą liczbę. Edit: Aa teraz czytam jeszcze raz i to mają być wsadzone w nowy ciąg nieparzyste liczby z tego ciągu czy chcesz z tego ciągu skopiować tylko 1,3,5,7,9 element itd. ? Na podstawie wartości obliczonej z drugiego pkt, czyli jeżeli ostatni wyraz ciągu jest mniejszy to na podstawie tego wyniku należy policzyć ilość elementów większych od tego elementu Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Styczeń 31, 2013 Zgłoś Share Napisano Styczeń 31, 2013 No to przecież sprawa prosta jak drut. Zapamiętaj sobie najprościej w jakiejś zmiennej globalnej wartość z punktu 2, który już obliczyłeś a resztę kodu robisz sobie poprzez: ilosc_wiekszych_w_ciagu : Integer = 0; for i := 0 to Length(Twoj_Zadany_Ciag) - 1 do if (Twoj_Zadany_Ciag[i] > zapamietana_wartosc_z_pkt2) Inc(ilosc_wiekszych_w_ciagu); Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
tasker3 Napisano Styczeń 31, 2013 Autor Zgłoś Share Napisano Styczeń 31, 2013 No to przecież sprawa prosta jak drut. Zapamiętaj sobie najprościej w jakiejś zmiennej globalnej wartość z punktu 2, który już obliczyłeś a resztę kodu robisz sobie poprzez: ilosc_wiekszych_w_ciagu : Integer = 0; for i := 0 to Length(Twoj_Zadany_Ciag) - 1 do if (Twoj_Zadany_Ciag[i] > zapamietana_wartosc_z_pkt2) Inc(ilosc_wiekszych_w_ciagu); Wartość obliczona z pkt 2 wyświetla się w label lub edit. Jak to teraz zapisać od początku do końca żeby 3 pkt zadziałał poprawnie? Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Styczeń 31, 2013 Zgłoś Share Napisano Styczeń 31, 2013 Coś czuje, że te pierwsze 2pkt. samemu nie zrobiłeś Skoro masz tą wartość w edit to robisz zwykłą konwersje ze string->int zapamietana_wartosc_z_pkt2 := StrToInt(Edit1.Text); Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
tasker3 Napisano Luty 1, 2013 Autor Zgłoś Share Napisano Luty 1, 2013 Coś czuje, że te pierwsze 2pkt. samemu nie zrobiłeś Skoro masz tą wartość w edit to robisz zwykłą konwersje ze string->int zapamietana_wartosc_z_pkt2 := StrToInt(Edit1.Text); ok już zrobiłem. Dzięki. A jak przenieść te wartości do nowego stringgrida czyli pkt 4? Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Luty 1, 2013 Zgłoś Share Napisano Luty 1, 2013 Dobra wystarczy. Pierwszy podpunkt zadania ponoć sam napisałeś. Masz w nim odczytywanie wartości ze stringgrida to analogicznie się zapisuje do komórki w nim dane korzystając z operatora przypisania. Sam coś zrób. Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
tasker3 Napisano Luty 3, 2013 Autor Zgłoś Share Napisano Luty 3, 2013 Dobra wystarczy. Pierwszy podpunkt zadania ponoć sam napisałeś. Masz w nim odczytywanie wartości ze stringgrida to analogicznie się zapisuje do komórki w nim dane korzystając z operatora przypisania. Sam coś zrób. Siedziałem nad tym cały weekend. Wiem jak znaleźć nieparzyste i parzyste, ale mi wyskakuje błąd... Zadeklarowałem w zmiennej globalnej z: z:integer; potem procedura dla przycisku, aby znajdował ilość liczb parzystych/nieparzystych. procedure TForm1.Button4Click(Sender: TObject); var i,ile:integer; begin z:=strtoint ( StringGrid1.Cells[0, i] ); ile:=0; for i:=1 to n do if (z mod 2 <>0) then //dla nieparzystych ile:=ile+1; label14.Caption:=floattostr(ile); end; procedure TForm1.Button4Click(Sender: TObject); var i,ile:integer; begin z:=strtoint ( StringGrid1.Cells[0, i] ); ile:=0; for i:=1 to n do if (z mod 2 =0) then //dla przystych ile:=ile+1; label14.Caption:=floattostr(ile); end; błąd jest taki: " '' is not a valid integer value." nie wiem co zrobić... Link do komentarza Udostępnij na innych stronach More sharing options...
babubabu Napisano Luty 3, 2013 Zgłoś Share Napisano Luty 3, 2013 " '' is not a valid integer value." znaczy: " " nie jest poprwaną liczbą całkowitą Masz całego stringgrida niewypełnionego. wpisz do StringGrid1.Cells[0, i] jakieś liczby całkowite i błąd znikinie. to raz a dwa możesz przestać z każdą pierdołą na forum biegać? Link do komentarza Udostępnij na innych stronach More sharing options...
tasker3 Napisano Luty 3, 2013 Autor Zgłoś Share Napisano Luty 3, 2013 " '' is not a valid integer value." znaczy: " " nie jest poprwaną liczbą całkowitą Masz całego stringgrida niewypełnionego. wpisz do StringGrid1.Cells[0, i] jakieś liczby całkowite i błąd znikinie. to raz a dwa możesz przestać z każdą pierdołą na forum biegać? Niestety nie masz racji... Uzupełniam całego stringgirda i nic Link do komentarza Udostępnij na innych stronach More sharing options...
babubabu Napisano Luty 3, 2013 Zgłoś Share Napisano Luty 3, 2013 Niestety nie masz racji... Uzupełniam całego stringgirda i nic Jak już napisałeś na forum to może aktualny kod pokażesz. I przeczytaj jakiś kurs... Link do komentarza Udostępnij na innych stronach More sharing options...
tasker3 Napisano Luty 3, 2013 Autor Zgłoś Share Napisano Luty 3, 2013 Jak już napisałeś na forum to może aktualny kod pokażesz. I przeczytaj jakiś kurs... Proszę. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus, ComCtrls, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; StatusBar1: TStatusBar; MainMenu1: TMainMenu; N11: TMenuItem; N21: TMenuItem; N31: TMenuItem; N41: TMenuItem; Panel1: TPanel; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Panel2: TPanel; Label9: TLabel; Label10: TLabel; Label11: TLabel; StringGrid2: TStringGrid; Label12: TLabel; Label13: TLabel; procedure StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String); procedure StringGrid2GetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String); procedure Button1Click(Sender: TObject); procedure N11Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure N21Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; x,y:array[1..20]of real; n:integer; c:real; z:integer; implementation {$R *.dfm} procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String); begin Value:='99'; end; procedure TForm1.StringGrid2GetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String); begin Value:='99'; end; procedure TForm1.Button1Click(Sender: TObject); var pom:string; i: integer; begin i:=0; repeat pom:=StringGrid1.Cells[0, i]; if pom <> '' then begin i:=i+1; x:=StrToFloat(pom); end; until ( pom = '' ) or ( I = StringGrid1.RowCount ); N:=i; label9.Caption:=IntToStr(N); label10.Caption:='0'; label11.Caption:='0'; Button2.Enabled:=N<>0; Button3.Enabled:=N<>0; Button4.Enabled:=N<>0; end; procedure TForm1.N11Click(Sender: TObject); var pom:string; i: integer; begin i:=0; repeat pom:=StringGrid1.Cells[0, i]; if pom <> '' then begin i:=i+1; x:=StrToFloat(pom); end; until ( pom = '' ) or ( I = StringGrid1.RowCount ); N:=i; label9.Caption:=IntToStr(N); label10.Caption:='0'; label11.Caption:='0'; Button2.Enabled:=N<>0; Button3.Enabled:=N<>0; Button4.Enabled:=N<>0; end; procedure TForm1.Button2Click(Sender: TObject); var m:real; i:integer; begin m:=0; for i:=1 to N do if (x<x[1]) then m:=x else if (x>x[1]) then m:=x[1]; label10.caption:=floattostr(m); end; procedure TForm1.N21Click(Sender: TObject); var m:real; i:integer; begin m:=0; for i:=1 to N do if (x<x[1]) then m:=x else if (x>x[1]) then m:=x[1]; label10.caption:=floattostr(m); end; procedure TForm1.Button3Click(Sender: TObject); var i, ile:integer; begin c:=strtofloat(label10.caption); ile:=0; for i:=1 to N do if x<c then ile:=ile+1; label11.caption:=floattostr(ile); end; procedure TForm1.Button4Click(Sender: TObject); var i,ile:integer; begin z:=strtoint ( StringGrid1.Cells[0, i] ); ile:=0; for i:=1 to n do if (z mod 2 <>0) then ile:=ile+1; label14.Caption:=floattostr(ile); end; end. Link do komentarza Udostępnij na innych stronach More sharing options...
babubabu Napisano Luty 4, 2013 Zgłoś Share Napisano Luty 4, 2013 Sformatuj to i wstaw w znaczniki to przejżę Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Luty 4, 2013 Zgłoś Share Napisano Luty 4, 2013 Siedziałem nad tym cały weekend. Wiem jak znaleźć nieparzyste i parzyste, ale mi wyskakuje błąd... Zadeklarowałem w zmiennej globalnej z: z:integer; potem procedura dla przycisku, aby znajdował ilość liczb parzystych/nieparzystych. procedure TForm1.Button4Click(Sender: TObject); var i,ile:integer; begin z:=strtoint ( StringGrid1.Cells[0, i] ); ile:=0; for i:=1 to n do if (z mod 2 0) then //dla nieparzystych ile:=ile+1; label14.Caption:=floattostr(ile); end; procedure TForm1.Button4Click(Sender: TObject); var i,ile:integer; begin z:=strtoint ( StringGrid1.Cells[0, i] ); ile:=0; for i:=1 to n do if (z mod 2 =0) then //dla przystych ile:=ile+1; label14.Caption:=floattostr(ile); end; błąd jest taki: " '' is not a valid integer value." nie wiem co zrobić... Przecież tu nawet juz na początku jest błąd w każdej tej procedurze. Żeby rozwiązać problem warto zastanowić się co się dzieje w pierwszej linijce? z:=strtoint ( StringGrid1.Cells[0, i] ); Czytałeś o zmiennych globalnych/lokalnych? Jak wygląda ich zasięg/wartości etc. i wszystko z nimi związane? Wyjaśnię w takim razie te podstawy. Deklarujesz zmienną lokalną: i oraz ile. A potem od razu w początku procedury odwołujesz się do StringGrida w którym parametrem jest zmienna i. Jako, że jest to zmienna lokalna są w niej śmieci(przypadkowe całkowicie wartości) wykorzystujesz zmienną bez wcześniejszego przypisania wartości. Jakbyś sprawdził sobie debuggerem albo chodźby zrobił print-a na ekran/konsole wartość tej zmiennej przed użyciem to byś zobaczył, że są tam jakieś wartości jak np.: 32141 czy jakieś inne kosmiczne dziwadła. Koniec. Edit: chociaż widzę, że w innych prockach masz zerowanie zmiennych na początku więc zakładam, że to było przeoczeniem. (mam nadzieję) Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
jozekkg Napisano Luty 14, 2013 Zgłoś Share Napisano Luty 14, 2013 Tak czytam ten wątek.. Jedyne, co chciałbym zasugerować, to do sprawdzania nieparzystości liczby w Delphi można użyć funkcji odd(). Zwraca ona wartość rue, gdy liczba jest nieparzysta. Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Luty 14, 2013 Zgłoś Share Napisano Luty 14, 2013 A no pewnie jest taka funkcja Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.