Wątek przeniesiony 2017-06-07 08:10 z C/C++ przez kq.

Prośba o pomoc ze sprawdzeniem 3 programów

0

Hejka, mam wielką prośbę, poprawiłby mi ktoś ten kod, ponieważ nie wiem jak zrobić te konkretne podpunkty i czuję lekką depresję z tego powodu ;). Byłbym bardzo wdzięczny za pomoc, ponieważ nie ma kto mi pomóc ani wytłumaczyć a jest dla mnie bardzo ważne aby to zrozumieć. Jest to co prawda MatLab, ale jest chyba dosyć podobny do C, dlatego bardzo proszę o pomoc.

e) Uzupełnij kod programu tak aby kwadracik odbijał się nie tylko od poziomych krawędzi okna ale także od pionowych.
h) Dopisz pętlę FOR - aby po kliknięciu przycisku "Skok" kwadracik poruszał się sam (i wykonał 600 skoków).

clear; clc;
% ------ Definiowanie okna graficznego:
SZER=700; WYS=500;
f1=figure('position',[50,80,SZER,WYS]);
set(f1,'color',[0.5 0.5 0]);
%------- Definiowanie przycisku:
przycisk1=uicontrol('string','SKOCZ', 'Callback','przyrost');
%------- Definiowanie napisu
x=100; y=20; w=35; h=35; 
napis1=uicontrol('Style','text', 'string','TUTAJ')
set(napis1,'position',[x,y,w,h]);
dx=10; dy=20; % to skok napisu do nowej pozycji
%------- Definiowanie suwaka:
suwak1=uicontrol('style','Slider', 'position',[20,50,20,140]);
set(suwak1,'Callback','kolor')
% ten podprogram zapisz do pliku „kolor.m”
bb=get(suwak1,'Value');
% set(f1,'Color',[1-sqrt(bb) bb bb^4]);
set(napis1,'BackgroundColor',[1-sqrt(bb) bb bb^4]);
% ten podprogram zapisz do pliku „przyrost.m”
x=x+dx; y=y+dy;
if y+h>=WYS | y<=0
    dy=-dy; beep;
end
set(napis1,'position',[x,y,w,h]); 
pause(0.1);
set(f1,'Color',[x/SZER 0.5 1-y/WYS]);
  1. Czy ten program będzie liczył (mnożył i dzielił?) Bo nie wiem jak dodać, aby nie dzielił przez zero a nie mam możliwości go przetestować :/.
% Program Kalkulatorek
clear; clc
F1=figure('Name','Kalkulatorek', 'Color',[0.6 0.6 1], 'Menubar','none'); % - to formatka
set(F1,'Units','characters');
% Okienka edycyjne:
e1=uicontrol('Style','Edit','Units','normalized','Position',[0.1,  0.6, 0.15, 0.05]);
e2=uicontrol('Style','Edit','Units','normalized','Position',[0.35, 0.6, 0.15, 0.05]);
% Przyciski:
b1=uicontrol('Style','Pushbutton','Units','normalized');
  set(b1,'Position',[0.275, 0.65, 0.05, 0.05],'String','+','Callback','Dodaj');
b2=uicontrol('Style','Pushbutton','Units','normalized');
  set(b2,'Position',[0.275, 0.55, 0.05, 0.05],'String','-','Callback','Odejmij');
% Tekst wynikowy:
t1=uicontrol('Style','Text','Units','normalized','Position',[0.6, 0.6, 0.15, 0.05]);
  set(t1,'String',' = ');
% to jest podprogram "Dodaj" wywoływany przyciskiem "+"
x1 = str2double(get(e1, 'String'));
x2 = str2double(get(e2, 'String'));
y=x1*x2;
set(t1,'String',[' = ',num2str(y)]);
% to jest podprogram "Odejmij" wywoływany przyciskiem "-"
x1 = str2double(get(e1, 'String'));
x2 = str2double(get(e2, 'String'));
y=x1:x2;
set(t1,'String',[' = ',num2str(y)]);
  1. Program wyświetlający wielomian 3 stopnia W(x)=ax^3+bx^2+cx+d , a=1 c=2 a "b" oraz "d" ustalane przy pomocy suwaków. Zobaczyłby ktoś czego brakuje?
clear;clc
a=[1 b 2 d]; %-- co tutaj dać?
r=roots(a);   %-- wyznaczamy pierwiastki i zapamiętujemy w wektorze r
xp=min(real(r)); xk=max(real(r)); dx=(xk-xp)/100;
x = xp-dx : dx : xk+dx;
f1=figure;
a1=axes('position',[0.06,0.06,0.5,0.85]);

%---- Tekst i suwak dla współczynnika b:
t1=uicontrol('style','text','units','normalized','position',[0.6,0.85,0.1,0.05]);
% Cecha POSITION(X,Y,SZER,WYS) - OKREŚLA POŁOŻENIE LEWEGO DOLNEGO ROGU I ROZMIARY 
s1=uicontrol('style','slider','units','normalized','position',[0.71,0.85,0.28,0.05
]);
set(s1,'Min',-20,'Max',20,'Callback','nowe');

%---- Tekst i suwak dla wyrazu wolnego d (współrzędna y powinna być mniejsza o 5):
t2=....
s2=....
set(s2,'Min',-500,'Max',500,'Callback','nowe');

%---- Napis PIERWIASTKI
NAPIS=uicontrol('style','text','units','normalized','position',[0.6,0.65,0.2,0.04]);
set(NAPIS,'string','Pierwiastki:')

%---- Wyświetlanie wartości pierwiastków
t3=uicontrol('style','text','units','normalized','position',[0.6,0.60,0.2,0.04]);
t4=....
t5=....
rysuj;
% procedura rysuj
% wyznaczenie ciągu wartości wielomianu
% dla danego wektora wspolczynnikow a
% oraz ciągu wartości x wyznaczonego przez: x=linspace(xp,xk)
y=polyval(a,x);
plot(x,y); grid on
st=['W(x)=x^3+',num2str(a(2)),'x^2+',num2str(a(3)),'x+',num2str(a(4))
];
title(st);
set(t1,'string',['b=',num2str(a(2))]);
set(t2,'string',['d=',num2str(a(4))]);
set(t3,'string',['r1=',num2str(r(1))]);
set(t4,'string',['r2=',num2str(r(2))]);
set(t5,'string',['r3=',num2str(r(3))]);
% procedura nowe
a(2)=get(s1,'Value');
a(4)=get(s2,'Value');
r=roots(a); % wyznacza 3 pierwiastki (takze zespolone)
xp=min(real(r))-5; xk=max(real(r))+5;
x=linspace(xp,xk); % wyznacza ciąg 100 wartości x między xp xk
rysuj; % wywoluje procedure rysuj
0

Czy ja dobrze rozumiem, że dostałeś od kogoś kod 3 programów w Matlabie, nie umiesz ich uruchomić, nie znasz Matlaba ale próbujesz je modyfikować, a w zasadzie, próbujesz namówić ludzi, by je zmodyfikowali? Czemu to ma służyć?

Napisz może co jest Twoim celem. Nauczyć się programować w Matlabie? Zaliczyć ćwiczenia w szkole?

Pytanie dodatkowe: czemu w programie 2) funkcja dodawania wykonuje mnożenie, a odejmowania - dzielenie?

0

Wysłałem złą wersję, a ponieważ nikt nie odpisał nie widziałem sensu modyfikować tego :). Zależało mi by ktoś mógł sprawdzić powyższe punkty i fakt, matlab nie jest konkretnie tym językiem , którego akurat chce się uczyć, a po prostu muszę się tego na tym poziomie naumieć. Sam język jakim jest MatLab ( czy "C") nie jest mi do niczego potrzebny. W pracy nigdy z tego nie korzystam, a jest po prostu przedmiotem, który trzeba zaliczyć.

W tym zadaniu nr 1, przykład "e" w zupełności nie wiem od czego zależy, h) zrobiłem w taki sposób:

%------- Definiowanie przycisku:
przycisk1=uicontrol('string','SKOCZ', 'Callback','przyrost');

int SKOCZ;

for (i = 1,SKOCZ=600,i++)

  1. już ogarnąłem, że powinno być ok (muszę jeszcze przetestować)

  2. miałem wyznaczyć odpowiednie "t2" "s2" "t3" "t4" "t5", nie do końca wiedziałem / umiałem znaleźć informację o co w tym chodzi, wiem na pewno, że są to jakieś pozycje czy textu, czy suwaków, więc zrobiłem analogicznie do powyższego zadaniu nr 2.

%---- Tekst i suwak dla współczynnika b:
t1=uicontrol('style','text','units','normalized','position',[0.6,0.85,0.1,0.05]);
% Cecha POSITION(X,Y,SZER,WYS) - OKREŚLA POŁOŻENIE LEWEGO DOLNEGO ROGU I ROZMIARY
s1=uicontrol('style','slider','units','normalized','position',[0.71,0.85,0.28,0.05]);
set(s1,'Min',-20,'Max',20,'Callback','nowe');

%---- Tekst i suwak dla wyrazu wolnego d (współrzędna y powinna być mniejsza o 5):
t2=uicontrol('style','text','units','normalized','position',[0.6,0.85,0.1,0.05]]);

s2=uicontrol('style','slider','units','normalized','position',[0.96,0.95,0.28,0.05]);
set(s2,'Min',-500,'Max',500,'Callback','nowe');

%---- Napis PIERWIASTKI
NAPIS=uicontrol('style','text','units','normalized','position',[0.6,0.65,0.2,0.04]);
set(NAPIS,'string','Pierwiastki:')

%---- Wyświetlanie wartości pierwiastków
t3=uicontrol('style','text','units','normalized','position',[0.6,0.60,0.2,0.04]);
t4=uicontrol('style','text','units','normalized','position',[0.9,0.60,0.2,0.04]);
t5=uicontrol('style','text','units','normalized','position',[1.0,0.60,0.2,0.04]);

0

Co do 1), w treści masz podpowiedź: Wrzuć:

  if y+h>=WYS | y<=0
      dy=-dy; beep;
  end
  x=x+dx; y=y+dy;
  set(napis1,'position',[x,y,w,h]); 
  pause(0.1);

do pliku przyrost.m i umieść w tej samej lokalizacji co główny plik. Dodaj po pierwszym if analogiczny warunek do sprawdzania szerokości (skorzystaj z: x,w,SZER). Całość otocz pętlą.

0

Wydaje mi się, że zrobiłem wszystko co zaleciłeś, jednak po próbie kompilacji pojawia się niebieski ekran, przycisk "SKOCZ" , jakiś suwak i przestaje reagować niestety.

0
Frekz napisał(a):

Wydaje mi się, że zrobiłem wszystko co zaleciłeś, jednak po próbie kompilacji pojawia się niebieski ekran, przycisk "SKOCZ" , jakiś suwak i przestaje reagować niestety.

Po co otwierasz 'przyrost.m' przy pomocy fopen. Nie rób tego, to niepotrzebne.
Wklej zawartość pliku 'przyrost.m'.
Gdzie jest pętla for?
Kod, który miałeś wkleić do 'przyrost.m' powinieneś usunąć z 'Bilard.m'

0

A jak miałbym inaczej to zrobić? Jedyne co u mnie było na innych ćwiczeniach to zapisywanie i otwieranie przy pomocy tej komendy, więc nie mam pojęcia jakby można inaczej to zrobić niestety.
Ten plik przyrost, będę mógł wkleić jak będę w domu, bo niestety, ale w pracy nie mam możliwości używać tego programu.

Dodałem też pętlę for przy "przycisku" tam dałem
"int SKOK
for (SKOK = 1, SKOK = 600, SKOK++)
end

Który kod mam usunąć z tego bilard.m?

0
Frekz napisał(a):

A jak miałbym inaczej to zrobić?

To juz jest zrobione: komenda:
przycisk1=uicontrol('string','SKOCZ', 'Callback','przyrost');

ustawia Callback na wykonanie skryptu o nazwie 'przyrost'. Czyli gdy klikniesz ten przycisk, to skrypt się wykona.

Dodałem też pętlę for przy "przycisku" tam dałem
"int SKOK
for (SKOK = 1, SKOK = 600, SKOK++)
end

A co wg Ciebie ta pętla robi? Czy rozumiesz działanie pętli w jakimkolwiek języku?

Który kod mam usunąć z tego bilard.m?

Ten, który umieścisz w 'przyrost.m'

0

Moim zdaniem wiem jak działa, a przynajmniej jej podstawowe funkcje, tylko nie wiem jak mam dać, że po tej skończeniu "for" ma wykonać te instrukcje skoków, ponieważ nie wiem nawet jak to ma wyglądać (co zapisać itd). Niestety u mnie nie było podstaw, tylko zaczęcie od czegoś takiego, a zbyt mało czasu na naukę samej składni .

Gdybyś mógł mi to wyjaśnić co źle myślę albo czego brak byłoby super. Czy mam zrobić jakąś funkcję w stylu "void przyrost" ?

0
Frekz napisał(a):

Moim zdaniem wiem jak działa, a przynajmniej jej podstawowe funkcje,

Chyba nie do końca. Napisałeś:

for (SKOK = 1, SKOK = 600, SKOK++)
end

co jest pętlą pustą, która nie robi nic, a oczekujesz jakiegoś działania.

tylko nie wiem jak mam dać, że po tej skończeniu "for" ma wykonać te instrukcje skoków,

Nie tak. To kliknięcie na przycisk "SKOCZ' ma wywołać pętlę for, która odpowiada za przesuwanie się kwadratu.

Niestety u mnie nie było podstaw, tylko zaczęcie od czegoś takiego, a zbyt mało czasu na naukę samej składni .

Sorry, ale taka nauka jest bez sensu. Naucz się najpierw podstaw. Animowanie kontrolek to jakaś bzdura, której nikt nie używa.

Gdybyś mógł mi to wyjaśnić co źle myślę albo czego brak byłoby super. Czy mam zrobić jakąś funkcję w stylu "void przyrost" ?

Już Ci napisałem. Kod funkcji jest w pliku przyrost.m, a jej wywołanie następuje po kliknięciu na przycisk dzięki mechanizmowi Callbacku, który ustawiasz właśnie na skrypt 'przyrost'. Nie piszesz funkcji 'void przyrost', bo to nie jest C!

0

Dlatego tak to wygląda, ponieważ zacząłem się uczyć c++/java ponieważ mnie to interesuje a szczerze mówiąc matlab jest z mojego punktu widzenia bez przyszłości (w moim wypadku). Mi zależy na nauce mojego kierunku a między innymi w przyszłych semestrach c++/java, co jest bardziej przydatne a i fajne moim zdaniem, jednak trzeba przejść tego matlaba, więc wyboru nie mam a czasu na naukę o podstaw tym bardziej, chociażby dlatego, żeby zaliczyć i nigdy więcej tego nie używać, widzisz sens nauki tego od zera?To jest przynajmniej coś na parę miesięcy.

Ta instrukcja for powinna być w instrukcji przycisku czy instrukcji przyrostu? Mógłbyś mi napisać jakie zmienne albo funkcje wykorzystać? Wtedy poczytam o nich i będzie prościej.

0

Dobra już ogarnąłem i działa jakbym chciał, trzeba było tylko poprosić osobę z matlabem, dzięki bardzo za pomoc :)!

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