Tytułem wstępu
Tak jakoś dziwnie wyszło, że przypadło mi w udziale prowadzenie zajęć ,,Wstęp do informatyki''. Zajęcia stanowią niejako zwięzłe wprowadzenie w świat terminów i pojęć z którymi każdy informatyk powinien być obeznany. Część zagadnień będzie poruszana na osobnych zajęciach a do części już nigdy się nie wróci. Jednym z tematów zaliczanych do istonych są z punktu widzenia dalszego toku studiów są algorytmy. W ujęciu tych zajęć, cel jaki sobie stawiam w kontekście algorytmów to umiejętność ich poprawnego przedstawiania (w postaci pseudokodu, schematów blokowych i języka naturalnego) i rozumienia dlaczego algorytm wygląda tak a nie inaczej i jak wygląda w nim przepływ danych. Dlatego istotne w tych zajęciach jest nie to aby znać konkretne algorytmy, ale aby, wiedząc jak działają, umieć je przedstawić w sposób formalny. Ważne jest także aby umieć powiedzieć co się w algorytmie dzieje, jaki jest wpły użytych zmiennych i konstrukcji.
Niestety, z przyczyn mi nieznanych, myślenie algorytmiczne dla większości osób stanowi bardzo ciężkie zadanie. Nawet najprostsze zadania, typu wypisanie elementów macierzy, jest trudnym problemem. W tej sytuacji, nie pozostaje nic innego jak ćwiczenie, ćwiczenie i jeszcze raz ćwiczenie. Kłopot jest tylko taki, że nie ma do tego odpowiednich materiałów. Stąd pomysł na teść jaka jest poniżej. Zamieszczam tutaj różne algorytmy. Nie zależy mi na wyrafinowaniu, ale na przejrzystości i jasności. Każdy może przeczytać sobie opis algorytmu, spróbować samemu go zapisać np. w pseudokodzie po czym porównać z zamieszczonym rozwiązaniem.
UWAGA! Materiał będę rozbudowywał w miarę dostępnego czasu. Planuje do każdego algorytmu umieścić opis, jego pseudokod, implementację w PHP i schemat blokowy. Pewne różnce jakie mogą się pojawiać spowodowane mogą być np. innym indeksowaniem tablic (czasem od 0, czasem od 1).
Zajęcia I
Zajęcia II
MatMul
|
Algorytm mnożenia dwóch macierzy.
Pokaż kod PHP
Plik: "alg_2_1.php"
1 <?php 2 3 /* indeksowanie tablic od 0 */ 4 /* 5 1 2 3 6 4 5 6 7 8 1 2 9 3 4 10 5 6 11 12 1*1+2*3+3*5=22 1*2+2*4+3*6=28 13 4*1+5*3+6*5=49 4*2+5*4+6*6=64 14 */ 15 16 function MatMul(&$A,$n,$m,&$B,$p,&$C) 17 { 18 for($i=0;$i<$n;$i++) 19 { 20 for($j=0;$j<$p;$j++) 21 { 22 $C[$i][$j]=0; 23 for($t=0;$t<$m;$t++) 24 { 25 $C[$i][$j]=$C[$i][$j]+$A[$i][$t]*$B[$t][$j]; 26 } 27 } 28 } 29 } 30 31 function MatPrint(&$M,$n,$m) 32 { 33 for($i=0;$i<$n;$i++) 34 { 35 for($j=0;$j<$m;$j++) 36 { 37 echo $M[$i][$j]." "; 38 } 39 echo "<br>"; 40 } 41 } 42 43 $A=array(array(1,2,3),array(4,5,6)); 44 $B=array(array(1,2),array(3,4),array(5,6)); 45 $C=array(array(0,0),array(0,0)); 46 47 //MatPrint($A,2,3); 48 //MatPrint($B,3,2); 49 MatMul($A,2,3,$B,2,$C); 50 MatPrint($C,2,2); 51 ?>
Zwiń
|
|
One2TwoDim
|
Algorytm przekształcający wektor w macierz.
Pokaż kod PHP
Plik: "alg_2_2.php"
1 <?php 2 3 function One2TwoDim($v,$len,&$M,$n,$m) 4 { 5 $c=0; 6 7 for($i=0;$i<$n;$i++) 8 { 9 for($j=0;$j<$m;$j++) 10 { 11 $M[$i][$j]=$v[$c]; 12 $c++; 13 } 14 } 15 } 16 17 function MatPrint(&$M,$n,$m) 18 { 19 for($i=0;$i<$n;$i++) 20 { 21 for($j=0;$j<$m;$j++) 22 { 23 echo $M[$i][$j]." "; 24 } 25 echo "<br>"; 26 } 27 } 28 29 function VecPrint(&$M,$n) 30 { 31 for($i=0;$i<$n;$i++) 32 { 33 echo $M[$i]." "; 34 } 35 echo "<br>"; 36 } 37 38 $w=array(1,2,3,4,5,6); 39 $A=array(array(0,0,0),array(0,0,0)); 40 41 //VecPrint($w,6); 42 //MatPrint($A,2,3); 43 One2TwoDim($w,6,$A,2,3); 44 MatPrint($A,2,3); 45 ?>
Zwiń
|
|
One2TwoDim
|
Algorytm przekształcający wektor w macierz - wersja druga.
Pokaż kod PHP
Plik: "alg_2_3.php"
1 <?php 2 3 function One2TwoDim($v,$len,&$M,$n,$m) 4 { 5 for($i=0;$i<$len;$i++) 6 { 7 $M[(int)($i/$m)][$i%$m]=$v[$i]; 8 } 9 } 10 11 function MatPrint(&$M,$n,$m) 12 { 13 for($i=0;$i<$n;$i++) 14 { 15 for($j=0;$j<$m;$j++) 16 { 17 echo $M[$i][$j]." "; 18 } 19 echo "<br>"; 20 } 21 } 22 23 function VecPrint(&$M,$n) 24 { 25 for($i=0;$i<$n;$i++) 26 { 27 echo $M[$i]." "; 28 } 29 echo "<br>"; 30 } 31 32 $w=array(6,5,4,3,2,1); 33 $A=array(array(0,0,0),array(0,0,0)); 34 35 //VecPrint($w,6); 36 //MatPrint($A,2,3); 37 One2TwoDim($w,6,$A,2,3); 38 MatPrint($A,2,3); 39 ?>
Zwiń
|
|
Zajęcia III
DecToBase
|
Zamiana liczby o podstawie 10 na liczbę o dowolnej innej podstawie. Przedstawione rozwiązanie działa poprawnie dla systemów docelowych o podstawie mniejszej od 10. Dla podstaw większych nie ma zamiany ,,cyfr'' dwuznakowych na ,,cyfry'' jednoznakowe, tzn. liter. Rozwiązanie pełniejsze przedstawione jest dalej.
Pokaż kod PHP
Plik: "alg_3_1.php"
1 <?php 2 3 function DecToBase($n,$base) 4 { 5 $c=""; 6 7 while($n>0) 8 { 9 $c=($n % $base).$c; 10 $n=(int)($n/$base); 11 } 12 13 return $c; 14 } 15 16 echo DecToBase(15,16); 17 ?>
Zwiń
|
|
DecToBase
|
Zamiana liczby o podstawie 10 na liczbę o dowolnej innej podstawie. Przedstawione rozwiązanie działa poprawnie dla systemów docelowych o podstawie większej od 10 (w tym przypadku do maksymalnie 16, ale można to bardzo łatwo zmienić).
Pokaż kod PHP
Plik: "alg_3_7.php"
1 <?php 2 function ValueOfDigit($pos) 3 { 4 $str="0123456789ABCDEF"; 5 6 return substr($str,$pos,1); 7 } 8 9 function DecToBase($n,$base) 10 { 11 $c=""; 12 13 while($n>0) 14 { 15 $c=(ValueOfDigit($n % $base)).$c; 16 $n=(int)($n/$base); 17 } 18 19 return $c; 20 } 21 22 echo DecToBase(9,2); 23 ?>
Zwiń
|
|
BaseToDec
|
Zamiana liczby o zadanej podstawie na liczbę o podstawie 10. Przedstawione rozwiązanie działa poprawnie dla systemów źródłowych o podstawie mniejszej od 10. Dla podstaw większych nie ma zamiany ,,cyfr'' dwuznakowych na ,,cyfry'' jednoznakowe, tzn. liter. Rozwiązanie pełniejsze przedstawione jest dalej.
Pokaż kod PHP
Plik: "alg_3_2.php"
1 <?php 2 3 function Power($n,$m) 4 { 5 $r=1; 6 7 for($i=1;$i<=$m;$i++) 8 { 9 $r=$r*$n; 10 } 11 12 return $r; 13 } 14 15 function BaseToDec($n,$base) 16 { 17 $v=0; 18 $m=0; 19 while($n>0) 20 { 21 $r=$n % 10; 22 $n=(int)($n/10); 23 $v=$v+$r*Power($base,$m); 24 $m++; 25 } 26 27 return $v; 28 } 29 30 echo BaseToDec(1001,2); 31 ?>
Zwiń
|
|
BaseToDec
|
Ulepszona wersja poprzedniego zadania. Zamiana liczby o zadanej podstawie na liczbę o podstawie 10. Przedstawione rozwiązanie działa poprawnie dla systemów źródłowych o podstawie mniejszej od 10. Dla podstaw większych nie ma zamiany ,,cyfr'' dwuznakowych na ,,cyfry'' jednoznakowe, tzn. liter. Rozwiązanie pełniejsze przedstawione jest dalej.
Pokaż kod PHP
Plik: "alg_3_3.php"
1 <?php 2 3 function BaseToDec($n,$base) 4 { 5 $v=0; 6 $p=1; 7 8 while($n>0) 9 { 10 $r=$n % 10; 11 $n=(int)($n/10); 12 $v=$v+$r*$p; 13 $p=$p*$base; 14 } 15 16 return $v; 17 } 18 19 echo BaseToDec(1101,2); 20 ?>
Zwiń
|
|
BaseToDec
|
Ulepszona wersja poprzedniego zadania. Zamiana liczby o zadanej podstawie na liczbę o podstawie 10. Przedstawione rozwiązanie działa poprawnie dla systemów źródłowych o podstawie większej od 10 (w tym przypadku do maksymalnie 16, ale można to bardzo łatwo zmienić).
Pokaż kod PHP
Plik: "alg_3_4.php"
1 <?php 2 3 function ValueOfDigit($c) 4 { 5 $str="0123456789ABCDEF"; 6 7 $pos=strpos($str,$c); 8 9 if($pos===false) 10 return -1; 11 12 return $pos; 13 } 14 15 function BaseToDec($n,$base) 16 { 17 $l=strlen($n); 18 $p=1; 19 20 for($i=0;$i<$l;$i++) 21 { 22 $d=ValueOfDigit(substr($n,$l-1-$i,1)); 23 $v=$v+$d*$p; 24 $p=$p*$base; 25 } 26 27 return $v; 28 } 29 30 echo BaseToDec("1A",16); 31 ?>
Zwiń
|
|
EratostenesSieve
|
Wyszukiwanie liczb pierwszych za pomocą Sita Eratostenesa.
Pokaż kod PHP
Plik: "alg_3_5.php"
1 <?php 2 /* 3 Liczba pierwsza to liczba naturalna większa od 1, która ma dokładnie dwa dzielniki naturalne: jedynkę i samą siebie. Jeśli liczba naturalna jest większa od 1 i nie jest pierwsza, to nazywamy ją liczbą złożoną. Liczby 0 i 1 nie są ani pierwsze, ani złożone. 4 Oto dziesięć pierwszych w kolejności liczb pierwszych: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29. 5 */ 6 7 function EratostenesSieve($n) 8 { 9 for ($i=2;$i<=$n;$i++) 10 { 11 $sieve[$i]=true; 12 } 13 14 $limit=floor($n/2); 15 16 for($i=2;$i<$limit;$i++) 17 { 18 if($sieve[$i]==true) 19 { 20 for($j=$i+1;$j<=$n;$j++) 21 { 22 if($j%$i==0) 23 { 24 $sieve[$j]=false; 25 } 26 } 27 } 28 } 29 30 for($i=2;$i<=$n;$i++) 31 { 32 if($sieve[$i]==true) 33 { 34 echo $i.", "; 35 } 36 } 37 } 38 39 EratostenesSieve(30); 40 41 ?>
Zwiń
|
|
PrimeNumbersFromInterval
|
Inna metoda znajdowania (sprawdzania) liczb pierwszych.
Pokaż kod PHP
Plik: "alg_3_6.php"
1 <?php 2 3 function CheckIfPrime($n) 4 { 5 if($n%2==0 && $n!=2) 6 return false; 7 8 $limit=floor($n/2); 9 10 for($i=3;$i<=$limit;$i+=2) 11 { 12 if($n%$i==0) 13 return false; 14 } 15 16 return true; 17 } 18 19 function PrimeNumbersFromInterval($a,$b) 20 { 21 for($i=$a;$i<=$b;$i++) 22 { 23 if(CheckIfPrime($i)==true) 24 echo $i.", "; 25 } 26 } 27 28 PrimeNumbersFromInterval(2,30); 29 ?>
Zwiń
|
|
Zajęcia IV
DecToBase
|
Program generuje wektory o zadanej długości takie, że każda współrzędna zmienia się z ustalonym krokiem od 0 do pewnej wartości maksymalnej.
Pokaż kod PHP
Plik: "alg_4_1.php"
1 <?php 2 /* 3 Program generuje wektory o zadanej długości $last takie, że każda współrzędna zmienia się od 0 do $max z krokiem $step 4 Przykład: 5 dla $last=3, $step=1, $max=2 otrzymujemy 6 1: 0,0,0, 2: 0,0,1, 3: 0,0,2, 4: 0,1,0, 5: 0,1,1, 7 6: 0,1,2, 7: 0,2,0, 8: 0,2,1, 9: 0,2,2, 10: 1,0,0, 8 11: 1,0,1, 12: 1,0,2, 13: 1,1,0, 14: 1,1,1, 15: 1,1,2, 9 16: 1,2,0, 17: 1,2,1, 18: 1,2,2, 19: 2,0,0, 20: 2,0,1, 10 21: 2,0,2, 22: 2,1,0, 23: 2,1,1, 24: 2,1,2, 25: 2,2,0, 11 26: 2,2,1, 27: 2,2,2, 12 */ 13 14 //=== parametry START === 15 $last=3; 16 $step=1; 17 $max=2; 18 //=== parametry STOP === 19 20 function incr($p,$s,$m,$a) 21 { 22 $a[$p]+=$s; 23 if($a[$p]>$m) 24 { 25 $a[$p]=0; 26 return TRUE; 27 } 28 29 return FALSE; 30 } 31 32 $array= array(); 33 $c=1; 34 35 for($i=1;$i<=$last;$i++) 36 $array[$i]=0; 37 38 do 39 { 40 echo $c.": "; 41 $c++; 42 for($i=1;$i<=$last;$i++) 43 echo $array[$i].","; 44 echo "<br>"; 45 $g++; 46 $pos=$last; 47 do 48 { 49 $carry=incr($pos,$step,$max,&$array); 50 if($carry==FALSE) 51 { 52 break; 53 } 54 $pos--; 55 } 56 while($pos>0); 57 } 58 while($pos>0); 59 ?>
Zwiń
|
|
SelSort
|
Sortowanie przez wybór.
Pokaż kod PHP
Plik: "alg_4_2.php"
1 <?php 2 3 $unsorted=array(3,5,1,7,2,11,4); 4 5 function FindMin(&$S,$start,$stop) 6 { 7 $min=$S[$start]; 8 $pos=$start; 9 for($i=$start+1;$i<=$stop;$i++) 10 { 11 if($S[$i]<$min) 12 { 13 $min=$S[$i]; 14 $pos=$i; 15 } 16 } 17 18 return $pos; 19 } 20 21 function SelSort(&$S,$n) 22 { 23 for($i=0;$i<$n;$i++) 24 { 25 $pos=FindMin($S,$i,$n-1); 26 $swap=$S[$i]; 27 $S[$i]=$S[$pos]; 28 $S[$pos]=$swap; 29 } 30 } 31 32 SelSort($unsorted,7); 33 34 for($i=0;$i<7;$i++) 35 { 36 echo $unsorted[$i].", "; 37 } 38 ?>
Zwiń
|
|
MulRec
|
Rekurencyjna wersja mnożenia.
Pokaż kod PHP
Plik: "alg_4_3.php"
1 <?php 2 /* pierwsza może być ujemna, druga musi być dodatnia */ 3 4 function MulRec($n,$m) 5 { 6 if($m==0) 7 return 0; 8 9 return $n+MulRec($n,$m-1); 10 } 11 12 echo MulRec(5,6); 13 ?>
Zwiń
|
|
FindMin
|
Rekurencyjna wersja wyszukiwania elementu najmniejszego (metoda typu ,,dziel i zwyciężaj'').
Pokaż kod PHP
Plik: "alg_4_4.php"
1 <?php 2 $sequence=array(3,5,9,7,2,11,4); 3 4 function FindMin(&$S,$s,$e) 5 { 6 $n=$e-$s+1; 7 if($n==1) 8 { 9 return $S[$s]; 10 } 11 $t=(int)(($s+$e)/2); 12 $l=FindMin($S,$s,$t); 13 $r=FindMin($S,$t+1,$e); 14 15 if($l<$r) 16 return $l; 17 18 return $r; 19 } 20 21 echo FindMin($sequence,0,6); 22 23 ?>
Zwiń
|
|
SimpleFill
|
Wypełnianie obsszaru ograniczonego krzywą (rekurencja).
Pokaż kod PHP
Plik: "alg_4_5.php"
1 <?php 2 3 $p=array(array(0,0,0,0,0,0,0,0), 4 array(0,0,0,0,0,0,0,0), 5 array(0,0,2,2,2,2,0,0), 6 array(0,0,2,0,0,2,0,0), 7 array(0,0,2,0,0,2,0,0), 8 array(0,0,2,2,2,2,0,0), 9 array(0,0,0,0,0,0,0,0) 10 ); 11 12 function PrintP(&$p,$n,$m) 13 { 14 echo "<pre>"; 15 for($i=0;$i<$n;$i++) 16 { 17 for($j=0;$j<$n;$j++) 18 { 19 if($p[$i][$j]==0) 20 echo "."; 21 else 22 if($p[$i][$j]==1) 23 echo "o"; 24 else 25 if($p[$i][$j]==2) 26 echo "X"; 27 } 28 echo "\n"; 29 } 30 echo "</pre>"; 31 } 32 33 function SimpleFill(&$A,$n,$m,$x,$y) 34 { 35 if($x>=0 && $x<$m && $y>=0 && $y<$n && $A[$x][$y]==0) 36 { 37 $A[$x][$y]=1; 38 SimpleFill($A,$n,$m,$x,$y-1); 39 SimpleFill($A,$n,$m,$x,$y+1); 40 41 SimpleFill($A,$n,$m,$x+1,$y-1); 42 SimpleFill($A,$n,$m,$x+1,$y); 43 SimpleFill($A,$n,$m,$x+1,$y+1); 44 45 SimpleFill($A,$n,$m,$x-1,$y-1); 46 SimpleFill($A,$n,$m,$x-1,$y); 47 SimpleFill($A,$n,$m,$x-1,$y+1); 48 } 49 } 50 51 echo "Before:<br>"; 52 PrintP($p,7,8); 53 SimpleFill($p,7,8,3,4); 54 echo "After:<br>"; 55 PrintP($p,7,8); 56 ?>
Zwiń
|
|
SumCols
|
Program obliczający w każdej kolumnie macierzy sumę n pierwszych wierszy i zapisujący wynika w ostatnim, n+1, wierszu.
Pokaż kod PHP
Plik: "alg_4_6.php"
1 <?php 2 $A=array(array(1,2,3),array(4,5,6),array(0,0,0)); 3 4 function SumCols(&$M,$n,$m) 5 { 6 for($i=0;$i<$m;$i++) 7 { 8 $suma=0; 9 for($j=0;$j<$n-1;$j++) 10 { 11 $suma+=$M[$j][$i]; 12 } 13 $M[$n-1][$i]=$suma; 14 } 15 } 16 17 function MatPrint(&$M,$n,$m) 18 { 19 for($i=0;$i<$n;$i++) 20 { 21 for($j=0;$j<$m;$j++) 22 { 23 echo $M[$i][$j]." "; 24 } 25 echo "<br>"; 26 } 27 } 28 29 MatPrint($A,3,3); 30 SumCols($A,3,3); 31 echo "---<br>"; 32 MatPrint($A,3,3); 33 ?>
Zwiń
|
|
Zajęcia V
MulStar
|
Funkcja mnożąca wszystkie elementy macierzy przez -2 i wypisująca symbol '*' jeśli liczba otrzymana w wyniku tego mnożenia jest większa od 10.
Pokaż kod PHP
Plik: "alg_5_1.php"
1 <?php 2 3 $M=array(array(1,2,3,4), 4 array(-5,-6,7,8), 5 array(9,10,-11,12) 6 ); 7 8 function MatPrint(&$M,$n,$m) 9 { 10 for($i=0;$i<$n;$i++) 11 { 12 for($j=0;$j<$m;$j++) 13 { 14 echo $M[$i][$j]." "; 15 } 16 echo "<br>"; 17 } 18 } 19 20 function MulStar(&$M,$n,$m) 21 { 22 for($i=0;$i<$n;$i++) 23 { 24 for($j=0;$j<$m;$j++) 25 { 26 $M[$i][$j]=$M[$i][$j]*(-2); 27 if($M[$i][$j]>10) 28 { 29 echo "*"; 30 } 31 } 32 } 33 } 34 35 MatPrint($M,3,4); 36 echo "<br>"; 37 MulStar($M,3,4); 38 echo "<br>"; 39 MatPrint($M,3,4); 40 ?>
Zwiń
|
|
Stars
|
Funkcja wypisująca n gwiazdek, przy czym zamiast co piątej wiazdki wypisywany jest jej numer kolejny.
Pokaż kod PHP
Plik: "alg_5_2.php"
1 <?php 2 3 function Stars($n) 4 { 5 for($i=1;$i<=$n;$i++) 6 { 7 if($i%5==0) 8 { 9 echo $i; 10 } 11 else 12 { 13 echo "*"; 14 } 15 } 16 } 17 18 Stars(30); 19 ?>
Zwiń
|
|
Frame
|
Funkcja wypełniająca podaną jako argument macierz kwadratową zerami, przy czy elementy w pierwszej i ostatniej kolumnie, oraz pierwszym i ostatnim wierszu wynoszą jeden.
Pokaż kod PHP
Plik: "alg_5_3.php"
1 <?php 2 3 $M=array(array(1,2,3,4), 4 array(5,6,7,8), 5 array(9,10,11,12), 6 array(13,14,15,16) 7 ); 8 9 function MatPrint(&$M,$n,$m) 10 { 11 for($i=0;$i<$n;$i++) 12 { 13 for($j=0;$j<$m;$j++) 14 { 15 echo $M[$i][$j]." "; 16 } 17 echo "<br>"; 18 } 19 } 20 21 function Frame(&$M,$n) 22 { 23 for($i=1;$i<$n-1;$i++) 24 { 25 for($j=1;$j<$n-1;$j++) 26 { 27 $M[$i][$j]=0; 28 } 29 } 30 31 for($i=0;$i<$n;$i++) 32 { 33 $M[$i][0]=1; 34 $M[$i][$n-1]=1; 35 $M[0][$i]=1; 36 $M[$n-1][$i]=1; 37 } 38 } 39 40 MatPrint($M,4,4); 41 echo "<br>"; 42 Frame($M,4); 43 echo "<br>"; 44 MatPrint($M,4,4); 45 ?>
Zwiń
|
|
FindMinDist
|
Funkcja sprawdzająca jaka jest najmniejsza odległość pomiędzy punktami rozmieszczonymi na osi OX a opisanym w tablicy.
Pokaż kod PHP
Plik: "alg_5_4.php"
1 <?php 2 $t=array(4,1,20,6,10,2); 3 4 function FindMinDist(&$t,$n) 5 { 6 $min=abs($t[0]-$t[1]); 7 for($i=0;$i<$n-1;$i++) 8 { 9 for($j=$i+1;$j<$n;$j++) 10 { 11 $d=abs($t[$i]-$t[$j]); 12 if($d<$min) 13 { 14 $min=$d; 15 } 16 } 17 } 18 return $min; 19 } 20 21 $d=FindMinDist($t,6); 22 echo $d; 23 ?>
Zwiń
|
|
IfSubstr
|
Funkcja wyszukująca podciągu w ciągu.
Pokaż kod PHP
Plik: "alg_5_5.php"
1 <?php 2 $str=array('a','a','a','l','o','o','a','a','l','b','o','o'); 3 $sub=array('a','l','b','o'); 4 5 function IfSubstr($str,$n,$sub,$m) 6 { 7 for($i=0;$i<$n-$m+1;$i++) 8 { 9 $yes=true; 10 11 for($j=0;$j<$m;$j++) 12 { 13 if($str[$i+$j]!=$sub[$j]) 14 { 15 $yes=false; 16 break; 17 } 18 } 19 20 if($yes==true) 21 { 22 return true; 23 } 24 } 25 return false; 26 } 27 28 if(IfSubstr($str,12,$sub,4)==true) 29 { 30 echo "TRUE"; 31 } 32 else 33 { 34 echo "FALSE"; 35 } 36 ?>
Zwiń
|
|
|