Sunteți pe pagina 1din 11

Vetisan Iulia Lab08_an1_s1_12-13

1.
/*
Sa se scrie un program care citeste de la tastatura un sir de caractere folosind pointeri si sa se afiseze
sirul obtinut prin eliminarea caracterelor care se repeta in sir.
*/
#include <stdio.h>
#include <string.h>
#define DIM 20
void eliminare (char *p);
void main(){
int i;
char p[DIM];
printf("\nDati sirul de caractere: ");
scanf("%s", p);
eliminare (p);
printf("\nSirul de caractere dupa eliminarea caracterelor: ");
for (i=0;i<strlen(p);i++)
printf("%c", *(p+i));
printf("\n");
}//end main
void eliminare (char *p)
{
int i, j, k;
for (i=0;i<strlen(p)-1;i++)
for (j=i+1;j<strlen(p);j++)

while (*(p+i) == *(p+j))


for (k=j;k<strlen(p);k++)
*(p+k) = *(p+k+1);
}//end eliminare

2.
/*
Sa se scrie un program care citeste de la tastatura 2 siruri de caractere si sa se afiseze numarul de
caractere prin care difera cele doua siruri (numarul de caractere care exista in primul si nu exista in al
doilea + numarul de caractere care exista in al doilea si nu exista in primul). Folositi pointeri pentru
accesul la elementele tablourilor.
*/
#include <stdio.h>
#include <string.h>
#define DIM 20
void eliminare (char *p);
int diferenta (char *p1, char *p2);
void main(){
char p1[DIM], p2[DIM];
int nr;
printf("\nDati primul sir de caractere: ");
scanf("%s", p1);
printf("\nDati al doilea sir de caractere: ");
scanf("%s", p2);
eliminare (p1);
eliminare (p2);
nr= diferenta(p1, p2) + diferenta (p2, p1);

printf("\nNumarul total de caractere individuale este: %d\n", nr);


}//endmain
void eliminare (char *p)
{
int i, j, k;
for (i=0;i<strlen(p)-1;i++)
for (j=i+1;j<strlen(p);j++)
while (*(p+i) == *(p+j))
for (k=j;k<strlen(p);k++)
*(p+k) = *(p+k+1);
}//end eliminare
int diferenta (char *p1, char *p2)
{
int i, j, ok, nr=0;
for (i=0;i<strlen(p1);i++)
{
ok=0;
for (j=0;j<strlen(p2);j++)
if (*(p1+i) == *(p2+j))
{
ok=1;
break;
}//endif
if (ok==0)
nr++;

}//enfor
return nr;
}//end diferenta

3.
/*
Sa se scrie un program C/C++ care citeste elementele a doi vectori de intregi si afiseaza produsul scalar
al acestora. Se va folosi o functie care citeste elementele de la tastatura si o functie care calculeaza
produsul scalar, ambele vor utiliza pointeri. Citirea numarului de elemente ale tabloului si afisarea
rezultatului se va face in functia main().
*/
#include <stdio.h>
#define DIM 20
void citire (int *p, int n);
int prod_scalar (int *p1, int *p2, int n);
void main(){
int p1[DIM], p2[DIM], n;
printf("\nDati dimensiunea vectorului: ");
scanf("%d", &n);
if (n>DIM)
{
printf("\nDimensiune prea mare!\n");
return;
}//endif
printf("\nDati elementele primului vector: \n");
citire (p1, n);
printf("\nDati elementele din al doilea vector: \n");

citire (p2, n);


printf("\nProdusul scalar al vectorilor este: %d\n", prod_scalar(p1, p2, n));
}//endmain
void citire (int *p, int n)
{
int i;
for (i=0;i<n;i++)
{
printf("\tp[%d]= ", i+1);
scanf("%d", p+i);
}//endfor
return;
}//end citire
int prod_scalar (int *p1, int *p2, int n)
{
int i, j, prod=0;
for (i=0;i<n;i++)
prod += (*(p1+i)) * (*(p2+i));
return prod;
}//end prod_scalar

4.
/*
Sa se scrie o aplicatie C/C++ in care se genereaza aleator 20 de numere intregi cu valori mai mici decat
50. Sa se scrie o functie care elimina din sirul creat numerele impare. Functia utilizeaza pointeri. Afisati
in main() sirul initial si cel obtinut prin eliminare.

*/
#include <stdio.h>
#define MAX 50
void eliminare (int *p, int &nr);
void main(){
int p[20], i, nr=0;
printf("\nDati elementele vectorului:\n");
for (i=0;i<20;i++)
{
printf("\tp[%d]= ", i+1);
scanf("%d", p+i);
}//endfor
for (i=0;i<20;i++)
if ((*(p+i)) > 50)
{
printf("\nUn numar> 50!!\n");
return;
}//endif
printf("\nVectorul initial a fost: \n");
for (i=0;i<20;i++)
printf("%d ", *(p+i));
eliminare(p, nr);
printf("\nVectorul final este: \n");
for (i=0;i<nr;i++)
printf("%d ", *(p+i));

printf("\n");
}//endmain
void eliminare (int *p, int &nr)
{
int i;
for (i=0;i<20;i++)
if (((*(p+i)) % 2) == 0)
{
*(p+nr) = *(p+i);
nr++;
}
}//end eliminare

5.
/*
Sa se scrie un program C/C++ in care se citesc de la tastatura numere reale, ce vor fi stocate intr-un
tablou unidimensional. Sa se scrie o functie care copiaza intr-un alt vector valorile din primul tablou mai
mari decat valoarea medie a numerelor din acesta. Se vor folosi pointeri si se vor afisa in main() valorile
din cei doi vectori.
*/
#include <stdio.h>
#define DIM 20
void citire (float *p, int n);
void copiere (float *p1, int n, float *p2, int &m);
void main(){
float p1[DIM], p2[DIM];
int i, n, m=0;

printf("\nDati dimensiunea vectorului: ");


scanf("%d", &n);
if (n>DIM)
{
printf("\nDimensiunea este prea mare!\n");
return;
}//endif
printf("\nDati elementele primului vector: \n");
citire (p1, n);
printf("\nVectorul initial a fost: \n");
for (i=0;i<n;i++)
printf("%.2f ", *(p1+i));
copiere (p1, n, p2, m);
}//endmain
void citire (float *p, int n)
{
int i;
for (i=0;i<n;i++)
{
printf("\tp[%d]= ", i+1);
scanf("%f", p+i);
}//endfor
return;
}//end citire
void copiere (float *p1, int n, float *p2, int &m)

{
int i;
float med, nr=0, sum=0;
for (i=0;i<n;i++)
{
sum+=*(p1+i);
nr++;
}//endfor
med = sum/nr;
for (i=0;i<n;i++)
if ((*(p1+i)) > med)
{
*(p2+m) = *(p1+i);
m++;
}//endif
printf("\nElementele vectorului al doilea sunt: \n");
for (i=0;i<m;i++)
printf("%.2f ", *(p2+i));
printf("\n");
}//end copiere

6.
/*
Sa se scrie o aplicatie C/C++ care citeste de la tastatura un sir de caractere. Sa se scrie o functie care
afiseaza caracterele ce compun sirul si numarul de aparitii ale fiecaruia. Folositi pointeri.
*/

#include <iostream>
#include <conio.h>
using namespace std;
void numarare (char *p_sir, int n);
void main()
{
char v[50], *p_sir;
int k=0, n, i;
cout<<"\nDati dimensiunea: ";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"\nDati elementele sirului de caractere: ";
cin>>v[i];
}//endfor
p_sir=v;
cout<<"\nSirul de caractere este: ";
for (i=0;i<n;i++)
cout<<*(p_sir+i)<<" ";
numarare (p_sir, n);
getch();
}//endmain
void numarare (char *p_sir, int n)
{
int i,j,x;

for (i=0;i<n;i++)
{
x=0;
for (j=0;j<n;j++){
if (*(p_sir+i)==*(p_sir +j))
x++;
}//endfor
cout<<"\nElementul "<<*(p_sir+i)<<" apare de"<< x<<" ori."<<endl;
}//endfor
}//end numarare

S-ar putea să vă placă și