<?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=Next-mihai</id>
	<title>Next-mihai - 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=Next-mihai"/>
	<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Next-mihai&amp;action=history"/>
	<updated>2026-04-13T03:46:33Z</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=Next-mihai&amp;diff=17151&amp;oldid=prev</id>
		<title>Mihai: /* Temă */</title>
		<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Next-mihai&amp;diff=17151&amp;oldid=prev"/>
		<updated>2020-01-20T11:00:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Temă&lt;/span&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;
== Problema numchar ==&lt;br /&gt;
Iată o rezolvare posibilă la problema [http://varena.ro/problema/numchar numchar]:&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 main() {&lt;br /&gt;
  FILE *fin, *fout;&lt;br /&gt;
  int n, i, nl, nc;&lt;br /&gt;
  char c;&lt;br /&gt;
&lt;br /&gt;
  fin = fopen( &amp;quot;numchar.in&amp;quot;, &amp;quot;r&amp;quot; );&lt;br /&gt;
  fscanf( fin, &amp;quot;%d&amp;quot;, &amp;amp;n );&lt;br /&gt;
  fgetc( fin );&lt;br /&gt;
&lt;br /&gt;
  nl = nc = 0;&lt;br /&gt;
  for ( i = 0; i &amp;lt; n; i++ ) {&lt;br /&gt;
    c = fgetc( fin );&lt;br /&gt;
    if ( (c &amp;gt;= &amp;#039;a&amp;#039; &amp;amp;&amp;amp; c &amp;lt;= &amp;#039;z&amp;#039;) || (c &amp;gt;= &amp;#039;A&amp;#039; &amp;amp;&amp;amp; c &amp;lt;= &amp;#039;Z&amp;#039;) )&lt;br /&gt;
      nl++;&lt;br /&gt;
    else if ( c &amp;gt;= &amp;#039;0&amp;#039; &amp;amp;&amp;amp; c &amp;lt;= &amp;#039;9&amp;#039; )&lt;br /&gt;
      nc++;&lt;br /&gt;
  }&lt;br /&gt;
  fclose( fin );&lt;br /&gt;
&lt;br /&gt;
  fout = fopen( &amp;quot;numchar.out&amp;quot;, &amp;quot;w&amp;quot; );&lt;br /&gt;
  fprintf( fout, &amp;quot;%d %d&amp;quot;, nl, nc );&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;
De remarcat faptul că testarea dacă &amp;lt;tt&amp;gt;c&amp;lt;/tt&amp;gt; este cifră se face pe ramura &amp;lt;tt&amp;gt;else&amp;lt;/tt&amp;gt; a primului test, dacă este literă.&lt;br /&gt;
&lt;br /&gt;
= Lecție =&lt;br /&gt;
&lt;br /&gt;
A fost o lecție de lucru, în care am rezolvat la calculator o serie de probleme. Cei care nu au reușit să le termineîn timpul lecției, le vor considera temă și le vor rezolva acasă.&lt;br /&gt;
&lt;br /&gt;
== Problema alfanumeric ==&lt;br /&gt;
Iată o rezolvare posibilă la problema [http://varena.ro/problema/alfanumeric alfanumeric]:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  FILE *fin, *fout;&lt;br /&gt;
  int n, i, s;&lt;br /&gt;
  char c;&lt;br /&gt;
&lt;br /&gt;
  fin = fopen( &amp;quot;alfanumeric.in&amp;quot;, &amp;quot;r&amp;quot; );&lt;br /&gt;
  fscanf( fin, &amp;quot;%d&amp;quot;, &amp;amp;n );&lt;br /&gt;
  fgetc( fin );&lt;br /&gt;
&lt;br /&gt;
  fout = fopen( &amp;quot;alfanumeric.out&amp;quot;, &amp;quot;w&amp;quot; );&lt;br /&gt;
  s = 0;&lt;br /&gt;
  for ( i = 0; i &amp;lt; n; i++ ) {&lt;br /&gt;
    c = fgetc( fin );&lt;br /&gt;
    if ( c &amp;gt;= &amp;#039;a&amp;#039; &amp;amp;&amp;amp; c &amp;lt;= &amp;#039;z&amp;#039; ) {&lt;br /&gt;
      c = &amp;#039;A&amp;#039; + c - &amp;#039;a&amp;#039;;&lt;br /&gt;
      fputc( c, fout );&lt;br /&gt;
    } else if ( c &amp;gt;= &amp;#039;A&amp;#039; &amp;amp;&amp;amp; c &amp;lt;= &amp;#039;Z&amp;#039; )&lt;br /&gt;
      fputc( c, fout );&lt;br /&gt;
    else if ( c &amp;gt;= &amp;#039;0&amp;#039; &amp;amp;&amp;amp; c &amp;lt;= &amp;#039;9&amp;#039; )&lt;br /&gt;
      s = s + c - &amp;#039;0&amp;#039;;&lt;br /&gt;
    fgetc( fin ); // elimina spatiul dintre caractere&lt;br /&gt;
  }&lt;br /&gt;
  fclose( fin );&lt;br /&gt;
&lt;br /&gt;
  fprintf( fout, &amp;quot;\n%d&amp;quot;, s );&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;
De remarcat că cele trei cazuri, literă mică, literă mare sau cifra se vor înlănțui pe ramurile &amp;lt;tt&amp;gt;else&amp;lt;/tt&amp;gt; ale &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;-urilor respective. Nu uitați să citiți și caracterul spațiu dintre caractere.&lt;br /&gt;
&lt;br /&gt;
== Plusminus ==&lt;br /&gt;
Problema [http://varena.ro/problema/plusminus plusminus]&lt;br /&gt;
&lt;br /&gt;
Această problemă are o rezolvare elegantă dacă, în loc să citim cîte o linie, așa cum am fi tentați (adică un număr, un spațiu, un semn și finalul de linie \n), vom despărți intrarea astfel:&lt;br /&gt;
&lt;br /&gt;
* Primul număr din secvență&lt;br /&gt;
* spațiu, semn, \n, încă un număr&lt;br /&gt;
* spațiu, semn, \n, încă un număr&lt;br /&gt;
...&lt;br /&gt;
* spațiu, semn, \n, încă un număr&lt;br /&gt;
* \n final (ultima linie are doar un număr și un \n)&lt;br /&gt;
&lt;br /&gt;
Astfel, vom citi primul număr și încă un caracter. Cîtă vreme acel caracter este spațiu, continuăm bucla. Ne oprim cînd dăm de \n. Astfel evităm să citim incorect caractere după \n, cum se întîmplă în soluțiile unora din voi.&lt;br /&gt;
&lt;br /&gt;
Iată o soluție bazată pe aceste idei:&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 main() {&lt;br /&gt;
  FILE *fin, *fout;&lt;br /&gt;
  int n, s;&lt;br /&gt;
  char c;&lt;br /&gt;
&lt;br /&gt;
  s = 0;&lt;br /&gt;
  fin = fopen( &amp;quot;plusminus.in&amp;quot;, &amp;quot;r&amp;quot; );&lt;br /&gt;
  fscanf( fin, &amp;quot;%d&amp;quot;, &amp;amp;s );&lt;br /&gt;
  c = fgetc( fin );&lt;br /&gt;
  while ( c == &amp;#039; &amp;#039; ) {&lt;br /&gt;
    c = fgetc( fin );&lt;br /&gt;
    fscanf( fin, &amp;quot;%d&amp;quot;, &amp;amp;n );&lt;br /&gt;
    if ( c == &amp;#039;+&amp;#039; )&lt;br /&gt;
      s = s + n;&lt;br /&gt;
    else&lt;br /&gt;
      s = s - n;&lt;br /&gt;
    c = fgetc( fin );&lt;br /&gt;
  }&lt;br /&gt;
  fclose( fin );&lt;br /&gt;
&lt;br /&gt;
  fout = fopen( &amp;quot;plusminus.out&amp;quot;, &amp;quot;w&amp;quot; );&lt;br /&gt;
  fprintf( fout, &amp;quot;%d&amp;quot;, s );&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;
== Problema cezar ==&lt;br /&gt;
Problema [http://varena.ro/problema/cezar cezar] este o problemă didactică. Se poate rezolva cu o serie de condiții, corect ordonate. Cu toate acestea, o soluție elegantă ar fi să evităm folosirea condițiilor și să ne folosim doar de calcule. Reamintesc că operația modulo este una foarte importantă și ajută în multe situații când trebuie să parcurgem circular un șir. În cazul de față, trebuie să știm să ne întoarcem la prima literă a alfabetului când am ajuns la ultima, z. În felul de acesta, folosim doar calcule.&lt;br /&gt;
&lt;br /&gt;
Iată o posibilă soluție:&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 main() {&lt;br /&gt;
  FILE *fin, *fout;&lt;br /&gt;
  char c;&lt;br /&gt;
&lt;br /&gt;
  fin = fopen( &amp;quot;cezar.in&amp;quot;, &amp;quot;r&amp;quot; );&lt;br /&gt;
  fout = fopen( &amp;quot;cezar.out&amp;quot;, &amp;quot;w&amp;quot; );&lt;br /&gt;
  c = fgetc( fin );&lt;br /&gt;
  while ( c != &amp;#039;\n&amp;#039; ) {&lt;br /&gt;
    c = &amp;#039;a&amp;#039; + (c - &amp;#039;a&amp;#039; + 1) % 26;&lt;br /&gt;
    fputc( c, fout );&lt;br /&gt;
    c = fgetc( fin );&lt;br /&gt;
  }&lt;br /&gt;
  fclose( fin );&lt;br /&gt;
&lt;br /&gt;
  fputc( &amp;#039;\n&amp;#039;, fout );&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;
[http://varena.ro/runda/2020-01-19-clasa-5-tema-22 Tema 22] să se rezolve următoarele probleme (program C  trimis la vianuarena). Tema constă din exercițiile din clasă plus încă trei exerciții:&lt;br /&gt;
* [http://varena.ro/problema/fgetc fgetc]&lt;br /&gt;
* [http://varena.ro/problema/sumacifre sumacifre]&lt;br /&gt;
* [http://varena.ro/problema/cezark cezark]&lt;br /&gt;
* [http://varena.ro/problema/antiterra antiterra]&lt;br /&gt;
* [http://varena.ro/problema/cuvinte cuvinte]&lt;br /&gt;
* [http://varena.ro/problema/numere1 numere1]&lt;br /&gt;
&lt;br /&gt;
Rezolvări aici [http://solpedia.francu.com/wiki/index.php/Clasa_a_V-a_lec%C8%9Bia_19_-_14_dec_2017]&lt;/div&gt;</summary>
		<author><name>Mihai</name></author>
	</entry>
</feed>