Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- #include <conio.h>
- #include <math.h>
- void pobierz_wyrazenie (char *wyrazenie);
- int wyrazenie_niepoprawne (char *wyrazenie);
- void znajdz_podwyrazenia (char *wyrazenie);
- void zaznacz_podwyrazenie (char *wyrazenie, int pocz, int kon);
- void printf_do_pliku (char cus);
- FILE *plik;
- int main() {
- plik = fopen("nawiasy.txt", "w");
- char wyrazenie[100];
- pobierz_wyrazenie(wyrazenie);
- znajdz_podwyrazenia(wyrazenie);
- fclose(plik);
- return 0;
- }
- void pobierz_wyrazenie (char *wyrazenie) {
- int status;
- do {
- printf("Podaj poprawne wyrazenie nawiasowe: ");
- scanf("%s", wyrazenie);
- status = wyrazenie_niepoprawne(wyrazenie);
- } while (status);
- return;
- }
- int wyrazenie_niepoprawne (char *wyrazenie) { // zwraca zero jeśli poprawne
- int checksum = 0, i;
- for (i=0; wyrazenie[i] != '\0'; ++i) {
- if (checksum < 0) { // np. ()()) - niepoprawne zamknięcie nawiasu
- return 405;
- }
- switch (wyrazenie[i]) {
- case '(':
- ++checksum;
- break;
- case ')':
- --checksum;
- break;
- default:
- return 101;
- }
- }
- if (checksum) return 404;
- return 0;
- }
- void znajdz_podwyrazenia (char *wyrazenie) {
- char tmp[100];
- int i, j, k;
- for (i=2; i<=strlen(wyrazenie); i+=2) { // sprawdzamy wyrażenia długości i
- //printf("%d: { ", i);
- for (j=0; j+i<=strlen(wyrazenie); ++j) { // sprawdzamy zaczynając od j-tego elementu
- //printf("%d ", j);
- for (k=j; k<j+i; ++k) { // kopiujemy kawałek
- tmp[k-j] = wyrazenie[k];
- }
- tmp[k-j] = '\0'; // dopisujemy recznie znak konca stringa
- //printf("%s\n", tmp);
- if (!wyrazenie_niepoprawne(tmp)) {
- //printf("%s, i:%d, j:%d, k:%d\n", tmp, i, j, k);
- zaznacz_podwyrazenie(wyrazenie, j, k);
- }
- }
- //printf("}\n");
- }
- return;
- }
- void zaznacz_podwyrazenie (char *wyrazenie, int pocz, int kon) {
- int i;
- for (i=0; i<strlen(wyrazenie); ++i) {
- if (i == pocz) {
- printf_do_pliku('|');
- }
- printf_do_pliku(wyrazenie[i]);
- if (i == kon-1) {
- printf_do_pliku('|');
- }
- }
- printf_do_pliku('\n');
- return;
- }
- void printf_do_pliku (char cus) {
- fprintf(plik, "%c", cus);
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement