Advertisement
Resonati

Untitled

Jun 9th, 2019
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.95 KB | None | 0 0
  1. 5.2.1 (r) Napisz funkcję wyczysc, która usuwa z tablicy przechowywanyw niej napis (w sensie: umieszcza w niej poprawny napis o długości0). Napisz dwie wersje funkcji wyczysc dla napisów składających sięze znaków typu char i wchar_t.
  2.  
  3. void wyczysc(char *napis){
  4. napis[0]=0;
  5. int main()
  6. {
  7. char tab[255] = "nfiaonsfkl";
  8. printf(" %s wypisalo",tab);
  9. wyczysc(tab);
  10. printf(" %s wypisalo",tab);
  11. return 0;
  12. }
  13. (r) 5.2.2Napisz funkcję dlugosc, która jako argument otrzymuje napisi zwraca jako wartość jego długość. Napisz dwie wersje funkcji dlugoscdla napisów składających się ze znaków typu char i wchar_t.
  14. ///cw 5_2_2
  15. int dlugosc(char *napis){
  16. int i=0;
  17. while(napis[i]!=0)
  18. i++;
  19. return i;
  20. }
  21. int main{
  22. printf("\ncw 5_2_2\n");
  23. printf("%d\n",dlugosc("Programowanie strukturalne to bardzo przyjemny przedmiot"));
  24. return 0;
  25. }
  26. 5.2.3 Napisz funkcję porownaj, która jako argumenty otrzymuje dwa napisyi zwraca 1 gdy napisy są równe i 0 w przeciwnym przypadku. Napisz dwie wersje funkcji porownaj dla napisów składających się ze znaków typu char i wchar_t
  27. int porownajnapisy(char *napis1,char *napis2){
  28. int dl1=dlugosc(napis1);
  29. int dl2=dlugosc(napis2);
  30. if(dl1==dl2)
  31. {tab[i]=tab1[j];
  32. for(int i=0;i<=dl2-1;i++)
  33. {
  34. if (napis1[i]!=napis2[i])
  35. {
  36. return 0;
  37. }
  38. }
  39. return 1;
  40. }
  41. else
  42. {
  43. return 0;
  44. }
  45. }
  46. int main{
  47. printf("\ncw 5_2_3\n");
  48. printf("%d\n",porownajnapisy("pierwszy napis","drugi napis"));
  49. printf("%d\n",porownajnapisy("wziasc","wziazc"));
  50. printf("%d\n",porownajnapisy("wziac","wziac"));
  51. return 0;
  52. }
  53. 5.2.4(r,!) Napisz funkcję, która jako argumenty otrzymuje dwa napisy i zwraca wartość 1, gdy pierwszy napis jest wcześniejszy w kolejności leksykograficznej i 0 w przeciwnym przypadku Zakładamy, że oba napisy składają się ze znaków typu char, zawierająwyłącznie małe litery alfabetu łacińskiego, a system, na którym jest kompilowany i uruchamiany program, używa standardowego kodowania ASCII
  54. int porownajslownikowo(char *napis1,char *napis2){
  55. for(int i=0;(napis1[i]!=0)&&(napis2[i]!=0);i++)
  56. {
  57. if (napis1[i]!=napis2[i])
  58. {
  59. return (napis1[i]<napis2[i])?1:0;
  60. }
  61. if (napis1[i]!=0)
  62. {
  63. return 0;
  64. }
  65. else
  66. {
  67. return 1;
  68. }
  69. }
  70. }
  71. int main{
  72. printf("\ncw 5_2_4\n");
  73. printf("%d\n",porownajslownikowo("arbuz","arbiter"));
  74. printf("%d\n",porownajslownikowo("hulajdusza","hulajnoga"));
  75. return 0;
  76. }
  77. 5.2.5
  78. Napisz funkcję przepisz, która otrzymuje dwie tablice znaków i przepisuje napis znajdujący się w pierwszej tablicy do drugiej tablicy. Zakładamy, że w drugiej tablicy jest wystarczająco dużo miejsca. Napiszdwie wersje funkcji przepisz dla napisów składających się ze znaków typu char i wchar_t.
  79. void przepisz(char*napis1, char*napis2){
  80. for(int i=0;i<dlugosc(napis1);i++)
  81. {
  82. napis2[i]=napis1[i];
  83. }
  84. napis2[dlugosc(napis1)]=0;
  85. }
  86. ///cw 5_2_5
  87. printf("\ncw 5_2_5\n");
  88. ///w poleceniu mamy zaznaczone ze przepisujemy krotsze napisy pod dluzsze
  89. char* pierwszy="arbuz";
  90. char drugi[20]="arbiter";
  91. wypisz(pierwszy);
  92. wypisz(drugi);
  93. przepisz(pierwszy,drugi);
  94. wypisz(pierwszy);
  95. wypisz(drugi);
  96. 5.2.6
  97. 6 Napisz funkcję kopiujn, która dostaje w argumentach dwie tablice znaków nap1, nap2 oraz liczbę n i przekopiowuje n pierwszych znaków z napisu przechowywanego w tablicy nap1 do tablicy nap2. W przypadku gdy napis w tablicy nap1 jest krótszy niż n znaków, funkcja powinna po prostu przepisać cały napis. Funkcja powinna zadbać o to,żeby na końcu napisu w tablicy nap2 znalazł się znak o kodzie 0.Zakładamy, że w docelowej tablicy jest wystarczająco dużo miejsca.Napisz dwie wersje funkcji: dla napisów składających się ze znaków
  98. typu char i wchar_t.
  99.  
  100. void przepisznpierwszych(char*napis1, char*napis2, unsigned int n){
  101. for(int i=0;i<dlugosc(napis1)&&i<n;i++)
  102. {
  103. napis2[i]=napis1[i];
  104. }
  105. napis2[n]=0;
  106. }
  107. int main{
  108. printf("\ncw 5_2_6\n");
  109. char *pierwszy6="informatyka";
  110. wypisz(pierwszy6);
  111. char drugi6[30]="programowanie";
  112. wypisz(drugi6);
  113. przepisznpierwszych(pierwszy6,drugi6,6);
  114. wypisz(pierwszy6);
  115. wypisz(drugi6);
  116. return 0;
  117. }
  118. 5.2.7
  119. (r) Napisz funkcję sklej otrzymującą jako argumenty trzy tablice
  120. znaków i zapisującą do trzeciej tablicy konkatenację napisów znajdujących się w dwóch pierwszych tablicach (czyli dla napisów ”Ala m”i ”a kota” znajdujących się w pierwszych dwóch argumentach do trzeciej tablicy powinien zostać zapisany napis ”Ala ma kota”). Zakładamy, że w trzeciej tablicy jest wystarczająco dużo miejsca.Napisz dwie wersje funkcji sklej dla napisów składających się ze znaków typu char i wchar_t.
  121. ///cw 5_2_7
  122. void sklej(char *napis1,char *napis2,char *napis3){
  123. int i,j;
  124. for(i=0;napis1[i]!='\0';i++)
  125. {
  126. napis3[i]=napis1[i];
  127. }
  128. for(j=0;napis2[j]!='\0';i++,j++)
  129. {
  130. napis3[i]=napis2[j];
  131. }
  132. napis3[i]=0;
  133. }
  134. int main{
  135. printf("\ncw 5_2_7\n");
  136. char *pierwszy7="brzeczy";
  137. char *drugi7="szczykiewicz";
  138. char trzeci7[40]; ///wynik musi miec dlugosc
  139. sklej(pierwszy7,drugi7,trzeci7);
  140. wypisz(trzeci7);
  141. return 0;}
  142. 5.2.8.
  143. (r,!) Napisz funkcję, która otrzymuje w argumencie napis i podmieniaw nim wszystkie małe litery na duże litery.Zakładamy, że napis przechowywany jest w tablicy o elementach typu char, składa się wyłącznie z liter łacińskich i białych znaków, oraz że system ,na którym jest kompilowany i uruchamiany program, używa standardowego kodowania ASCII.
  144. void maleduze(char *napis){
  145. int i;
  146. for(i=0;napis[i]!=0;i++)
  147. {
  148. if ((napis[i]>='a')&&(napis[i]<='z'))
  149. {
  150. napis[i]=napis[i]+'a'-'A';
  151. }
  152. }
  153. }
  154. int main{
  155. printf("\ncw 5_2_8\n");
  156. char napiszad8[40]="ten napis ma byc duzymi literami";
  157. wypisz(napiszad8);
  158. maleduze(napiszad8);
  159. wypisz(napiszad8);
  160. return 0;
  161. }
  162. 5.2.9 (r) Napisz funkcję wytnij, która dostaje jako argumenty napis oraz dwie liczby całkowite n i m, i wycina z otrzymanego napisu znakio indeksach od n do m ( n 6 m). Otrzymany w argumencie napis może mieć dowolną liczbę znaków (w tym mniejszą od n lub m) Napisz dwie wersje funkcji wytnij dla napisów składających się ze znaków typu char i wchar_t.
  163. void wytnij(char *napis, int n, int m){
  164. int i,j;
  165. ///ustala dlugosc napisu
  166. for (j=0;napis[j]!=0;j++){}
  167. if(j+1>m)
  168. {
  169. for (i=0;i+m<j;i++)
  170. {
  171. napis[n+i]=napis[m+i+1];
  172. }
  173. }
  174. else if((n<j)&&(j+1<=m))
  175. {
  176. napis[n]=0;
  177. }
  178. }
  179. int main{
  180. printf("\ncw 5_2_9\n");
  181. char napiszad9[40]="z tego napisu mamy cos wyciac";
  182. wypisz(napiszad9);
  183. wytnij(napiszad9,5,15);
  184. wypisz(napiszad9);
  185. return 0;
  186. }
  187. 5.2.10(*,r) Napisz funkcję wytnij2, która dostaje jako argument dwa napisy nap1 i nap2, i wycina z napisu nap1 pierwsze wystąpienie w nim napisu nap2. Napisz dwie wersje funkcji wytnij2 dla napisów składających się ze znaków typu char i wchar_t
  188. bool porownaj(char* napis1, char* napis2, int n){
  189. int i;
  190. for(i=0;(napis1[i]!=0)&&napis2[i]!=0;i++)
  191. if(napis1[n+i]!=napis2[i])
  192. {
  193. return false;
  194. }
  195. if (napis2[i]==0)
  196. {
  197. return true;
  198. }
  199. else
  200. {
  201. return false;
  202. }
  203. }
  204. void wytnij2(char* napis1, char* napis2){
  205. int i, dl;
  206. for(dl=0;napis2[dl]!=0;dl++){}
  207. for(i=0;napis1[i]!=0;i++)
  208. {
  209. if (porownaj(napis1,napis2,i))
  210. {
  211. wytnij(napis1,i,i+dl-1);
  212. return;
  213. }
  214. }
  215. }
  216. int main{
  217. ///cw 5_2_10
  218. printf("\ncw 5_2_10\n");
  219. char napiszad101[40]="napis z ktorego wycinami";
  220. char napiszad102[40]="ktorego";
  221. wytnij2(napiszad101,napiszad102);
  222. wypisz(napiszad101);
  223. return 0;
  224. }
  225. 5.2.11
  226. (*,r) Napisz funkcję wytnijzw, która dostaje jako argument dwa napisy nap1 i nap2, i wycina z napisu nap1 wszystkie znaki występujące także w napisie nap2. Napisz dwie wersje funkcji wytnijz dla napisów składających się ze znaków typu char i wchar_t.
  227. void wytnijzw(char* napis1, char* napis2){
  228. int i,dl;
  229. int
  230. }
  231. int main(){
  232. printf("\ncw 5_2_11\n");
  233. return 0;
  234. }
  235. 5.2.13
  236. (*,r) Napisz funkcję wytnijtm, która dostaje jako argument dwa napisy nap1 i nap2 o równej długości i wycina z napisu nap1 znaki równeznakom występującym na tym samym miejscu w napisie nap2 (znako indeksie i usuwamy wtedy i tylko wtedy, gdy nap1[i]=nap2[i]). Napisz dwie wersje funkcji wytnijtm dla napisów składających się ze znaków typu char i wchar_t.
  237.  
  238. void wytnijtesameznaki(char *napis1,char *napis2){
  239. int i,j;
  240. for(i=0,j=0;napis1[i]!=0;i++)
  241. {
  242. if (napis1[i]!=napis2[i])
  243. {
  244. napis1[j]=napis1[i];
  245. j++;
  246. }
  247. }
  248. napis1[j]=0;
  249. }
  250. int main(){
  251. printf("\ncw 5_2_13\n");
  252. char napiszad131[40]="arbuz";
  253. char napiszad132[40]="arbiter";
  254. wytnijtesameznaki(napiszad131,napiszad132);
  255. wypisz(napiszad131);
  256. return 0;
  257. }
  258. 5.2.15Napisz funkcję, która wypisuje na standardowym wyjściu otrzymany w argumencie napis. Napisz dwie wersje funkcji: dla napisów typu string i wstring
  259. void wypisz(char * napis){
  260. printf("%s\n",napis);
  261. }
  262. void wypiszwchara(wchar_t * napis){
  263. printf("%ls\n",napis);
  264. }
  265. printf("\ncw 5_2_4\n");
  266. printf("%d\n",porownajslownikowo("arbuz","arbiter"));
  267. printf("%d\n",porownajslownikowo("hulajdusza","hulajnoga"));
  268. 5.2.16
  269. Napisz funkcję, która dostaje jako argument tablicę znaków i wczytuje do niej napis ze standardowego wejścia. Napisz dwie wersje funkcji: dla tablicy składających się ze znaków typu char i wchar_t.
  270.  
  271. void wczytaj(char * napis){
  272. scanf("%s",napis);
  273. }
  274.  
  275. void wczytajwchara(wchar_t * napis){
  276. scanf("%ls",napis);
  277. }
  278. int main(){
  279. wczytaj(dfsdfsdf)
  280. wczytajwchara(jkhjkj)
  281. }
  282. 5.2.20
  283. (r) Napisz funkcję godzina, która dostaje w argumentach trzy liczby całkowite godz, min i sek, zawierające odpowiednio godziny, minutyoraz sekundy, i zwraca jako wartość napis zawierający godzinę w formacie godz:min:sek, w którym wartości poszczególnych pól pochodzą ze zmiennych podanych w argumentach.Napisz dwie wersje funkcji godzina: zwracające napisy będące tablicami znaków typu char i typu wchar_t
  284.  
  285. char * godzina(int godz, int min, int sek){
  286. char* wynik=malloc(9*sizeof(char));
  287. sprintf(wynik,"%02d:%02d:%02d",godz,min,sek);
  288. return wynik;
  289. }
  290. wchar_t * godzinawchar(int godz, int min, int sek){
  291. wchar_t* wynik=malloc(9*sizeof(wchar_t));
  292. swprintf(wynik,L"%02d:%02d:%02d",godz,min,sek);
  293. return wynik;
  294. }
  295. 5.2.22 Napisz funkcję sklej, która dostaje w argumentach trzy napisy i zwraca jako wartość napis powstały ze sklejenia napisów otrzymanych w argumentach. Napisz dwie wersje funkcji sklej operujące na napisach składającychsię ze znaków typu char i typu wchar_t.
  296. char* sklejnapisy(char* napis1, char* napis2, char *napis3){
  297. char* wynik=malloc((strlen(napis1)+strlen(napis2)+strlen(napis3)+1)*sizeof(char));
  298. ///strlen oblicza dlugosc lancucha, wymaga uzycia bibiloteki string.h
  299. strcpy(wynik,napis1); ///pozwala umiescic stringa pod podany wskaznik
  300. strcat(wynik,napis2); ///pozwala dolaczyc lancuch do konca lancucha znajdujacego sie we wskazanym miejscu
  301. strcat(wynik,napis3);
  302. return wynik;
  303. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement