Se da un fisier text, care contine mai multe linii. Pe fiecare linie sunt numere de la 0 la 255.In C++;
Cerinte:
a.Fa o functie care sa returneze un array. Array-ul va fi format din numerele de pe pozitia centrala de pe fiecare linie;
b.Fa o functie care returneaza un array cu numerele prime, din array-ul descoperit la punctul ;
c.Fa o functie care transforma numerele prime descoperite la punctul in caractere ascii si returneaza un sir de caractere (cuvant) format din ele
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <math.h>
#include <fstream>
#include <string.h>
using namespace std;
int nrprime, nrcentru,a[10][10]={0};
char *transformare(int *p,int n)
{
char v[10],*p2;
for(unsigned int i=0; i<n; i++)
{v[i]= *p;
p++;
}
p2=v;
return p2;
}
int *centru (int i) //functia care returneaza arrayul format din numerele de //pe pozitiile centrale ale liniilor citite
{
int v[10]={0},x,p=-1, *p2;
for (unsigned int k=0; k<i; k++)
{
if (a[k][0]%2==1) //daca pe o linie este un numar impar de numere //inseamna ca pe pozitia centrala se gaseste un singur numar
{
x=a[k][0]/2+1;
v[++p]=a[k][x];
} else //altfel sunt 2 numere
{
v[p]=a[k][a[k][0]/2];
v[p+1]=a[k][a[k][0]/2+1];
p+=2;
}
nrcentru=p;
p2=v;
}
return p2;
}
int * prime (int*p,int n) //verifica daca numarul este prim
{
int prim[10],j=-1,*p2;
bool ok;
for (int i=0; i<n; i++)
{
ok=1;
unsigned int k=2;
if ((*(p+i))%k==0)
ok=0;
k=3;
while (k<=sqrt(*(p+i))&&ok)
{
if (*(p+i)%k==0)
{
ok=0; break;
}
k+=2;
}
if (ok)
prim[++j]=*(p+i);
}
nrprime=j;
p2=prim;
return p2;
}
int main()
{
int *p;
char *p2;
unsigned int i=0,j=1;
char c;
ifstream f("fisier.in");
while (!f.eof()) //cat timp mai poti citi din fisier
{
f.get(c); //citesti caracter cu caracter
if (isdigit(c)) //daca e cifra
a[i][j]=a[i][j]*10+c-'0'; else
if (c==' ') //daca e spatiu treci la urmatorul numar
j++; else
if (c=='\n')
{
a[i][0]=j; //pe prima pozitie de pe fiecare linie retinem cate //numere se gasesc pe acea linie
++i; j=1;
}
}
p=centru(i-1);
p=prime (p,nrcentru+1);
p2=transformare(p,nrprime+1);
{
for (unsigned int i=0; i<nrprime+1; i++)
{
cout<<*p2;
p2++;
}
}
return 0;
}
Explicație:
{
int prim[10],j=-1,*p2;
bool ok;
for(int i=0;i {
ok=1;
unsigned int k=2;
if((*(p+i))%k==0)
ok=0;
k=3;
while(k<=sqrt(*(p+i))&&ok)
{
if(*(p+i)%k==0)
{
ok=0;
break;
}
k=k+2;
}
if(ok)
prim[++j]=*(p+i);
}
nrprime=j;
p2=prim;
return p2;
}
{
int *p;
char *p2;
unsigned int i=0,j=1;
char c;
ifstream f("test.in");
while(!f.eof())
{
f.get(c);
if(isdigit(c))
a[i][j]==a[i][j]*10+c-'0';
else
if(c==' ')
j++;
else
if(c=='\n')
{
a[i][0]=j;
++i;
j=1;
}
}
p=centru(i-1);
p=prime(p,centru+1);
p2=transformare(p,nrprime+1);
{for(unsigned int i=0;i {
cout<<*p2;
p2++;
}
}
return 0;
}
#include
#include
#include
using namespace std;
int nrprime,nrcentru,a[10][10]={0};
char *transformare(int*p,int n)
{
char v[10],*p2;
for(unsigned int i=0;i {
v[i]=*p;
p++;
}
p2=v;
return p2;
}
int *centru(int i)
{
int v[10]={0},x,p=-1,*p2;
for(unsigned int k=0;k {
if(a[k][0]%2==1)
{
x=a[k][0]/2+1;
v[++p]=a[k][x];
}
else
{
v[p]=a[k][a[k][0]/2];
v[p+1]=a[k][a[k][0]/2+1];
p=p+2;
}
nrcentru=p;
p2=v;
}
return p2;
}