Fişierul număr.in conţine pe prima linie un număr natural n, format din cel mult 8 cifre iar cel puţin o cifră este impară.
Se consideră subprogramele:
• S1 cu doi parametri, a şi b, prin intermediul cărora primește două numere naturale formate fiecare din cel mult 8 cifre; subprogramul determină modificarea conţinutului celor doi parametri a și b prin eliminarea cifrei unităţilor numărului conţinut de parametrul a, şi mutarea ei la sfârşitul numărului conţinut de parametrul b, returnând prin intermediul parametrilor a şi b noile numere obţinute. De exemplu, pentru valorile 21134 şi 61 ale parametrilor a şi b, în urma executării subprogramului S1 valorile returnate prin intermediul parametrilor vor fi 2113 şi 614.
• S2 cu un singur parametru, k, prin intermediul căruia primeşte un număr natural ( k>1); subprogramul returnează numărul natural obţinut prin eliminarea fiecărei cifre pare din numărul k. De exemplu, pentru k=12345, subprogramul S2 va returna 135, iar pentru k=177 subprogramul S2 va returna 177.
Cerinţe:
a) Scrieţi definiţia completă a subprogramului S1;
b) Scrieţi definiţia completă a subprogramului S2;
c) Să se scrie un program Pascal/C/C++ care să citească din fişierul număr.in numărul n, iar apoi, folosind apeluri utile ale subprogramelor S1 şi S2, să afişeze pe ecran mesajul DA dacă numărul citit este un palindrom format doar din cifre impare. În caz contrar, va afișa mesajul NU.
Răspunsuri la întrebare
Răspuns de
4
#include <iostream>
#include <fstream>
int a,b,k;using namespace std;
void S1(int &a, int &b)///aici avem apel prin referinta, insemnand ca a si b vor pastra valorile la iesirea din functia S1
{
int c=a%10; ///atasam ultima cifra a lui a la b si ii taiem o unitate lui a;
a/=10;
b=b*10+c;
}
int S2(int k)
{ ///aici construim un nou numar doar cu cifrele impare ale lui k;
int nr=0;
int p=1;
while(k)
{
if(k%10%2==1)
{
nr=nr+(k%10)*p;
p=p*10;
}
k/=10;
}
return nr;
}
int main()
{
int x,y=0; /*citim din fisier pe x(sau n) si ii atribuim lui x valoarea functiei s2 iar apoi cat timp e dif de 0
ne folosim de functia s1 care practic face inversul lui a si il afisam pe y, pe invers */
ifstream f("numar.in");
f>>x;
f.close();
x=S2(x);
while(x)
S1(x,y);
cout<<y;
}
#include <fstream>
int a,b,k;using namespace std;
void S1(int &a, int &b)///aici avem apel prin referinta, insemnand ca a si b vor pastra valorile la iesirea din functia S1
{
int c=a%10; ///atasam ultima cifra a lui a la b si ii taiem o unitate lui a;
a/=10;
b=b*10+c;
}
int S2(int k)
{ ///aici construim un nou numar doar cu cifrele impare ale lui k;
int nr=0;
int p=1;
while(k)
{
if(k%10%2==1)
{
nr=nr+(k%10)*p;
p=p*10;
}
k/=10;
}
return nr;
}
int main()
{
int x,y=0; /*citim din fisier pe x(sau n) si ii atribuim lui x valoarea functiei s2 iar apoi cat timp e dif de 0
ne folosim de functia s1 care practic face inversul lui a si il afisam pe y, pe invers */
ifstream f("numar.in");
f>>x;
f.close();
x=S2(x);
while(x)
S1(x,y);
cout<<y;
}
Alte întrebări interesante
Engleza,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă