background image

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; 

background image

 

 

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) 

background image

#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; 


 

background image

 

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; 


Document Outline