Jump to content
Sign in to follow this  
Courage

Probleme Pseudocod C++

Recommended Posts

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
|   -[#]
-[#]

Share this post


Link to post
Share on other sites

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).
 
 
 
 
 

fWy1P.gif

 

Share this post


Link to post
Share on other sites

Nu conteaza, linia inv <- inv*10 + aux tot gresita e. Asta nu e inversul, pur si simplu i-ai dat lui inv numarul aux.

 

 



fWy1P.gif

 

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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.


fWy1P.gif

 

Share this post


Link to post
Share on other sites

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.


fWy1P.gif

 

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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)


fWy1P.gif

 

Share this post


Link to post
Share on other sites

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;

}

Share this post


Link to post
Share on other sites

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? :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...