Informatică, întrebare adresată de andriesboss92, 8 ani în urmă

Salut. Se da exercitiul din poza.

As dori o explicatie exacta a secventei incadrata in chenarul rosu cu raspunsul aferent problemei.

Multumesc anticipat!

Anexe:

Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

#include <iostream>

#include <cmath>

using namespace std;

int main()

{

   int n, d, q, f;

   cin >> n;

   d=2; q=(int)sqrt(n);

   f=1;

   while ((d<=q)&&f)

   {

       f=f&&(n%d); d=d+1;

       cout << f << " " << d << "\n";

   }

}

Explicație:

Salut! Ca să pricep şi eu ce se întâmplă am creat codul de mai sus şi pentru a înţelege mai bine am adăugat nişte paranteze să se înţeleagă mai bine prioritatea operaţiilor. Răspunsul e că funcţia determină dacă numărul trimis în funcţie e prim sau nu.

Cred prima ce trebuie explicată este

while ((d<=q)&&f)

vezi am adăugat paranteze, deoarece prima operaţie se face &&, care este operaţie logică cu rezultat 0 (pentru false) şi 1 (pentru true).

d este priceput ca divizor şi valoarea din start este 2, iar q este radacina pătrată din n. Fie n=15, adunci d<=q este adevarat, adică 1, şi f=1, deci condiţia lui while este adevărată, se intră în while.

 Am ajuns la instrucţiunea pe care ai conturat+o în roşu

f=f&&(n%d);

Aici avem un ŞI logic dintre f şi restul n%d

f era 1, iar dacă restul este 0 (adică d îl divide pe n, ce demonstrează că n nu e prim dacă s-a găsit un divizor până la rădăcina pătrată din el ) atunci rezultatul acestei operaţii va fi 0, care va fi primit de f, şi pentru care condiţia lui while va fi falsă şi evident return f; va întoarce 0, adică n nu e prim

Sper că am fost explicit... Paşte fericit!


andriesboss92: Îți mulțumesc mult pentru explicație! Paște fericit!
Alte întrebări interesante