Advertisement
Guest User

zad3

a guest
May 25th, 2018
545
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.52 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <math.h>
  6.  
  7. void pobierz_wyrazenie (char *wyrazenie);
  8. int wyrazenie_niepoprawne (char *wyrazenie);
  9. void znajdz_podwyrazenia (char *wyrazenie);
  10. void zaznacz_podwyrazenie (char *wyrazenie, int pocz, int kon);
  11. void printf_do_pliku (char cus);
  12.  
  13. FILE *plik;
  14.  
  15. int main() {
  16.     plik = fopen("nawiasy.txt", "w");
  17.     char wyrazenie[100];
  18.     pobierz_wyrazenie(wyrazenie);
  19.     znajdz_podwyrazenia(wyrazenie);
  20.     fclose(plik);
  21.     return 0;
  22. }
  23.  
  24.  
  25. void pobierz_wyrazenie (char *wyrazenie) {
  26.     int status;
  27.     do {
  28.         printf("Podaj poprawne wyrazenie nawiasowe: ");
  29.         scanf("%s", wyrazenie);
  30.         status = wyrazenie_niepoprawne(wyrazenie);
  31.     } while (status);
  32.     return;
  33. }
  34.  
  35.  
  36. int wyrazenie_niepoprawne (char *wyrazenie) { // zwraca zero jeśli poprawne
  37.     int checksum = 0, i;
  38.     for (i=0; wyrazenie[i] != '\0'; ++i) {
  39.         if (checksum < 0) { // np. ()()) - niepoprawne zamknięcie nawiasu
  40.             return 405;
  41.         }
  42.  
  43.         switch (wyrazenie[i]) {
  44.         case '(':
  45.             ++checksum;
  46.             break;
  47.         case ')':
  48.             --checksum;
  49.             break;
  50.         default:
  51.             return 101;
  52.         }
  53.     }
  54.     if (checksum) return 404;
  55.     return 0;
  56. }
  57.  
  58. void znajdz_podwyrazenia (char *wyrazenie) {
  59.     char tmp[100];
  60.     int i, j, k;
  61.     for (i=2; i<=strlen(wyrazenie); i+=2) { // sprawdzamy wyrażenia długości i
  62.         //printf("%d: { ", i);
  63.         for (j=0; j+i<=strlen(wyrazenie); ++j) { // sprawdzamy zaczynając od j-tego elementu
  64.             //printf("%d ", j);
  65.             for (k=j; k<j+i; ++k) { // kopiujemy kawałek
  66.                 tmp[k-j] = wyrazenie[k];
  67.             }
  68.             tmp[k-j] = '\0'; // dopisujemy recznie znak konca stringa
  69.             //printf("%s\n", tmp);
  70.             if (!wyrazenie_niepoprawne(tmp)) {
  71.                 //printf("%s, i:%d, j:%d, k:%d\n", tmp, i, j, k);
  72.                 zaznacz_podwyrazenie(wyrazenie, j, k);
  73.             }
  74.         }
  75.         //printf("}\n");
  76.     }
  77.     return;
  78. }
  79.  
  80.  
  81. void zaznacz_podwyrazenie (char *wyrazenie, int pocz, int kon) {
  82.     int i;
  83.     for (i=0; i<strlen(wyrazenie); ++i) {
  84.         if (i == pocz) {
  85.             printf_do_pliku('|');
  86.         }
  87.         printf_do_pliku(wyrazenie[i]);
  88.         if (i == kon-1) {
  89.             printf_do_pliku('|');
  90.         }
  91.     }
  92.     printf_do_pliku('\n');
  93.     return;
  94. }
  95.  
  96.  
  97. void printf_do_pliku (char cus) {
  98.     fprintf(plik, "%c", cus);
  99.     return;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement