Algorytmy i struktury danych,
Ć wiczenia I
09.10.2012 r.
Lista 1
Rozwiąż zadania tworząc: pseudo kod, program komputerowy, rysunek lub algorytm.
Zadanie 1
Dla zadanej liczby naturalnej:
a. wypisać wszystkie jej dzielniki naturalne
b. sprawdzić, czy jest liczbą pierwszą
#include
<iostream>
#include
<math.h>
using
namespace
std;
int
main(){
int
l;
cout <<
"podaj liczbe"
<< endl;
cin >>l;
for
(
int
i=sqrt(l);i>0;i--)
if
(l%i ==0) cout<<i<<
" "
<<l/i<<endl;
bool
prime=
true
;
for
(
int
i=2;i<=sqrt(l);i++)
if
(l%i==0) {prime=
false
;
break
; }
cout <<(prime);
return
0;
}
Zadanie 2
Podać algorytm, który sprawdza, czy zadana liczba naturalna jest doskonała – to znaczy, że suma jej
dzielników bez największego jest równa jej samej np. i .
Znaleźć następną liczbę doskonałą
#include
<iostream>
#include
<math.h>
using
namespace
std;
bool
doskonala(
long
long
l){
long
long
suma=1;
for
(
long
long
i=2; i<=sqrt(l); i++)
if
(l%i==0) suma+=(i+l/i);
return
(suma==l);
}
bool
pierwsza(
long
long
l){
bool
prime=
true
;
for
(
long
long
i=2; i<sqrt(l) ; i++)
if
(l%i==0) {prime=
false
;
break
;}
return
prime;
}
long
long
kolejna_doskonala(
long
long
l){
long
long
liczba=0;
for
(
long
long
potega=2,suma=1;liczba<=l;potega=potega<<1){
suma+=potega;
if
(pierwsza(suma)) liczba=suma*potega;
}
return
liczba;
}
int
main(){
long
long
int
l;
cout <<
"podaj liczbe"
<< endl;
cin >>l;
cout <<
"wprowadzona liczba "
<< ( (doskonala(l)) ?
"jest "
:
"nie jest"
) <<
"doskonala"
<<endl;
cout <<
"Kolejna liczba doskonała to: "
<<kolejna_doskonala(l)<<endl;
return
0;
}
Zadanie 3
Dla dwóch dowolnych liczb naturalnych obliczyć:
a. najmniejsza wspólną wielokrotność
b. największy wspólny dzielnik
#include
<iostream>
using
namespace
std;
int
NWD(
int
a,
int
b)
{
int
c;
if
(b>a)
{
c=b;
b=a;
a=c;
}
while
(b!=0)
{
c=a%b;
a=b;
b=c;
}
return
a;
}
int
_tmain(
int
argc, _TCHAR* argv[])
{
unsigned
int
a,b, nwd;
cout<<
"Wprowadź dwie liczby naturalne"
<<endl;
cout<<
"a: "
;
cin>>a;
cout<<
"b: "
;
cin>>b;
nwd=NWD(a, b);
cout<<
"\nnajmniejsza wspólna wielokrotność wynosi: "
<<(a*b)/nwd;
cout<<
"\nnajwiekszy wspólny dzielnik wynosi: "
<<nwd<<endl<<endl;
system(
"pause"
);
return
0;
}
Zadanie 4
Dla danych trzech odcinków o długości :
a. sprawdzić czy z tych odcinków można zbudować trójkąt
b. wypisać jaki to jest trójkąt (ostrokątny, prostokątny, rozwartokątny, różnoboczny,
równoboczny, równoramienny)
#include
<iostream>
using
namespace
std;
inline
bool
czy_trojkat(
double
a,
double
b,
double
c){
return
(a+b>=c && a+c>=b && b+c>=a)?1:0;
}
int
main(){
double
a, b, c, d, warunek;
cout <<
"Podaj 3 liczby rzeczywiste: \na: "
;
cin>>a;
cout<<
"b: "
;
cin>>b;
cout<<
"c: "
;
cin>>c;
warunek=czy_trojkat(a, b, c);
cout<<(warunek==1?
"\nIstnieje taki trojkat\n\n"
:
"\nNie istnieje taki
trojkat\n\n"
);
if
(warunek==1){
if
(c>a){
if
(c>b);
else
{
d=b;
b=c;
c=b;
}}
else
{
d=a;
a=c;
c=d;
}
if
(c*c>a*a+b*b) cout<<
"\nTrojkat jest rozwartokatny"
;
if
(c*c==a*a+b*b) cout<<
"\nTrojkat jest prostokatny"
;
if
(c*c<a*a+b*b) cout<<
"\nTrojkat jest prostokatny"
;
if
(a!=b && b!=c && a!=c) cout<<
"\nTrojkat jest roznoboczny"
;
if
(a==b && b==c && a==c) cout<<
"\nTrojkat jest rownoboczny"
;
if
(a==b || a==c || b==c) cout<<
"\nTrojkat jest rownoramienny"
;
}
return
0;
}
Zadanie 5
Wypisać przez które ćwiartki płaszczyzny przechodzi prosta w zależności od wartości
współczynników i
#include
<iostream>
using
namespace
std;
int
main(){
int
a,b;
cout<<
"podaj a="
; cin>>a;
cout<<
"podaj b="
; cin>>b;
cout<<
"y="
<<a<<
"x+("
<<b<<
")"
<<endl;
char
c = (a==0) ? 0x00 : (a>0) ? 0xCC : 0x33;
c = c | ( (b==0) ? 0x00 : (b>0) ? 0xf0 : 0x0f );
cout <<
"Przechodzi przez ćwiartki: "
<< ( 0xC0 & c ?
"I, "
:
""
) << ( 0x30 & c ?
"II, "
:
""
) << ( 0x0c & c ?
"III, "
:
""
) << ( 0x03 & c ?
"IV, "
:
""
)<<endl;
}
Zadanie 6
Podać algorytm sprawdzający czy dany rok jest przestępny
#include
<iostream>
using
namespace
std;
int
main(){
int
rok;
cout <<
"podaj rok"
<< endl;
cin >>rok;
if
(rok==0) cout<<
"nie istnieje"
;
else
cout <<((rok%4==0 && rok%100!=0 || rok%400==0 )?
"przestepny"
:
"nieprzestepny"
);
return
0;
}