lecture02.pdf

(145 KB) Pobierz
WYKŁAD 7
Problem
Algorytm (schemat blokowy)
Program
Uruchamianie programu (usuwanie błędów)
Proste zadania matematyczne
Programy: c2_1.c ......, c2_6.c
Tomasz Zieliński
ZADANIE 1
(programy c2_1, c2_2, c2_3, c2_4)
:
przedstaw dowolną liczbę naturalną jako iloczyn liczb pierwszych
np.
8
= 2*2*2,
15
= 3*5,
24
= 2*2*2*3
=====================================================
NOWE:
POWTÓRZ:
podaj
liczbę
START
inicjalizacja
d =1
ix = 0
px[ix]=d
zwiększ
liczbę
d=d+1
czy reszta
z dzielenia
równa 0?
NIE
czy liczba
jest już
równa 0?
NIE
x=?
x%d==0
TAK
x != 1
TAK
Wydruk
tablicy
px[ ]
STOP
d
– kolejny dzielnik
ix
– indeks dzielnika
px[.] – tablica dzielników
ix = ix+1
px[ix]=d
x=x/d
zwiększ indeks
zapisz dzielnik do tablicy
podziel liczbę
/*
Przykad 2a ver.1 */
#include <stdio.h>
#define MAXSIZE 100
main()
{
unsigned int x, d, px[ MAXSIZE ], ix, i;
printf(" \n Jaka liczba naturalna ? " );
scanf("%d", &x);
d = 1; ix = 0; px[ ix ] = d;
NOWE:
d = d + 1;
/* lub d += 1, d++ */
POWTORZ:
if ( x % d == 0 )
/* reszta z dzielenia x przez d */
{
ix = ix + 1;
px[ ix ] = d;
x = x / d;
/* lub x /= d */
goto POWTORZ;
}
else
{ if ( x != 1 )
goto NOWE;
}
for( i = 0; i <= ix; i++ ) { printf( " %5d", px[ i ] ) };
return( 0 );
}
/*
#include <stdio.h>
#define MAXSIZE 100
main()
{
unsigned int
Przykad 2a ver. 3
*/
x, d, px[ MAXSIZE ], ix, i;
printf(" \n Jaka liczba naturalna ? " ); scanf("%d", &x);
d = 1; ix = 0; px[ ix ] = d;
do
{
d = d + 1;
while ( x % d == 0 )
{
ix = ix + 1;
px[ ix ] = d;
x = x / d;
}
}
while ( x != 1 );
for( i = 0; i <= ix; i++ ) { printf( " %5d", px[ i ] ) };
return( 0 );
}
/* lub d += 1, d++ */
/* x /= d */
/*
Przykad 2a ver. 4
*/
#include <stdio.h> /* funkcje: printf i scanf */
#include <stdlib.h>
/* funkcje: malloc i free */
#define MAXSIZE 100
main()
{
unsigned int x,
*px, *wpx1, *wpx2;
unsigned int d;
// deklaracja wskaźników do pamięci
// poniżej przydzielenie pamięci
px = (unsigned int *) malloc( MAXSIZE * sizeof( int ) ); wpx1 = px; wpx2 = px;
printf(" \n Jaka liczba naturalna ? "); scanf("%d", &x);
d = 1;
*px = d;
do {
d++;
while ( x % d == 0 )
{
*(++px) = d;
x = x / d;
}
} while ( x != 1 )
// zapisz do pamięci pod adres
// pokazywany przez wskaźnik
// najpierw zwiększ wskaźnik, potem zapisz
while ( wpx1 <= px ) { printf( " %5d",
*wpx1++
); }
// najpierw zapisz, potem zwiększ wpx1
free( wpx2 );
// zwolnij pamięć związaną ze wskaźnikiem,
return( 0 );
// przydzieloną funkcją malloc
}
Zgłoś jeśli naruszono regulamin