Jump to content

Probleme Pseudocod C++


Go to solution Solved by Lus,

Recommended Posts

  • Moderators
Posted

Le-am făcut bine? :D

 

1. Se citeşte un număr natural n. Să se verifice dacă inversul său este divizibil cu 8 şi să se afişeze un mesaj corespunzător.

 



citeşte n
aux <- n
inv <- 0
-cât timp (aux!=0) execută
|   inv <- inv*10 + aux
|   aux <- aux/10
-[#]
-dacă inv%8=0 atunci
|   scrie "numărul citit este divizibil cu 8"
|altfel
|   scrie "numărul nu este divizibil cu 8"
-[#]
 

2. Se cunosc cele n note ale elevilor clasei a IX-a A la informatică. Scrieţi un program care afişează nota minimă şi de câte ori apare.

 



citeşte n
min <- 0
aux <- n
nr <- 0
-pentru i<- 1,n execută
|   -cât timp (aux!=0) execută
|   |   -dacă aux < min atunci
|   |   |   min <- aux
|   |   |altfel
|   |   |   nr <- nr+1
|   |   -[#]
|   |   aux <- aux/10
|   -[#]
-[#]
scrie aux, nr
 

3. Se citeşte un număr natural n. Să se afişeze cifra maximă şi de câte ori apare

 



citeşte n
max <- 0
aux <- n/10
nr <- 0
-cât timp (aux!=0) execută
|   -dacă aux > max atunci
|   |   max <- aux
|   |altfel
|   |   nr <- nr+1
|   -[#]
|   aux <- aux/10
-[#]
scrie max, nr
 

4. e citesc n numere naturale. Să se numere câte dintre ele au suma cifrelor un număr par

 

 



citeşte n
s <- 0
nr <- 0
-pentru i< 1,n execută
|   -cât timp (n!=0) execută
|   |   s <- s + n
|   |   n <- n/10
|   -[#]
|   -dacă s%2 = 0 atunci
|   |   nr <- nr+1
|   -[#]
-[#]
scrie nr
 

5. Să se afişeze numerele din intervalul [a,b] care sunt palindrom, cu a şi b două numere naturale citite de la tastatură.

 





citeşte a
citeşte b
inv <- 0
nr <- 0
-pentru i<- a,b execută
|   aux <- i
|   -cât timp (i!=0) execută
|   |   inv <- inv*10 + aux
|   |   aux <- aux/10
|   -[#]
|   -dacă i=inv atunci
|   |   scrie i
|   -[#]
-[#]

  • Solution
Posted

Pentru prima, vezi ca nu ai facut inversul. Aux nu pleaca cu n, lui aux ii dai ultima cifra a lui n, si faci asta cat timp mai ai cifre in n, dupa care verifici daca se imparte la 8.

 

A doua nu-mi dau seama, dar vezi ca min pleaca cu 10 (10 e nota maxima), si n reprezinta numarul de note, nu nota in sine.
 
A 3a e gresit iar. Iti iei un max<-0, nr<-1, c<-0; trebuie sa scoti ultima cifra din n, o compari cu max, daca e mai mare, max<-c; n<-n/10; nr<-1 (aici ii dai 1 pentru ca, daca ultima cifra sa zicem ca e 0, atunci va fi egal cu max si va merge pe altfel, deci nr creste; daca urmatoarea cifra e mai mare ca max, nr o sa fie 2 deci va trebui sa plecam cu el iar 1); , altfel daca max=c cresti nr si n<-n/10; altfel n<-n/10.
Afisezi si cam asta e.
 
Ultima, aceeasi greseala. Ultima cifra inseamna numar%10 nu numarul insine (deci inv<-nv*10+aux%10). Si vezi ca tu verifici pe aux acolo nu pe i (pe cat timp).
 
 
 
 
 
  • Upvote 1

fWy1P.gif

 

  • Moderators
Posted

1. Se citesc n numere naturale. Să se afişeze cele care sunt perfecte (un nr. este perfect dacă este egal cu suma divizorilor săi fără el însuşi).

 natural n, x, s, d, i
 citeşte n
 s <- 0
┌pentru i <- 1,n execută
|   citeşte x
|  ┌pentru d <- 1,x/2 execută
|  |  ┌dacă x%d=0 atunci
|  |  |   s <- s+d
|  |  └■
|  └■
|  ┌dacă x=s atunci
|  |   scrie x
|  └■
└■  

2) Se citesc n numere naturale. Să se calculeze suma celor care au exact 3 divizori proprii.

 

 natural n, i, s, d, p
 citeşte n
 p <- 0
 s <- 0
┌pentru i <- 1,n execută
|   citeşte x
|  ┌pentru d <- 2,x/2 execută
|  |  ┌dacă x%d=0 atunci
|  |  |   s <- s+d
|  |  └■
|  └■
|  ┌dacă s=3 atunci
|  |   p <- p+x
|  └■
└■
 scrie p

3) să se afişeze numărul divizorilor fiecărui număr din intervalul [a,b]

 

 

 natural a, b, s, d, n, i
 citeşte a
 citeşte b
 p <- 0
 s <- 0
┌pentru x <- a,b execută
|  ┌pentru d <- 1,x execută
|  |  ┌dacă x%d=0 atunci
|  |  |   s <- s+1
|  |  └■
|  └■
|   scrie s
└■ 

Le-am făcut bine?

Posted

1.

#include<iostream.h>
      int main()
      {int n, i=1, d, x, s=0;
      cin>>n;
      while(i<=n){ cin>>x;
                   for(d=1;d<=x/2;d++) if(x%d==0) s=s+d;
                   if(s==x) cout<<x<<" ";
                   i++;
                   s=0;
                   }
}

2.

#include<iostream.h>
int main()
{int n, nr=0, i=1, d=2, x, s=0;
cin>>n;
while(i<=n){ cin>>x;
            while(d<=x/2) {
                            if(x%d==0) nr++;
                            d++;
                            }
            if(nr==3) s=s+x;
            i++;
            d=2;
            nr=0;
           }
cout<<s;
}
 

 

3. Nu trebuie sa faci suma, trebuie sa numeri divizorii fiecarui numar din interval si sa afizes numarul. Arata cam asa, cred:

 

 

#include<iostream.h>
int main()
{int a, b, i, d=1, nr=0;
cin>>a>>b;
for(i=a;i<=b;i++){ for(d=1;d<=i;d++) if(i%d==0) nr++;
                   cout<<nr<<" ";
                   nr=0;
                  }
}

Sunt cam obosit, dar sper sa fie bune. Le transformi tu in pseudo.

  • Upvote 1

fWy1P.gif

 

Posted

Da, God, am vazut greseala intr-un final si am corectat, am uitat sa intorc nr cu 0, pe foaie imi iesea pentru ca in capul meu tot pleca cu 0.

Da, fa-l in pseudocod.

cin = citeste

while = cat timp

daca = if

cout = scrie

= este atribuire

== este =

++ inseamna ca cresti cu 1.

  • Upvote 1

fWy1P.gif

 

  • 3 weeks later...
  • Moderators
Posted

Să se transforme în C++:

 citeşe x, z (numere naturale)
 y<-0
┌repetă
| y<-y*10+x
| x<-[x/100]
└până când x=0
┌cât timp y*z>0 şi y=z execută
| y<-[y/10]
| z<-[z/10]
└■
┌dacă y+z=0 atunci
| scrie 1
|altfel
| scrie 0
└■

Ce am făcut eu, arată cam aşa:

#include <iostream>

using namespace std;

int main()
{
    unsigned x,z,y;
    cout<<"x=";
    cin>>x;
    cout<<"z=";
    cin>>z;
    while (x==0)
    {
        y=y*10+x;
        x=x/100;
    }
    while (y*z==0 and y==z)
    {
        y=y/10;
        z=z/10;
    }
    if (y+z==0){
        cout<<"1";}
    else{
        cout<<"0";}
    return 0;
}
 

am făcut bine?

Posted

Pe primul while pune x!=0, pentru ca tu in pseudocod ai 'pana cand x=0'.

PS: Nu-i nevoie sa pui acolade cand executa doar o chestie. (pe if acolo, pe else, si deobicei)

  • Upvote 1

fWy1P.gif

 

Posted

Să se transforme în C++:

 citeşe x, z (numere naturale)
 y<-0
┌repetă
| y<-y*10+x
| x<-[x/100]
└până când x=0
┌cât timp y*z>0 şi y=z execută
| y<-[y/10]
| z<-[z/10]
└■
┌dacă y+z=0 atunci
| scrie 1
|altfel
| scrie 0
└■

Ce am făcut eu, arată cam aşa:

#include <iostream>

using namespace std;

int main()
{
    unsigned x,z,y;
    cout<<"x=";
    cin>>x;
    cout<<"z=";
    cin>>z;
    while (x==0)
    {
        y=y*10+x;
        x=x/100;
    }
    while (y*z==0 and y==z)
    {
        y=y/10;
        z=z/10;
    }
    if (y+z==0){
        cout<<"1";}
    else{
        cout<<"0";}
    return 0;
}
 

am făcut bine?

 

 

dupa cin>>z;

 

y=0;

do{

{

y=y*10+x;

x=x/100;

}

while (x==0);

 

 

while (y*z==0 && y==z) {

y=y/10;

z=z/10;

}

if (y+z == 0){

cout<<"1";

}

else{

cout<<"0";

}

return 0;

}

  • Upvote 1
  • 2 weeks later...
  • Moderators
Posted

2. Se cunosc cele n note ale elevilor clasei a IX-a A la informatică. Scrieţi un program care afişează nota minimă şi de câte ori apare.

 

Am facut:

 

#include <iostream>
using namespace std;
int main()
{
    unsigned n,x,i,max,nr;
    cout<<"Introduceti numarul de note: ";
    cin>>n;
    nr=-2;
    max=0;
    for (i=1;i<=n;i++)
    {
        cout<<"Introduceti o nota: ";
        cin>>x;
        if (x>max)
        {
            nr=nr+1;
            max=x;
        }
    }
    cout<<"Nota maxima este "<<max<<" si apare de "<<nr<<" ori.";
    return 0;
}
 

L-am testat, e bun, insa mi se pare cam pompos, din cauza ca lui nr a trebuit sa ii dau valoarea -2. Se poate ceva mai simplu? :)

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.