👤
Skrillex
a fost răspuns

2. Se consideră algoritmul alăturat descris in pseudocod.
S-a notat cu x%y restul împărţirii numărului natural x la
numărul natural nenul y.
a) Scrieţi care este valoarea afişată dacă pentru a şi n se
citesc numerele a=12 şi n=10.
b) Dacă pentru a se citeşte valoarea 32, scrieţi un număr
natural care poate fi citit pentru variabila n, astfel încât,
în urma executării algoritmului, să se afişeze 34.
c) Scrieţi programul C/C++ corespunzător algoritmului
dat.
d) Scrieţi în pseudocod, un algoritm echivalent cu cel dat,
în care să nu se utilizeze structuri repetitive sau
subprograme recursive.
citeşte a,n
(numere naturale)
j=3
┌pentru i=1,n execută
│┌dacă i%2=0 atunci
││ a=a-j
││altfel
││ a=a+j
│└■
│ j=7-j
└■
scrie a


Răspuns :

Algoritmul respectiv aduna o valoare de 3 la fiecare iteratie impara(cand i este impar se duce pe ramura de altfel si este intotdeauna 3) si scade o valoare de 4 la fiecare iteratie para. Stim asta pentru ca pe iteratiile pare j=3 devine j=7-3=4 iar pe urmatoarea iteratie impara cand j porneste cu valoarea 4 va deveni j=7-4=3. deci din nou devine valoarea 3 pentru urmatoarea iteratie impara.

Astfel pentru fiecare pereche de iteratii de tipul (impar,par) facem operatiile: a=a-3+4=a-1. deci se scade o unitate pentru fiecare unitate para.
Pentru n par, avem n/2 perechi(adica numere de la 1 la n) a=a-n/2.
Daca n este impar, atunci vor fi (n-1) perechi si mai ramane pentru valoarea de iteratie impara n se mai aduna un 3, deci a=a-(n-1)/2+3
a) a=12,n=10, daca n este par, atunci a devine a=12-10/2=12-5=7
b)vedem ca pornim cu a=32 si trebuie sa ajungem la 34. Daca n ar fi par, atunci am obtine o valoare mai mica pentru ca doar scadem o valoare. Deci stim ca n este impar, si atunci formula este
a=32-(n-1)/2+3=34 adica (n-1)/2=1 adica n=3.
c)
#include <iostream>
using namespace std;

int main(){
int a,n,i,j;
cin>>a>>n;
j=3;
for(i=1;i<=n;i++){
if(i%2==0){
a=a-j;
}
else{
a=a+j;
}
j=7-j;
}
cout<<a;
return 0;

d) Am scris mai sus care este algoritmul general
Fara structura repetitiva ar fi atunci
[x/y] este catul impartirii lui x la y

citeste a,n;
daca n%2=0 atunci
     a=a-[n/2];
altfel
     a=a-[(n-1)/2]+3;

scrie a