background image

Katedra Informatyki Stosowanej  

 

 

 

 

     Borland C++ 

Opracowanie mgr Gra

ż

yna G

ę

bal, WZiMK P

Ś

 

 

Ćwicz. 4 – Operacje na zmiennych i tablicach znakowych 

 

Operacje wejścia/wyjścia dla zmiennych znakowych (<stdio.h>) 

int getchar(void) 

Funkcja  pobiera  ze  standardowego  strumienia  wejściowego  (klawiatura)  następny  znak  i zwraca  jego  wartość 
(kod znaku). W przypadku błędu lub napotkania końca pliku zwraca EOF. 

int putchar(int) 

Funkcja wypisuje jeden znak do standardowego strumienia wyjściowego (monitor). Zwraca wypisany znak 
lub EOF w przypadku błędu. 
 
Zad. 4.1 
Uzupełnić poniższy program, tak aby dla zadanego ciągu znaków zakończonego klawiszem Enter wyznaczona 
została  liczba występujących w nim cyfr, liter oraz pozostałych znaków. Do rozwiązania zadania wykorzystać 
poniższy  schemat  blokowy. Następnie  zmodyfikować program  przenosząc  instrukcję  czytania  kolejnego  znaku 
do warunku pętli. 
Uwaga: Wciśnięcie klawisza Enter powoduje przesłanie do standardowego strumienia wejściowego znaku nowej 
linii (‘\n’).  
 

#include <stdio.h> 
char litera(char); 
char cyfra(char); 
void main() 

  char c; int lc, 

 

//liczba cyfr 

              ll, 

 

//liczba liter 

              lp; 

 

//liczba pozostałych znaków 

  lc=ll=lp=0; 
  printf("\nPodaj ciag znakow, zakoncz Enterem\n"); 

Tu należy wstawić ciąg instrukcji obliczających ile w podanym ciąg znaków występuje cyfr, liter oraz pozostałych 
znaków (porówna
ć schemat blokowy). Wykorzystać funkcje 

litera

 oraz 

cyfra.

 

  printf("\nLiczba cyfr: %d", lc); 
  printf("\nLiczba liter: %d", ll); 
  printf("\nLiczba pozostalych znakow: %d", lp); 
  return; 

char litera(char znak) 
{

 

Tu należy wstawić teść funkcji badającej czy podany znak jest literą. Jeśli tak funkcja powinna zwrócić wartość 1, w 
przeciwnym przypadku warto
ść 0. 


char cyfra(char znak) 

  if ( znak>='0' && znak<='9' ) return 1; 
  return 0; 

Wczytaj znak. 

Czy jest to znak 

różny od ‘\n’?

 

Zbadaj  znak.  Jeśli  jest  to  cyfra  zwiększ  licznik 
cyfr, jeśli litera – licznik liter, a jeśli inny znak to 
licznik pozostałych znaków. 

Wczytaj kolejny znak. 

background image

Katedra Informatyki Stosowanej  

 

 

 

 

     Borland C++ 

Opracowanie mgr Gra

ż

yna G

ę

bal, WZiMK P

Ś

Zad. 4.2 
W programie z zad. 4.1 przenieść operację czytania znaku do warunku pętli. 
 
 
Operacje wejścia/wyjścia dla tablic znakowych (<stdio.h>) 

char *gets(char *s)  

Funkcja  wczytuje  ze  standardowego  strumienia  wejściowego    następny  wiersz  i  wpisuje  go  do  tablicy  s. 
Końcowy  znak  nowego  wiersza  zastępuje  znakiem  ‘\0’.  Zwraca  s  (adres  tablicy).  W  przypadku  błędu  lub 
napotkania końca pliku zwraca NULL. 

int puts(const char *s) 

Funkcja  wypisuje  tekst  zawarty  w  tablicy  s  oraz  znak  nowego  wiersza  do  standardowego  strumienia 
wyjściowego. Zwraca liczbę nieujemną lub EOF w przypadku błędu. 
 
Zad. 4.3 
Poniższy program wczytuje łańcuch znaków do tablicy buf1. Następnie usuwa z niego wszystkie spacje i wynik 
zapisuje do buf2. Zawartość buf2 wyprowadza na ekran. Zmodyfikować ten program, tak aby w pętli wczytywał 
kolejne podawane linie znaków i usuwał z nich spacje. Pętla powinna zakończyć się po przesłaniu do programu 
znaku końca pliku (Ctrl-z). Sprawdzić czy program działa poprawnie, jeśli w zadanym łańcuchu występują znaki 
tabulacji. Jeśli działanie programu jest błędne należy poprawić funkcję bez_spacji

 
#include <stdio.h> 
void bez_spacji(char [],char []); 
void main() 
{ char buf1[81],buf2[81]; 
  gets(buf1); 
  bez_spacji(buf1,buf2); 
  puts(buf2); 
  return; 

void bez_spacji(char buf1[],char buf2[]) 

  int i,j; 
  for (i=j=0 ; buf1[i]!=’\0’ ; i++) 
  if (buf1[i]!=' ') {buf2[j]=buf1[i]; j++;} 
  buf2[j]='\0'; 
  return; 

Zad. 4.4 
Do programu z zad. 4.3 dodać funkcję duze_litery, która w zadanej tablicy znakowej zamienia wszystkie małe 
litery na duże. Następnie w programie głównym zastosować tę funkcję do łańcucha bez spacji. 
Uwaga: Wykorzystać funkcję toupper(c), która zwraca c przekształcone na dużą literę.  Funkcja znajduje się w 
nagłówku ctype.h. 
 
Zadania domowe 

1. W programie zmienić funkcję bez_spacji, następnie dostosować program do nowej wersji funkcji. 

void bez_spacji(char buf[]) 

  int i,j; 
  for (i=j=0 ; buf[i] ; i++) 
  if (buf[i]!=' ') buf[j++]=buf[i]; 
  buf[j]='\0'; 
  return; 

 
2. Napisać program, który bada dwa ciągi znakowe następująco: 

 

czy ciągi różnią się pierwszym znakiem, 

 

czy ciągi różnią się ostatnim znakiem, 

 

który z ciągów jest dłuższy. 

Uwaga: zaprojektować program, tak aby były wykorzystywane funkcje programisty.