Do wykonania poniższych zadań konieczna jest znajomość zagadnień związanych z operacjami na tablicach i na znakach (typ char).
Napisz program, który wypisuje strumień wejściowy w odwrotnej kolejności, zamieniając małe litery na duże. Przykład:
Test
TSET
Wskazówki:
Przykład użycia tolower() i strlen():
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
char napis[100];
int i;
scanf("%s",napis);
printf("%s %d\n",napis,strlen(napis));
for(i=0;i<strlen(napis);i++) printf("%c",toupper(napis[i]));
}
Pseudokod zadania:
Wczytaj napis
Znajdź długość napisu
Wypisz znaki napisu w kolejności od ostatniego do pierwszego, korzystając przy wypisywaniu z funkcji toupper()
s1="abcdefghijklmnopqrstuvwxyz"
s2="zyxwvutsrqponmlkjihgfedcba"
Napisz program, który każdej literze ciągu wejściowego znalezionej na pozycji n w ciągu s1 przypisuje odpowiadającą jej literę z ciągu s2 na pozycji n, natomiast nie znalezione znaki wypisuje bez zmian.
Przykład:
Podaj ciąg znaków...
ala ma kota
zoz nz plgz
Podaj ciąg znaków...
zoz nz plgz
ala ma kota.
Wskazówki:
Przy rozwiązywaniu zadania można skorzystać z funkcji strchr() zdefiniowanej w pliku nagłówkowym string.h. Funkcja ta wyszukuje zadany znak w zadanym napisie. Przykład użycia:
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] = "To jest prosty string";
char * pch;
printf ("Szukam pierwszego znaku 's' w napisie \"%s \"...\n",str);
pch=strchr(str,'s');
printf ("Znaleziono na pozycji %d\n",pch-str+1);
return 0;
}
Można też potraktować zmienne s1 i s2 jako tablice i wyszukiwać w nich znaki z wczytanego napisu.
Pseudokod kodowania:
Zmienna pomocnicza napisZakodowany[]=""
Zmienna pomocnicza flagaSukcesuKodowania
Wczytaj Napis
for i=0 to dlugoscNapisu //dlugoscNapisu wyznaczamy funkcją strlen()
flagaSukcesuKodowania=0
for j=0 to dlugoscS1 //to jest dlugosc tablicy s1
jeżeli Napis[i] jest równy s1[j] to
napisZakodowany[i]=s2[j]
flagaSukcesuKodowania=1
break
next j
jeżeli flagaSukcesuKodowania jest równa 0 to //nie udało się zakodować znaku
napisZakodowany[i]=Napis[i]
next i
Wypisz napisZakodowany
Napisz program, który wczytuje jedną dodatnią liczbę całkowitą i wypisuje słowami jej cyfry. Przykład:
0 -> zero
928 -> dziewięć dwa osiem.
Wskazówka:
Zadanie to najprościej rozwiąże się z wykorzystaniem funkcji itoa(), która przerabia liczbę na napis wg. zadanego systemu pozycyjnego (dziesiętny, dwójkowy itd.).Przykład zastosowania funkcji itoa():
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Wpisz liczbę: ");
int value;
scanf ("%d",&value);
char result[100];
itoa (value, result, 2); // system binarny
printf ("binernie: %s\n", result);
itoa (value, result, 8); // system ósemkowy
printf ("ósemkowo: %s\n", result);
itoa (value, result, 10); // system dziesiętny
printf ("dziesiętnie: %s\n", result);
system ("pause");
exit (EXIT_SUCCESS);
}
Jak widać, wyniki takiej konwersji trafiają do tablicy znakowej result. Długość tej tablicy można sprawdzić funkcją strlen(). W końcu, sprawdzając w pętli wszystkie znaki w tablicy results można cyfrom zapisanym w tablicy results przyporządkować opisy słowne jeden, dwa itd., korzystając z instrukcji switch.
Napisz funkcję int ileZer(long liczbaDziesietna), która wyznaczy, ile zer ma liczba liczbaDziesietna zapisana w układzie binarnym (licząc od pierwszej jedynki).
Przykład:
1 -> 0
3 -> 0
8 -> 2
12-> 2
32 -> 5
I to zadanie do się rozwiązać z wykorzystaniem funkcji itoa(). Po przekonwertowaniu liczby na napis z wykorzystaniem systemu dwójkowego wystarczy w tablicy results (patrz poprzednie zadanie) policzyć ilość zer.
Napisz program który będzie zamieniał liczby dziesiętne na rzymskie i odwrotnie, program powinien sam rozpoznawać w jakim systemie zapisana jest liczba.
Przykład:
6->VI
III->3
22->XXII
Przy wykonywaniu tego zadania mogą się przydać funkcje isdigit() i isalpha(), obie zdefiniowane w pliku nagłówkowym ctype.h.
Proszę napisać funkcję, która usuwa z ciągu znaków- argumentu wszystkie powtórzenia zadanego znaku - argumentu i zwraca zmodyfikowany ciąg znaków.
Proszę napisać funkcję strcat, która przyjmuje jako argument dwa ciągi znaków,alokuje potrzebną pamięć i zwraca ciąg będący sumą dwóch ciągów - argumentów rozdzielonych spacjami.
Nazwa pliku z danymi jest budowana wg maski Prefix~x_Nx~y_Ny~z_Nz~b_Kod~.raw, gdzie Prefix jest dowolnym ciągiem znaków nie zawierającym znaku ~, Nx, Ny i Nz są liczbami, definiującymi rozmiar danych, a Kod jest ciągiem znaków, określającym rodzaj kodowania danych.Proszę napisać funkcję, która pobiera nazwę pliku i zwraca liczby Nx, Ny, Nz oraz ciąg znaków Kod.