AsD L11

background image

Algorytmy, struktury danych i

Algorytmy, struktury danych i

techniki programowania.

techniki programowania.

Laboratorium z podstaw programowania w j

Laboratorium z podstaw programowania w j

ę

ę

zyku ANSI C

zyku ANSI C

background image

Ł

Ł

a

a

ń

ń

cuchy znak

cuchy znak

ó

ó

w

w

Jak pami

Jak pami

ę

ę

tamy z poprzednich zaj

tamy z poprzednich zaj

ęć

ęć

ł

ł

a

a

ń

ń

cuch znak

cuch znak

ó

ó

w zapisujemy pomi

w zapisujemy pomi

ę

ę

dzy

dzy

znakami cudzys

znakami cudzys

ł

ł

owu.

owu.

"

"

Lancuch

Lancuch

znakow

znakow

"

"

I u

I u

ż

ż

ywali

ywali

ś

ś

my go wielokrotnie wywo

my go wielokrotnie wywo

ł

ł

uj

uj

ą

ą

c funkcje

c funkcje

prntf

prntf

() lub

() lub

scanf

scanf

().

().

W takiej postaci jak powy

W takiej postaci jak powy

ż

ż

ej

ej

ł

ł

a

a

ń

ń

cuch znak

cuch znak

ó

ó

w to tzw. sta

w to tzw. sta

ł

ł

a

a

ł

ł

a

a

ń

ń

cuchowa (ang.

cuchowa (ang.

string

string

constant

constant

lub kr

lub kr

ó

ó

tko

tko

string

string

), kt

), kt

ó

ó

ra w rzeczywisto

ra w rzeczywisto

ś

ś

ci stanowi tablic

ci stanowi tablic

ę

ę

pojedynczych

pojedynczych

znak

znak

ó

ó

w ASCII (typ

w ASCII (typ

char

char

-

-

ka

ka

ż

ż

dy znak zajmuje jeden bajt pami

dy znak zajmuje jeden bajt pami

ę

ę

ci):

ci):

L

L

a

a

n

n

c

c

u

u

c

c

h

h

z

z

n

n

a

a

k

k

o

o

w

w

\

\

0

0

Trzeba zwr

Trzeba zwr

ó

ó

ci

ci

ć

ć

uwag

uwag

ę

ę

,

,

ż

ż

e kompilator na ko

e kompilator na ko

ń

ń

cu ka

cu ka

ż

ż

dego

dego

ł

ł

a

a

ń

ń

cucha dodaje znak

cucha dodaje znak

zerowy

zerowy

\

\

0

0

ko

ko

ń

ń

cz

cz

ą

ą

cy

cy

ł

ł

a

a

ń

ń

cuch. Jest on niewidoczny, ale s

cuch. Jest on niewidoczny, ale s

ł

ł

u

u

ż

ż

y do informowania

y do informowania

funkcji operuj

funkcji operuj

ą

ą

cych na

cych na

ł

ł

a

a

ń

ń

cuchach, w kt

cuchach, w kt

ó

ó

rym miejscu ko

rym miejscu ko

ń

ń

czy si

czy si

ę

ę

ł

ł

a

a

ń

ń

cuch znak

cuch znak

ó

ó

w.

w.

Tworz

Tworz

ą

ą

c zmienne

c zmienne

ł

ł

a

a

ń

ń

cuchowe w j

cuchowe w j

ę

ę

zyku C trzeba korzysta

zyku C trzeba korzysta

ć

ć

z tablic znakowych

z tablic znakowych

char

char

tab[ROZMIAR

tab[ROZMIAR

];

];

gdy

gdy

ż

ż

nie istnieje w tym j

nie istnieje w tym j

ę

ę

zyku typ bezpo

zyku typ bezpo

ś

ś

rednio reprezentuj

rednio reprezentuj

ą

ą

cy

cy

ł

ł

a

a

ń

ń

cuch znakowy.

cuch znakowy.

Zatem nazwa tablicy znak

Zatem nazwa tablicy znak

ó

ó

w lub sta

w lub sta

ł

ł

a

a

ł

ł

a

a

ń

ń

cuchowa jest wska

cuchowa jest wska

ź

ź

nikiem do pocz

nikiem do pocz

ą

ą

tku

tku

stringu

stringu

.

.

background image

Ł

Ł

a

a

ń

ń

cuchy znak

cuchy znak

ó

ó

w

w

Przyk

Przyk

ł

ł

ady deklaracji

ady deklaracji

ł

ł

a

a

ń

ń

cuch

cuch

ó

ó

w znakowych:

w znakowych:

//przy u

//przy u

ż

ż

yciu tablicy znak

yciu tablicy znak

ó

ó

w

w

char

char

nazwa[] =

nazwa[] =

"

"

Zwykly

Zwykly

napis

napis

;

;

//przy u

//przy u

ż

ż

yciu wska

yciu wska

ź

ź

nika do pocz

nika do pocz

ą

ą

tku

tku

ł

ł

a

a

ń

ń

cucha znak

cucha znak

ó

ó

w

w

char

char

*napis =

*napis =

"Kolejny napis ale

"Kolejny napis ale

troche

troche

inaczej zadeklarowany

inaczej zadeklarowany

;

;

//przy u

//przy u

ż

ż

yciu sta

yciu sta

ł

ł

ej symbolicznej

ej symbolicznej

#

#

define

define

POZDROWIENIE

POZDROWIENIE

"Witaj

"Witaj

uzytkowiku

uzytkowiku

!"

!"

W ka

W ka

ż

ż

dym przypadku kompilator automatycznie oblicza d

dym przypadku kompilator automatycznie oblicza d

ł

ł

ugo

ugo

ść

ść

ł

ł

a

a

ń

ń

cucha i dodaje

cucha i dodaje

na ko

na ko

ń

ń

cu znak zerowy

cu znak zerowy

\

\

0

0

.

.

background image

Przyk

Przyk

ł

ł

ad

ad

#include

<stdio.h>

#define

ROZMIAR 30

#define

STATUS_1

"Kandydat"

// ła

ń

cuchy znaków jako stałe symboliczne

#define

STATUS_2

"Student"

#define

STATUS_3

"Absolwent"

void

main(

void

){

char

imie[ROZMIAR], nazwisko[ROZMIAR];

//tablice znakowe

int

status;

printf(

"Podaj swoje imie i nazwisko: "

);

scanf(

"%s%s"

, imie, nazwisko );

//nazwy tablic to jednocze

ś

nie wska

ź

niki ich pocz

ą

tków

printf(

"Witaj %s podaj swoj status: (1, 2, 3)\n"

, imie);

scanf(

"%d"

, &status);

switch

(status){

case

1:

printf(

"%s %s ststus: %s \n"

, imie, nazwisko, STATUS_1);

break

;

case

2:

printf(

"%s %s ststus: %s \n"

, imie, nazwisko, STATUS_2);

break

;

case

3:

printf(

"%s %s ststus: %s \n"

, imie, nazwisko, STATUS_3);

break

;

default

:

printf(

"Niestety bledny status!\n"

);

break

;

}

}

background image

Ł

Ł

a

a

ń

ń

cuchy znak

cuchy znak

ó

ó

w

w

funkcja

funkcja

gets

gets

()

()

Funkcja

Funkcja

scanf(

scanf(

"%s

"%s

, nazwa)

, nazwa)

pobiera ci

pobiera ci

ą

ą

g znak

g znak

ó

ó

w z klawiatury do momentu

w z klawiatury do momentu

napotkania bia

napotkania bia

ł

ł

ego znaku (

ego znaku (

znaku

znaku

odst

odst

ę

ę

pu, tabulacji lub znaku nowego wiersza).

pu, tabulacji lub znaku nowego wiersza).

Do pobierania ca

Do pobierania ca

ł

ł

ych linii tekstu s

ych linii tekstu s

ł

ł

u

u

ż

ż

y funkcja

y funkcja

gets

gets

()

()

z biblioteki

z biblioteki

stdio.h

stdio.h

,

,

kt

kt

ó

ó

ra

ra

jako argument pobiera tablic

jako argument pobiera tablic

ę

ę

znak

znak

ó

ó

w, do kt

w, do kt

ó

ó

rej kopiuje znaki pobrane z

rej kopiuje znaki pobrane z

klawiatury. Funkcja

klawiatury. Funkcja

gets

gets

()

()

pobiera znaki do momentu napotkania znaku nowej

pobiera znaki do momentu napotkania znaku nowej

linii

linii

\

\

n

n

wpisanego przez wci

wpisanego przez wci

ś

ś

ni

ni

ę

ę

cie klawisza ENTER, lecz bez tego znaku oraz

cie klawisza ENTER, lecz bez tego znaku oraz

dodaje na ko

dodaje na ko

ń

ń

cu

cu

ł

ł

a

a

ń

ń

cucha znak zerowy

cucha znak zerowy

\

\

0

0

.

.

Funkcja

Funkcja

gets

gets

()

()

zwraca tak

zwraca tak

ż

ż

e wska

e wska

ź

ź

nik do pobranego

nik do pobranego

ł

ł

a

a

ń

ń

cucha znak

cucha znak

ó

ó

w.

w.

W przypadku b

W przypadku b

ł

ę

ł

ę

d

d

ó

ó

w przy pobieraniu znak

w przy pobieraniu znak

ó

ó

w z klawiatury, funkcja

w z klawiatury, funkcja

gets

gets

()

()

zwraca

zwraca

wska

wska

ź

ź

nik zerowy (NULL)

nik zerowy (NULL)

Mo

Mo

ż

ż

na wi

na wi

ę

ę

c sprawdzi

c sprawdzi

ć

ć

czy

czy

ł

ł

a

a

ń

ń

cuch zosta

cuch zosta

ł

ł

pobrany prawid

pobrany prawid

ł

ł

owo:

owo:

if

if

(

(

gets(nazwa

gets(nazwa

) == NULL)

) == NULL)

printf(

printf(

"Blad

"Blad

przy odczycie danych!"

przy odczycie danych!"

);

);

background image

Ł

Ł

a

a

ń

ń

cuchy znak

cuchy znak

ó

ó

w

w

funkcja

funkcja

puts

puts

()

()

Do wy

Do wy

ś

ś

wietlania

wietlania

ł

ł

a

a

ń

ń

cuch

cuch

ó

ó

w znakowych na ekranie s

w znakowych na ekranie s

ł

ł

u

u

ż

ż

y te

y te

ż

ż

funkcja

funkcja

puts

puts

()

()

, kt

, kt

ó

ó

ra

ra

jako argument przyjmuje

jako argument przyjmuje

ł

ł

a

a

ń

ń

cuch znak

cuch znak

ó

ó

w. Na ko

w. Na ko

ń

ń

cu zawsze dodawany jest znak

cu zawsze dodawany jest znak

nowej linii.

nowej linii.

Przyk

Przyk

ł

ł

ad

ad

background image

#include

<stdio.h>

#define

ROZMIAR 50

#define

STATUS_1

"Kandydat"

// ła

ń

cuchy znaków jako stałe symboliczne

#define

STATUS_2

"Student"

#define

STATUS_3

"Absolwent"

int

main(

void

){

char

nazwa[ROZMIAR];

int

status;

puts(

"Podaj swoje imie i nazwisko :"

);

if

( gets(nazwa) == NULL ){

//cały wiersz znajdzie si

ę

w tablicy nazwa

puts(

"Blad pobierania danych lub koniec pliku!"

);

return

0;

//zako

ń

czenie programu

}
printf(

"Witaj %s podaj swoj status: (1, 2, 3)\n"

, nazwa);

scanf(

"%d"

, &status);

switch

(status){

case

1:

printf(

"%s ststus: %s \n"

, nazwa, STATUS_1);

break

;

case

2:

printf(

"%s ststus: %s \n"

, nazwa, STATUS_2);

break

;

case

3:

printf(

"%s ststus: %s \n"

, nazwa, STATUS_3);

break

;

default

:

printf(

"Niestety bledny status!\n"

);

break

; }

return

0; }

background image

Funkcja

Funkcja

getchar

getchar

() i

() i

putchar

putchar

()

()

Ł

Ł

a

a

ń

ń

cuchy znak

cuchy znak

ó

ó

w mo

w mo

ż

ż

na te

na te

ż

ż

tworzy

tworzy

ć

ć

z pojedynczych znak

z pojedynczych znak

ó

ó

w przy u

w przy u

ż

ż

yciu

yciu

funcji

funcji

getchar

getchar

()

()

i

i

putchar

putchar

()

()

w po

w po

ł

ą

ł

ą

czeniu z instrukcj

czeniu z instrukcj

ą

ą

p

p

ę

ę

tli. Spotkali

tli. Spotkali

ś

ś

my si

my si

ę

ę

ju

ju

ż

ż

wcze

wcze

ś

ś

niej z u

niej z u

ż

ż

yciem tych funkcji.

yciem tych funkcji.

Funkcja

Funkcja

getchar

getchar

()

()

pobiera z klawiatury jeden znak za

pobiera z klawiatury jeden znak za

ś

ś

funkcja

funkcja

putchar

putchar

()

()

wypisuje na ekranie jeden znak. Trzeba jednak zarezerwowa

wypisuje na ekranie jeden znak. Trzeba jednak zarezerwowa

ć

ć

odpowiedni rozmiar

odpowiedni rozmiar

tablicy w kt

tablicy w kt

ó

ó

rej b

rej b

ę

ę

dzie przechowywany tekst aby nie nast

dzie przechowywany tekst aby nie nast

ą

ą

pi

pi

ł

ł

o przepe

o przepe

ł

ł

nienie

nienie

tablicy.

tablicy.

background image

Przyk

Przyk

ł

ł

ad

ad

#

#

include

include

<

<

stdio.h

stdio.h

>

>

#

#

define

define

ROZMIAR 1000

ROZMIAR 1000

//odpowiednio du

//odpowiednio du

ż

ż

a tablica

a tablica

ż

ż

eby pomie

eby pomie

ś

ś

ci

ci

ć

ć

//wszystkie znaki

//wszystkie znaki

int

int

main

main

(

(

void

void

){

){

char

char

nazwa[ROZMIAR

nazwa[ROZMIAR

];

];

int

int

i = 0;

i = 0;

int

int

dlugosc

dlugosc

;

;

puts(

puts(

"Wpisz

"Wpisz

cokolwiek:"

cokolwiek:"

);

);

//pobieranie tekstu z klawiatury

//pobieranie tekstu z klawiatury

while

while

( (

( (

nazwa[i

nazwa[i

] =

] =

getchar

getchar

()) != '

()) != '

\

\

n' )

n' )

i++;

i++;

dlugosc

dlugosc

= i;

= i;

//wy

//wy

ś

ś

wietlanie wpisanego tekstu

wietlanie wpisanego tekstu

for

for

(i = 0; i <

(i = 0; i <

dlugosc

dlugosc

; i++)

; i++)

putchar(nazwa[i

putchar(nazwa[i

]);

]);

putchar(

putchar(

'

'

\

\

n

n

'

'

);

);

getchar

getchar

();

();

return

return

0;

0;

}

}

background image

Ł

Ł

a

a

ń

ń

cuchy znak

cuchy znak

ó

ó

w

w

-

-

biblioteka

biblioteka

string.h

string.h

Do wykonywania operacji na

Do wykonywania operacji na

ł

ł

a

a

ń

ń

cuchach znak

cuchach znak

ó

ó

w s

w s

ł

ł

u

u

ż

ż

y wiele funkcji kt

y wiele funkcji kt

ó

ó

rych

rych

deklaracje znajduj

deklaracje znajduj

ą

ą

si

si

ę

ę

w pliku

w pliku

string.h

string.h

Jedne z najwa

Jedne z najwa

ż

ż

niejszych funkcji to:

niejszych funkcji to:

int

int

strlen(

strlen(

const

const

char

char

* s1)

* s1)

oblicza d

oblicza d

ł

ł

ugo

ugo

ść

ść

ł

ł

a

a

ń

ń

cucha s1 i zwraca liczb

cucha s1 i zwraca liczb

ę

ę

znak

znak

ó

ó

w

w

(bez znaku zerowego).

(bez znaku zerowego).

char

char

*

*

strcpy(

strcpy(

char

char

*s1,

*s1,

const

const

char

char

*s2 )

*s2 )

Kopiuje

Kopiuje

ł

ł

a

a

ń

ń

cuch wskazywany

cuch wskazywany

przez s2 wraz ze znakiem zerowym w miejsce wskazywane

przez s2 wraz ze znakiem zerowym w miejsce wskazywane

przez s1 i zwraca wska

przez s1 i zwraca wska

ź

ź

nik s1.

nik s1.

int

int

strcmp(

strcmp(

const

const

char

char

*s1,

*s1,

const

const

char

char

*s2)

*s2)

por

por

ó

ó

wnuje

wnuje

ł

ł

a

a

ń

ń

cuchy s1 i s2.

cuchy s1 i s2.

Je

Je

ż

ż

eli wszystkie znaki w s1 i s2 s

eli wszystkie znaki w s1 i s2 s

ą

ą

identyczne to

identyczne to

ł

ł

a

a

ń

ń

cuchy s

cuchy s

ą

ą

r

r

ó

ó

wne. Por

wne. Por

ó

ó

wnywane s

wnywane s

ą

ą

warto

warto

ś

ś

ci numeryczne poszczeg

ci numeryczne poszczeg

ó

ó

lnych

lnych

znak

znak

ó

ó

w. Je

w. Je

ż

ż

eli

eli

ł

ł

a

a

ń

ń

cuchy s

cuchy s

ą

ą

r

r

ó

ó

wne to funkcja zwraca 0. Je

wne to funkcja zwraca 0. Je

ż

ż

eli

eli

funkcja napotka r

funkcja napotka r

ó

ó

ż

ż

ne znaki w s1 i s2 to por

ne znaki w s1 i s2 to por

ó

ó

wnuje ich warto

wnuje ich warto

ś

ś

ci

ci

numeryczne i zwraca warto

numeryczne i zwraca warto

ść

ść

ujemn

ujemn

ą

ą

je

je

ż

ż

eli pierwszy

eli pierwszy

ł

ł

a

a

ń

ń

cuch

cuch

jest mniejszy ni

jest mniejszy ni

ż

ż

drugi za

drugi za

ś

ś

dodatni

dodatni

ą

ą

w przeciwnym wypadku.

w przeciwnym wypadku.

background image

Zadanie

Zadanie

Prosz

Prosz

ę

ę

napisa

napisa

ć

ć

program, kt

program, kt

ó

ó

ry pobiera z klawiatury imi

ry pobiera z klawiatury imi

ę

ę

i nazwisko za

i nazwisko za

pomoc

pomoc

ą

ą

funkcji

funkcji

gets

gets

(), nast

(), nast

ę

ę

pnie rozdziela imi

pnie rozdziela imi

ę

ę

od nazwiska i umieszcza

od nazwiska i umieszcza

dwa

dwa

ł

ł

a

a

ń

ń

cuchy w osobnych tablicach. Na koniec nale

cuchy w osobnych tablicach. Na koniec nale

ż

ż

y wy

y wy

ś

ś

wietli

wietli

ć

ć

na

na

ekranie liczb

ekranie liczb

ę

ę

liter w imieniu i nazwisku u

liter w imieniu i nazwisku u

ż

ż

ywaj

ywaj

ą

ą

c funkcji

c funkcji

strlen

strlen

().

().

background image

Rozwi

Rozwi

ą

ą

zanie

zanie

#include

<stdio.h>

#include

<string.h>

#define

ROZMIAR 100

int

main(

void

){

char

napis[ROZMIAR], imie[ROZMIAR], nazwisko[ROZMIAR];

int

i, j;

puts(

"Wpisz imie i nazwisko:"

);

if

(gets(napis) == NULL){

puts(

"Blad pobierania!"

);

return

0;

}
printf(

"%s zawiera %d znakow.\n"

, napis, strlen(napis));

i = 0;

while

(napis[i] !=

' '

){

//kopiowanie do znaku odstępu

imie[i] = napis[i];
i++;

}
imie[i] =

'\0'

;

//dodanie znaku zerowego na końcu

//dalszy ciąg na następnym slajdzie

background image

Rozwi

Rozwi

ą

ą

zanie

zanie

//dokończenie

i++;

//trzeba ominąć znak odstępu

j = 0;

while

(napis[i] !=

'\0'

){

nazwisko[j++] = napis[i++];

}
nazwisko[j] =

'\0'

;

//dodanie znaku zerowego na końcu

printf(

"%s zawiera %d znakow.\n"

, imie, strlen(imie));

printf(

"%s zawiera %d znakow.\n"

, nazwisko, strlen(nazwisko));

putchar(

'\n'

);

getchar();

return

0;

}

background image

Zadanie

Zadanie

Prosz

Prosz

ę

ę

napisa

napisa

ć

ć

program, kt

program, kt

ó

ó

ry pobiera z klawiatury dwa napisy,

ry pobiera z klawiatury dwa napisy,

por

por

ó

ó

wnuje je za pomoc

wnuje je za pomoc

ą

ą

funkcji

funkcji

strcmp

strcmp

() i wy

() i wy

ś

ś

wietla wynik na ekranie.

wietla wynik na ekranie.

Nast

Nast

ę

ę

pnie po

pnie po

ł

ą

ł

ą

czy

czy

ć

ć

dwa napisy w jeden za pomoc

dwa napisy w jeden za pomoc

ą

ą

funkcji

funkcji

strcpy

strcpy

() i

() i

wy

wy

ś

ś

wietli

wietli

ć

ć

go na

go na

ekranie.

ekranie.

background image

Rozwi

Rozwi

ą

ą

zanie

zanie

#include

<stdio.h>

#include

<string.h>

#define

ROZMIAR 100

int

main(

void

){

char

napis_1[ROZMIAR], napis_2[ROZMIAR], calosc[ROZMIAR];

int

wynik;

puts(

"Wpisz pierwszy napis:"

);

if

(gets(napis_1) == NULL){

puts(

"Blad pobierania"

);

return

0;

}
puts(

"Wpisz drugi napis:"

);

if

(gets(napis_2) == NULL){

puts(

"Blad pobierania"

);

return

0;

}
wynik = strcmp(napis_1, napis_2);

//dalszy ciąg na następnym slajdzie

background image

Rozwi

Rozwi

ą

ą

zanie

zanie

//dokończenie

if

(wynik < 0)

printf(

"Napis \"%s\" jest mniejszy od napisu \"%s\"\n"

, napis_1,

napis_2);

else if

(wynik > 0)

printf(

"Napis \"%s\" jest wiekszy od napisu \"%s\"\n"

, napis_1,

napis_2);

else

printf(

"Napisy sa rowne."

);

strcpy(calosc, napis_1);

//kopiowanie napis_1

strcpy( (calosc + strlen(napis_1)), napis_2);

//kopiowanie napis_2

// strcat(calosc, napis_2); //alternatywna funkcja dołączająca jeden łańcuch

//znaków na koniec drugiego łańcucha

printf(

"Polaczone napisy: \"%s\" \n"

, calosc);

putchar(

'\n'

);

getchar();

return

0;

}

background image

Dzi

Dzi

ę

ę

kuje za uwag

kuje za uwag

ę

ę

.

.

Najlepsz

Najlepsz

ą

ą

metod

metod

ą

ą

nauczenia si

nauczenia si

ę

ę

programowania.

programowania.

Jest pisanie program

Jest pisanie program

ó

ó

w.

w.

>>Trening czyni mistrza <<

>>Trening czyni mistrza <<


Wyszukiwarka

Podobne podstrony:
ASD od z Sawanta II Wykład17 6
ASD 2012 test6
nw asd w13
teoria asd, stud, II semestr, ASD
asd
ASD w5
ASD Exercise 2
ASD w12
Egzamin ASD 2010
ASD w3
ASD, AGH, Semestr 5, mechanika płynów, akademiki, Mechanika Płynów, Mechanika płynów, ==Mech.płynow
ASD, algorytmybymonika, PYTANIE 1
ASD w10%2Cw11
nw asd w6
4-L11, elektrotechnika, elektroenergetyka, 3 4
asd wstep
ASD 01

więcej podobnych podstron