DO NR 1:
Niestety z ASM mało co pamiętam więc może ktoś zdekompiluje lub przełoży. Najłatwiej zrobić to iteracyjnie bo znamy ilość niewiadomych. Oznaczyłem ilość niewiadomych od a do j tak jak naniosłem na zdjęciu poniżej:
\
Następnie wykonujemy brute-force interacyjnie testując warunek logiczny "gdy dane działanie I kolejne działanie I n-działanie daje logiczne 1 (koniunkcje), to znamy rozwiązanie". Pisane na szybko:
Kod:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int a,b,c,d,e,f,g,h,i,j; //niewiadome
int n=9; //zaglebianie
bool wynik = false;
cout << "Przeliczam...";
for(int a=0; a<n; a++)
{
for(int b=0; b<n; b++)
{
for(int c=0; c<n; c++)
{
for(int d=0; d<n; d++)
{
for(int e=0; e<n; e++)
{
for(int f=0; f<n; f++)
{
for(int g=0; g<n; g++)
{
for(int h=0; h<n; h++)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
wynik = a/2-b==c &&
d+e-4==5 &&
4+f-g==h &&
i-3+j==8 &&
a*d/4==i &&
2+e-f==3 &&
b*4+g==j &&
c*5-h==8;
if (wynik==1)
{
cout << " Znaleziono rozwiazanie!"<<endl;
cout << " a=" << a <<endl;
cout << " b=" << b <<endl;
cout << " c=" << c <<endl;
cout << " d=" << d <<endl;
cout << " e=" << e <<endl;
cout << " f=" << f <<endl;
cout << " g=" << g <<endl;
cout << " h=" << h <<endl;
cout << " i=" << i <<endl;
cout << " j=" << j <<endl;
cin >> n; //PAUSE
return 0;
}
}
}
}
}
}
}
}
}
}
}
cout << " Brak rozwiazania dla n="<< n << "!" <<endl;
cin >> n;
return 0;
}
Najbardziej łopatologiczne to rozwiązałem, pewnie jest fajniejsze ale nie mam czasu pomyśleć nad tym. Być może da się ułożyć jakieś równanie i rozwiązać za pomocą macierzy gaussowskich, jeśli dane wczytywalibyśmy surowo z pliku np, to warto to wczytać do macierzy ij i za pomocą np: odwrotnej notacji polskiej trzeba by sprawdzić priorytety działań.
Pamiętam jak pisało się kiedyś w asm jakieś aplikacje to zagłębienia warunków/pętli na procku 8080/8088 były katorgą czasami...
Niestety złożoność mojego algorytmu jest dosyć wysoka jak na informatykę, o ile patrzę
n^10, przy wysokim parametrze n który ustawiamy, będzie trwało to "dłuuugooo."
Rozwiązanie mojego programu:
Przeliczam... Znaleziono rozwiazanie! a=5
b=0
c=2
d=4
e=5
f=4
g=6
h=2
i=5
j=6
Nie podałeś wgl na jaki procek asm. Przyda Ci się głównie MOV, MUL (o ile istnieje), DIV, LOOPy z odpowiednimi warunkami do testów logicznych itd...
BTW: Nie podali czy rozwiązanie ma być w zbiorze liczb naturalnycj.
W zad2, można zastosować praktycznie tą samą koncepcje przez co nie trzeba być z algorytmiki jakkolwiek obcykanym.