<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dawid Pośliński &#187; matematyka</title>
	<atom:link href="http://blog.poslinski.net/tag/matematyka/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.poslinski.net</link>
	<description>Code is poetry.</description>
	<lastBuildDate>Mon, 06 Sep 2010 18:23:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>PHP: Szukamy sumy i NWD</title>
		<link>http://blog.poslinski.net/php-szukamy-sumy-i-nwd/</link>
		<comments>http://blog.poslinski.net/php-szukamy-sumy-i-nwd/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 19:47:38 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[algorytm]]></category>
		<category><![CDATA[gotowe rozwiązania]]></category>
		<category><![CDATA[matematyka]]></category>
		<category><![CDATA[programowanie]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=103</guid>
		<description><![CDATA[Poproszono mnie o napisanie, prostej aplikacji, której działanie miało by polegać na analizie pliku wejściowego, którego linia miała by następującą składnie &#8222;liczba1 liczba2 &#8230; liczbaN&#8221;, z dowolną ilością linii o właśnie takiej składni. Celem aplikacji było by zsumowanie wszystkich składników danej linii i zapisanie sum w analogicznym pliku wyjściowym suma.txt, lub znalezienie NWD składników z [...]]]></description>
			<content:encoded><![CDATA[<p>Poproszono mnie o napisanie, prostej aplikacji, której działanie miało by polegać na analizie pliku wejściowego, którego linia miała by następującą składnie &#8222;liczba1 liczba2 &#8230; liczbaN&#8221;, z dowolną ilością linii o właśnie takiej składni. Celem aplikacji było by zsumowanie wszystkich składników danej linii i zapisanie sum w analogicznym pliku wyjściowym suma.txt, lub znalezienie NWD składników z każdej linii i również zapisanie ich w analogicznym pliku nwd.txt.</p>
<p><span id="more-103"></span></p>
<h2>Opis rozwiązania</h2>
<p>Problem nie jest skomplikowany, a jego rozwiązanie sprowadza się do kilku lini kodu.</p>
<p>W moim przypadku, pobrałem całą zawartość pliku input.txt, następnie korzystając z funkcją explode, zapisałem kolejne linie pliku do tablicy, oraz kolejne liczby z tablicy, oddzielone spacją zapisałem do tablicy dwuwymiarowej. Tym prostym sposobem, otrzymałem tablicę dwuwymiarową (ilość liczb w wierszu, może być różna) wyglądającą mniej, więcej tak:</p>
<p>linia1liczba1 linia1liczba2 &#8230; linia1liczbaN</p>
<p>linia2liczba1 linia2liczba2 &#8230; linia2liczbaN</p>
<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</p>
<p>liniaNliczba1 liniaNliczba2 &#8230; liniaNliczbaN</p>
<p>Następnie zastosowałem proste algorytmy, aby w tablicy suma i nwd, znalazły się poszukiwane przez nas wyniki, które omówione są w komentarzach do kodu.</p>
<p>Całość trafia do pliku wyjściowego, dla <strong>sumy</strong>:</p>
<p>suma1linii</p>
<p>suma2linii</p>
<p>&#8230;&#8230;&#8230;&#8230;&#8230;</p>
<p>sumaNlinii</p>
<p>oraz analogicznie dla <strong>NWD</strong>:</p>
<p>nwd1linii</p>
<p>nwd2linii</p>
<p>&#8230;&#8230;&#8230;&#8230;</p>
<p>nwd3linii</p>
<h2>Kod</h2>
<pre class="php" name="code">&lt;html&gt;&lt;head&gt;&lt;META http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;/head&gt;&lt;body&gt;

&lt;form method="post"&gt;
&lt;select name="tryb"&gt;
&lt;option value="suma"&gt; Zsumuj wiersze&lt;/option&gt;
&lt;option value="nwd"&gt; Znajdź największy wspólny dzielnik w wierszach&lt;/option&gt;
&lt;/select&gt;
&lt;input type="submit" value="Start" /&gt;
&lt;/form&gt;

&lt;?PHP if (file_exists("input.txt")) { ?&gt;
&lt;a href="input.txt"&gt;input.txt&lt;/a&gt;
&lt;?PHP } ?&gt;
&lt;?PHP if (file_exists("suma.txt")) { ?&gt;
&lt;a href="suma.txt"&gt;suma.txt&lt;/a&gt;
&lt;?PHP } ?&gt;
&lt;?PHP if (file_exists("nwd.txt")) { ?&gt;
&lt;a href="nwd.txt"&gt;nwd.txt&lt;/a&gt;
&lt;?PHP } ?&gt;

&lt;?PHP

$rows_array = explode("\n",file_get_contents("input.txt")); // powstanie nam tablica z wierwszami z pliku input.txt

foreach ($rows_array as $key =&gt; $value)
{
$row[$key] = explode(" ",$value); // Powstanie tablica 2 wymiarowa ( 1szy wymiar - numer wiersza, 2gi wymiar - element wiersza )
}

for ( $i=0; $i &lt; count($row); $i++ ) // będziemy sprawdzać kolejne wiersze
{
// NWD
// przykład algorytmu NWD: bierzemy dowolny element z wiersza i sprawdzamy czy nie jest dzielnnikiem,
// jeżeli nie jest schodzimy w dół o jeden, aż znajdziemy dzielenie wszystkich elementów bez reszty ( dzielenie modulo )
$nwd[$i] = $row[$i][0];

$szukam_dzielnik = true;

while ( $szukam_dzielnik )
{
$wynik = 0;

for ( $b=0; $b &lt; count($row[$i]); $b++ )
{
$wynik += ($row[$i][$b] % $nwd[$i]);
}

$nwd[$i]--; // dekrementacja

if ( $wynik == 0 ) // brak dzielenia z reszty - znaleźliśmy NWD szukając od góry
{
$szukam_dzielnik = false;
$nwd[$i]++;
}
}

// SUMA
for ( $b=0; $b &lt; count($row[$i]); $b++ )
{
$sum[$i] += $row[$i][$b]; // tablica suma będzie miała sumę kolejnych wierszy
}
}

if ( $_POST['tryb'] == "suma" )
{
$wynik = "";
foreach ( $sum as $value )
{
$wynik .= $value."\n"; // Z Tablicy sum wpisujemy do zmiennej wynik kolejne wiersze zakańczając je znakiem nowej lini
}

// ZAPIS DO PLIKU - WYMAGA UPRAWNIEŃ NA SERWERZE CHMOD 666 lub 777 gdyby nie działało
file_put_contents("suma.txt",$wynik);
// KONIEC ZAPISU
}

if ( $_POST['tryb'] == "nwd" )
{
$wynik = "";
foreach ( $nwd as $value )
{
$wynik .= $value."\n"; // Z Tablicy sum wpisujemy do zmiennej wynik kolejne wiersze zakańczając je znakiem nowej lini
}

// ZAPIS DO PLIKU - WYMAGA UPRAWNIEŃ NA SERWERZE CHMOD 666 lub 777 gdyby nie działało
file_put_contents("nwd.txt",$wynik);
// KONIEC ZAPISU
}

?&gt;

&lt;/body&gt;&lt;/html&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/php-szukamy-sumy-i-nwd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
