WYKAAD IV
Programowanie komputerów, MiBM, sem. III
Przegląd podstawowych konstrukcji języka C
Tablice
Katedra Mechaniki i Informatyki Stosowanej
Zadanie 1
Napisać program dokonujący konwersji liczby całkowitej,
nieujemnej z reprezentacji dziesiętnej na binarną.
Przeprowadzając cykliczne dzielenie przez 2 i notując uzyskiwane
reszty uzyskuje się:
61/2 = 30 reszta 1
30/2 = 15 reszta 0
15/2 = 7 reszta 1
7/2 = 3 reszta 1
3/2 = 1 reszta 1
1/2 = 0 reszta 1
Zapisując otrzymane wartości reszty z dzielenia w porządku
odwrotnym
61DEC = 111101BIN
Tablica
Definicja
typ-pola id-tablicy [ N ] ;
gdzie N jest liczbą pól (elementów) tablicy. N jest stałą, której
wartość musi być znana w trakcie kompilacji.
Użycie
id-tablicy [ indeks ]
indeksjest liczbą całkowitą z przedziału 0 . . . (N - 1). Wartość
indeksu obliczana jest w trakcie wykonania programu.
Np.
int t[5] ;
t[1] = 3;
Konwersja liczby dziesiętnej na dwójkową
Zmienne
dec dana liczba dziesiętna,
bin[8] tablica o ośmiu elementach całkowitych,
Szkic algorytmu
wczytać liczbę w postaci dziesiętnej -dec,
wyzerować licznik powtórzeńi!- 0,
dopóki (dec= 0) powtarzaj:
bin[i]!-dec % 2,
dec!-dec / 2,
i!-i + 1.
Zmiennaiwskazuje następne (wolne) pole,
i!-i - 1,
dopóki (i 0) powtarzaj:
wypisztab[i],
i!-i-1.
Zamiana liczby dziesiętnej na binarną
Wersja (0)
#i nc l u d e < s t d i o . h>
#d e f in e NUM LEN 8
i n t main ( )
{
i n t b i n [ NUM LEN ] , dec ;
i n t i , n ;
p r i n t f (">_ ") ; s c a n f ("%d", & dec ) ; p r i n t f ("(%d) DEC --> (", dec ) ;
f o r ( i = 0 ; ( dec > 0) && ( i < NUM LEN ) ; i ++ ) { b i n [ i ] = dec % 2;
dec = dec / 2 ;
}
i = i -1; while ( i >= 0 ) {
p r i n t f ("%d", b i n [ i ] ) ; i = i - 1;
}
p r i n t f (") BIN\n") ;
r etu rn 0 ;
}
Zamiana liczby dziesiętnej na binarną
Wersja (2)
#i nc l u de < s t d i o . h>
#de f i ne NUM LEN 8
i n t main ( )
{
i n t b i n [ NUM LEN ] , dec ;
i n t i , n ;
p r i n t f (">_ ") ; s c a n f ("%d", & dec ) ; p r i n t f ("(%d) DEC --> (", dec ) ;
f o r ( i = 0 ; dec > 0 && i < NUM LEN ; dec /=2 ) b i n [ i ++] = dec % 2 ;
i f ( dec == 0 ) {
while ( i ) p r i n t f ("%d", b i n [-- i ] ) ; p r i n t f (") BIN\n") ;
}
e l s e p r i n t f ( "???) BIN\n") ;
ret ur n 0 ;
}
Zadanie 2.
Napisz program czytający tekst i wypisujący go z numeracją
wierszy (na lewym bądz prawym marginesie).
#in c lu d e
1
2
i n t main ( ) 3
{ 4
p r i n t f ("Hello, world !\n") ; 5
6
r et u r n 0 ; 7
} 8
Szkic algorytmu
wyzeruj licznik,
dopóki ( istnieje następny wiersz" ),
czytaj wiersz,
powiększ licznik,
wypisz linię składającą się z numeru wiersza i wczytanych
znaków.
"
) UWAGA: Zanim nie spróbuję przeczytać, nie wiem czy istnieje
wiersz, który chcę przeczytać. Jeżeli spróbuję czytać i operacja się
powiedzie, to znaczy, że wiersz istniał. Jeżeli operacja się nie uda,
tzn. wiersz nie istnieje i należy zakończyć akcję czytania.
Narzędzia
char *fgets(char *s, int n, FILE *stream) funkcja czyta co
najwyżej n - 1 znaków i wstawia do tablicy s.
Funkcja przerywa czytanie po napotkaniu znaku
nowego wiersza (i wstawieniu go do tablicy). Cały
tekst kończy znak\0. Funkcja zwraca s lubNULLpo
napotkaniu końca pliku.
int printf(const char *format, ...) funkcja, pod kontrolą
argumentu format, przekształca i wypisuje pozostałe
argumenty do standardowego strumienia wyjściowego.
Zwracana wartość jest równa liczbie wypisanych
znaków lub jest liczbą ujemną w przypadku błędu.
Tablica znakowa
Deklaracja
char id-tablicy [ N ] ;
rezerwuje tablicę składającą się z N pól mieszczących pojedyncze
znaki. Tablicę można definiować równocześnie przypisując jej
zawartość początkową:
char t[] = "Hello world";
Rozmiar tablicytwyliczy kompilator;
t: H e l l o _ w o r l d \0
Znak \0 (znakowe zero) kończy łańcuch znakowy (string).
Drukowanie tekstu z numeracją wierszy
Numer wiersza na lewym marginesie:
wyzeruj licznik wierszy,
dopóki ( udaje się operacja czytania wiersza)
powiększ licznik wierszy,
wypisz linię składającą się z numeru wiersza i wczytanych
znaków.
Numer wiersza na prawym marginesie:
wyzeruj licznik wierszy,
dopóki ( udaje się operacja czytania wiersza)
powiększ licznik wierszy,
wypisz wczytany wiersz,
wypełnij linię spacjami do marginesu,
wypisz numer wiersza i znak końca wiersza.
Drukowanie tekstu z numeracją wierszy
Numeracja na lewym marginesie. Wersja (0)
#i n c l u d e
#d ef i n e LINE LEN 72
i n t main ( )
{
char t e x t l i n e [ LINE LEN ] ;
i n t n ;
n = 0 ; while ( f g e t s ( t e x t l i n e , LINE LEN , s t d i n ) != NULL ) {
n = n + 1 ;
p r i n t f ("%d: %s", n , t e x t l i n e ) ;
}
r et u r n 0 ;
}
Drukowanie tekstu z numeracją wierszy
Numeracja na lewym marginesie. Wersja (1)
#in c lu d e
#d efin e LINE LEN 72
i n t g e t l i n e ( char l i n e [ ] )
{
i n t i = 0 ;
i f ( f g e t s ( l i n e , LINE LEN , s t d i n ) != NULL ) {
while ( l i n e [ i ] != \0 ) i = i + 1 ;
i f ( l i n e [ i -1] == \n ) l i n e [ i -1] = \0 ;
}
r et u r n i ;
}
Drukowanie tekstu z numeracją wierszy
Numeracja na lewym marginesie. Wersja (1) c.d.
i n t main ( )
{
char t e x t l i n e [ LINE LEN ] ;
i n t n ;
n = 0 ; while ( g e t l i n e ( t e x t l i n e ) > 0 ) {
n = n + 1 ;
p r i n t f ("%d: %s\n", n , t e x t l i n e ) ;
}
r et u r n 0 ;
}
Drukowanie tekstu z numeracją wierszy
Numeracja na prawym marginesie. Wersja (2)
#i nc lu de < s t d i o . h>
#define LINE LEN 7 2
#define R MARGIN 70
i n t g e t l i n e ( char l i n e [ ] )
{
i n t i = 0 ; /" l i c z b a zwracanych znaków "/
/" ł ą c z n i e z kończącym \ 0 "/
i f ( f g e t s ( l i n e , LINE LEN , s t d i n ) ) {
while ( l i n e [ i ] ) i ++ ;
i f ( l i n e [ i -1] == \n ) l i n e [ i -1] = \0 ;
}
r et u rn i ;
}
Drukowanie tekstu z numeracją wierszy
Numeracja na prawym marginesie. Wersja (2) c.d.
i n t main ( )
{
char t e x t l i n e [ LINE LEN ] ;
i n t i , n ;
n = 0 ;
while ( ( i = g e t l i n e ( t e x t l i n e ) ) > 0 ) {
p r i n t f ("%s", t e x t l i n e ) ;
f o r ( i = R MARGIN-i +1; i ; i -- ) p r i n t f ("%c", ) ;
p r i n t f ("%5d\n", ++n ) ;
}
retur n 0 ;
}
Wyszukiwarka
Podobne podstrony:
Sieci komputerowe wyklady dr Furtak
Wykład 05 Opadanie i fluidyzacja
WYKŁAD 1 Wprowadzenie do biotechnologii farmaceutycznej
mo3 wykladyJJ
ZARZĄDZANIE WARTOŚCIĄ PRZEDSIĘBIORSTWA Z DNIA 26 MARZEC 2011 WYKŁAD NR 3
Wyklad 2 PNOP 08 9 zaoczne
Wyklad studport 8
Kryptografia wyklad
Budownictwo Ogolne II zaoczne wyklad 13 ppoz
wyklad09
Sporzadzanie rachunku przepływów pienieżnych wykład 1 i 2
fcs wyklad 5
Wyklad08 Zaopatrz wWode
Wyklad3
więcej podobnych podstron