<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.algopedia.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Clasa_a_V-a_lec%C8%9Bia_6_S19</id>
	<title>Clasa a V-a lecția 6 S19 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.algopedia.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Clasa_a_V-a_lec%C8%9Bia_6_S19"/>
	<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Clasa_a_V-a_lec%C8%9Bia_6_S19&amp;action=history"/>
	<updated>2026-04-13T16:38:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.algopedia.ro/wiki/index.php?title=Clasa_a_V-a_lec%C8%9Bia_6_S19&amp;diff=14567&amp;oldid=prev</id>
		<title>Bella at 14:00, 28 February 2018</title>
		<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Clasa_a_V-a_lec%C8%9Bia_6_S19&amp;diff=14567&amp;oldid=prev"/>
		<updated>2018-02-28T14:00:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Tema - rezolvări =&lt;br /&gt;
&lt;br /&gt;
= Lecție =&lt;br /&gt;
Parcurgerea circulara a unui vector. &lt;br /&gt;
Pana acum am folosit vectorii pentru a memora elementele ce se afla intr-un sir liniar, precum un sir de numere. Exista si situatii in care trebuie sa memoram date pentru elemente ce se afla intr-un cerc, ceea ce inseamna ca, daca ne-am imagina un prim element din cercul respectiv, ultimul element ar fi vecin cu acesta. Pentru a memora astfel de date, vom folosi tot un vector ca pana acum, insa va trebui sa tinem const ca ultimul element, v[n-1] este vecin cu primul element, v[0].&lt;br /&gt;
&lt;br /&gt;
== Parcurgerea unui vector circular ==&lt;br /&gt;
Presupunem ca avem n copii intr-un cerc si ca dorim sa aflam care este al k-lea copil, incepand numaratoarea de la primul copil, unde poate fi si mai mare decat n.&lt;br /&gt;
- varianta simulare, pas cu pas&lt;br /&gt;
- varianta cu k%n&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Căutarea unui element în vector după poziţia k ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exercițiu: se citesc &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;e&amp;lt;/tt&amp;gt; și &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; numere naturale, iar apoi se citesc &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; numere. Să se spună prima poziție după poziția &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; pe care apare elementul e. Dacă ajungem la ultima poziție, &amp;lt;tt&amp;gt;n-1&amp;lt;/tt&amp;gt;, avem voie să începem din nou cu zero, deoarece se consideră că cele &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; numere sînt așezate în cerc. Dacă elementul &amp;lt;tt&amp;gt;e&amp;lt;/tt&amp;gt; nu se află în vector vom afișa poziția &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; (în afara vectorului).&lt;br /&gt;
&lt;br /&gt;
Soluție: vom citi cele &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; valori într-un vector, iar apoi vom porni de la poziția &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; și vom înainta fie pînă ce găsim elementul &amp;lt;tt&amp;gt;e&amp;lt;/tt&amp;gt;, fie pînă cînd ajungem la poziția &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; din nou. Avansul indicelui &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt; se va face modulo &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;. Iată soluția:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int v[100];&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  FILE *fin, *fout;&lt;br /&gt;
  int n, i, e, k;&lt;br /&gt;
&lt;br /&gt;
  fin = fopen( &amp;quot;cautarek.in&amp;quot;, &amp;quot;r&amp;quot; );&lt;br /&gt;
  fscanf( fin, &amp;quot;%d%d%d&amp;quot;, &amp;amp;n, &amp;amp;e, &amp;amp;k );&lt;br /&gt;
  for ( i = 0; i &amp;lt; n; i++ )&lt;br /&gt;
    fscanf( fin, &amp;quot;%d&amp;quot;, &amp;amp;v[i] );&lt;br /&gt;
  fclose( fin );&lt;br /&gt;
&lt;br /&gt;
  i = k;&lt;br /&gt;
  if ( v[i] != e ) {               // daca pe pozitia k nu avem e&lt;br /&gt;
    i = (i + 1) % n;               // avansam indicele i&lt;br /&gt;
    while ( i != k &amp;amp;&amp;amp; v[i] != e )  // cita vreme nu ne-am intors la k&lt;br /&gt;
      i = (i + 1) % n;             // si v[i] diferit de e, avansam i&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( v[i] != e )                 // daca nu am gasit e, setam i pe n&lt;br /&gt;
    i = n;&lt;br /&gt;
  fout = fopen( &amp;quot;cautarek.out&amp;quot;, &amp;quot;w&amp;quot; );&lt;br /&gt;
  fprintf( fout, &amp;quot;%d&amp;quot;, i );&lt;br /&gt;
  fclose( fout );&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observăm că pentru a începe din nou de la zero atunci cînd &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt; devine &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; este deajuns să aplicăm funcția &amp;lt;tt&amp;gt;%n&amp;lt;/tt&amp;gt; lui &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt;. Acest lucru este posibil tocmai pentru că indicii vectorului &amp;lt;tt&amp;gt;v&amp;lt;/tt&amp;gt; încep de la &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
//VARIANTA ISA&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int v[100];&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  FILE *fin, *fout;&lt;br /&gt;
  int n, i, e, k;&lt;br /&gt;
&lt;br /&gt;
  fin = fopen( &amp;quot;cautarek.in&amp;quot;, &amp;quot;r&amp;quot; );&lt;br /&gt;
  fscanf( fin, &amp;quot;%d%d%d&amp;quot;, &amp;amp;n, &amp;amp;e, &amp;amp;k );&lt;br /&gt;
  for ( i = 0; i &amp;lt; n; i++ )&lt;br /&gt;
    fscanf( fin, &amp;quot;%d&amp;quot;, &amp;amp;v[i] );&lt;br /&gt;
  fclose( fin );&lt;br /&gt;
&lt;br /&gt;
  i = k;&lt;br /&gt;
  while ( i &amp;lt; n + k &amp;amp;&amp;amp; v[i % n] != e )  // cita vreme nu am parcurs toate cele n elemente&lt;br /&gt;
      i++;                              // avansam i&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( v[i] != e )                 // daca nu am gasit e, setam i pe n&lt;br /&gt;
    i = n;&lt;br /&gt;
  fout = fopen( &amp;quot;cautarek.out&amp;quot;, &amp;quot;w&amp;quot; );&lt;br /&gt;
  fprintf( fout, &amp;quot;%d&amp;quot;, i );&lt;br /&gt;
  fclose( fout );&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Temă =&lt;br /&gt;
Rezolvați următoarele probleme:&lt;br /&gt;
&lt;br /&gt;
* [http://varena.ro/problema/felinare felinare] dată la ONI 2008 clasa a 5-a&lt;br /&gt;
* [http://varena.ro/problema/culori1 culori1] dată la ONI 2012 clasa a 5-a&lt;br /&gt;
* [http://varena.ro/problema/panglica panglica] dată la ONI 2002 clasa a 5-a&lt;br /&gt;
* [http://varena.ro/problema/defrag defrag] dată la OJI 2015 clasa a 9-a : ( pentru superavansati - Parcurgere circulara a liniilor unei matrice )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rezolvări aici [http://solpedia.francu.com/wiki/index.php/Clasa_a_V-a_lec%C8%9Bia_24_-_10_feb_2015]&lt;/div&gt;</summary>
		<author><name>Bella</name></author>
	</entry>
</feed>