Strona 1 z 1
[C] program z nawiasami wytłumaczenie
: 14 lis 2011, o 12:27
autor: Bison
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
int dlugosc_tablicy(char tablica[])
{
int i=0;
while(tablica[i])
{
i++;
}
return i;
}
int czy_poprawny(char tablica[])
{
int p=0,z=0,i,wynik = 0; // poprawny
for(i=0; i<dlugosc_tablicy(tablica); i++)
{
switch(tablica[i])
{
case '(' :
{
p++;
break;
}
case ')' :
{
z++;
}
}
if(z>p)
{
wynik++;
}
}
if(p!=z)
{
wynik++;
}
return wynik;
}
int main()
{
char napis[50]="";
printf("Podaj napis: ");
scanf("%99s",napis);
if (czy_poprawny(napis)==0) printf("\nZapis poprawny!\n");
else {printf("\nZapis niepoprawny!\n");
}
system("PAUSE");
return 0;
}
Problem wygląda następująco. Czy mógłby mi ktoś wytłumaczyć w miarę przejrzyście (bo jestem z tego zielony) skąd to się wszystko bierze? Dokładniej:
Zasady działania tych funkcji dlugosc i czy_poprawny (tak po kolei co się dzieje) oraz o co chodzi w linijce 48 i 50.
Z góry dziękuję za odpowiedzi i pomoc.
[C] program z nawiasami wytłumaczenie
: 14 lis 2011, o 14:34
autor: lotnik21
Kod: Zaznacz cały
char napis[50]=""; // iniciujesz zmienną typu znakowego;
printf("Podaj napis: "); // w konsoli wypisuje "Podaj napis: ";
scanf("%99s",napis); // wrpowadzasz napis;
W następnym kroku program sprawdza, czy zapis jest poprawny, czy niepoprawny.
Kod: Zaznacz cały
if (czy_poprawny(napis)==0) printf("
Zapis poprawny!
")
// jeśli zmienna wynik zainicjowana w czy_poprawny(char) zwróci 0 to wynik jest poprawny;
else {printf("
Zapis niepoprawny!
"); // w przeciwnym wypadku wynik jest niepoprawny
Mam nadzieje, że pomogłem zrozumieć funkcje główną programu
[C] program z nawiasami wytłumaczenie
: 14 lis 2011, o 14:43
autor: Bison
@lotnik21
Dzięki, ale mółbyc mi wytłumaczyć jeszce tę funkcję czy poprawny (w sensie dlaczego na początku sie to zeruje i krok o kroku o co chodzi w tej funkcji)?
[C] program z nawiasami wytłumaczenie
: 14 lis 2011, o 15:00
autor: lotnik21
Zapiszę ci tą funkcje krócej:
Kod: Zaznacz cały
int czy_poprawny(char tablica[])
{
int p=0,z=0,i,wynik = 0;
// zmienna p to licznik który zlicza wystąpienie '(', na początku jest 0 wystąpień;
// zmienna z to licznik który zlicza wystąpienie ')', na początku jest 0 wystąpień;
// zmienna i do zliczania długości tablicy;
// zmienna wynik do sprawdzania, czy poprawny ( =0) ...
for(i=0; i<dlugosc_tablicy(tablica); i++)
switch(tablica[i])
{
case '(' : p++;
break;
case ')' : z++;
}
if(p!=z) wynik=1; // ... czy niepoprawny ( =1), tzn. ilość wystąpień '(' jest różna od ')';
return wynik;
}
[C] program z nawiasami wytłumaczenie
: 15 lis 2011, o 07:50
autor: Xitami
wołanie w pętli funkcji dlugosc jest błędem, algorytm staje się kwadratowy
zapisałbym to tak
Kod: Zaznacz cały
for(j=i=0; napis[i] != 0; i++)
if( napis[i]=='(' ) j++;
else if( napis[i]==')' ) j--;
if( j==0 ) puts("poprawny");
else puts("niepoprawny");