Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Tablouri si siruri de caractere

c



+ Font mai mare | - Font mai mic



Tablouri si siruri de caractere

Probleme rezolvate

P6.1 Scrieti un program care citeste de la tastatura un vector de maxim 10 elemente intregi impreuna cu dimensiunea sa efectiva si apoi afiseaza elementele sale.



Precizare: Intrucat la rularea programului nu este cunoscut de la inceput numarul de elemente (el este mai mic decat 10) se va opta pentru citirea, la inceput, a numarului de elemente.

#include <stdio.h>

#include <stdlib.h>

int main()

printf('Valorile citite sunt:n');

for(i = 0; i < n; i++)

printf('v[%d] = %dn', i, v[i]);

system('PAUSE');

return 0;

Programul va afisa pe ecran dupa compilare si executie:

Introduceti nr. de elemente: 3

v[0] = -1

v[1] = 0

v[2] = 1

Valorile citite sunt:

v[0] = -1

v[1] = 0

v[2] = 1

Discutie

-  Primul ciclu for citeste elementele vectorului.

-  Cel de al doilea ciclu for afiseaza valorile citite si memorate.

P6.2 Scrieti un program citeste un vector de elemente intregi, impreuna cu dimensiunea sa efectiva, afiseaza in ordine inversa elementele vectorului si calculeaza media aritmetica a elementelor sale.

#include <stdio.h>

#include <stdlib.h>

int main()

for(i = n - 1; i >= 0; i--)

printf('%d ', v[i]);

s = 0;

for(i = 0; i < n; i++)

s += v[i];

m = (float)s / n;

printf('tma = %.2fn', m);

system('PAUSE');

return 0;

Programul va afisa pe ecran dupa compilare si executie:

Introduceti n: 4

v[0] = 1

v[1] = 2

v[2] = 3

v[3] = 4

ma = 2.50

Discutie

-  Dupa citire numarului de elemente, n, primul ciclu for citeste elementele vectorului.

-  Al doilea ciclu for parcurge vectorul de la ultimul (i ia valoarea n ‑ 1) pana la primul sau element (i >= 0) prin decrementarea (i--) contorului.

-  Variabila s (ce va contine suma tuturor elementelor vectorului) se initializeaza cu valoarea 0. Al treilea ciclu for parcurge vectorul si la fiecare pas al ciclului se aduna la vechea valoare a variabilei s, valoarea lui v[i]

-  La final, media aritmetica, ma, este calculata si afisata. De remarcat conversia de tip (float)s / n

P 6.3 Scrieti un program care citeste un vector de elemente intregi, impreuna cu dimensiunea sa efectiva, si determina maximul si minimul dintre elementele acestui vector.

#include <stdio.h>

#include <stdlib.h>

int main()

min = max = v[0];

for(i = 1; i < n; i++)

printf('max = %dtmin = %dn', max, min);

system('PAUSE');

return 0;

Programul va afisa pe ecran dupa compilare si executie:

Introduceti numarul de elemente din vector: 4

v[0] = -1

v[1] = 5

v[2] = -3

v[3] = 4

max = 5 min = -3

Discutie

-  Dupa citire numarului de elemente, n, primul ciclu for citeste elementele vectorului.

-  Variabilele min si max sunt initializate cu valoarea primului element din vector, v[0]. Algoritmul parcurge vectorul si testeaza la fiecare pas al ciclului for pentru fiecare element v[i], relatia sa de inegalitate in raport cu min respectiv max. In primul caz, daca v[i] este mai mare decat max, atunci elementul v[i] reprezinta un maxim local si deci valoarea lui v[i] i se atribuie variabilei max. In al doilea caz, daca v[i] este mai mic decat min atunci elementul v[i] reprezinta un minim local si deci valoarea lui v[i] i se atribuie variabilei min. La sfarsitul ciclului for, variabilele min si max contin valorile minima respectiv maxima din vectorul v

P6.4 Scrieti un program care citeste un vector de elemente intregi, impreuna cu dimensiunea sa efectiva, ordoneaza crescator elementele vectorului si apoi afiseaza vectorul ordonat. Se va utiliza metoda de ordonare (se utilizeaza si termenul sortare) denumita, in limba engleza, "bubble‑sort

#include <stdio.h>

#include <stdlib.h>

int main()

do

}

} while(ind);

for(i = 0; i < n; i++)

printf('v[%d] = %dn', i, v[i]);

system('PAUSE');

return 0;

Programul va afisa pe ecran dupa compilare si executie:

Introduceti numarul de elemente din vector: 4

v[0] = -1

v[1] = 4

v[2] = 2

v[3] = 0

v[0] = -1

v[1] = 0

v[2] = 2

v[3] = 4

Discutie

-  Primul ciclu for citeste elementele vectorului. Anterior acesteia a fost citit numarul de elemente ale vectorului, n.

-  Programul utilizeaza o variabila ind cu rol de indicator. Aceasta variabila se initializeaza cu valoarea 0 inaintea unui ciclu care compara perechile succesive de elemente ale vectorului, elementul curent si urmatorul. Pentru parcurgerea vectorului se foloseste un ciclu for care evolueaza de la 0 pana la penultimul element (ultima comparatie se face intre penultimul si ultimul element). Daca o pereche de elemente succesive este in ordinea dorita se trece la compararea urmatoarei perechi. Daca o pereche de elemente nu se afla in ordinea dorita se schimba intre ele si variabilei ind i se atribuie valoarea 1. Parcurgerea ciclului se reia pana cand toate elementele sunt in ordinea dorita, respectiv pana cand ind isi pastreaza valoarea 0 dupa parcurgerea intregului vector. Aceasta este metoda de ordonare / sortare "bubble‑sort".

-  Pentru interschimbarea elementelor care nu se afla in ordinea dorita se utilizeaza variabila temporara tmp

P6.5 Scrieti un program care citeste o matrice de maxim 10  10 elemente intregi, impreuna cu dimensiunile sale efective (linii respectiv coloane) si afiseaza atat matricea initiala cat si matricea avand coloanele pare interschimbate cu coloanele impare (interschimbarea afecteaza coloanele alaturate, 0‑1, 2‑3 etc.).

#include <stdio.h>

#include <stdlib.h>

int main()

printf('nMatricea citita este:n');

for(i = 0; i < m; i++)

for(j = 0; j < (n / 2) * 2; j += 2)

for(i = 0; i < m; i++)

printf('nMatricea avand coloanele interschimbate este:n');

for(i = 0; i < m; i++)

system('PAUSE');

return 0;

Programul va afisa pe ecran dupa compilare si executie:

Introduceti nr. de linii: 2

Introduceti nr. de coloane: 2

A[0][0] = 1

A[0][1] = 2

A[1][0] = 3

A[1][1] = 4

Matricea citita este:

2

4

Matricea avand coloanele interschimbate este:

1

3

Daca se introduce o alta matrice rezultatul va fi:

Introduceti nr. de linii: 3

Introduceti nr. de coloane: 5

A[0][0] = 1

A[0][1] = 2

A[0][2] = 3

A[0][3] = 4

A[0][4] = 5

A[1][0] = 6

A[1][1] = 7

A[1][2] = 8

A[1][3] = 9

A[1][4] = 10

A[2][0] = 11

A[2][1] = 12

A[2][2] = 13

A[2][3] = 14

A[2][4] = 15

Matricea citita este:

2 3 4 5

12 13 14 15

Matricea avand coloanele interschimbate este:

Discutie

-  Atentie: daca textul problemei nu specifica in mod explicit ca avem de a face cu o matrice patrata, matricea prelucrata poate avea numarul de linii diferit de cel de coloane!

-  Citirea elementelor matricei A se face cu ajutorul a doua cicluri for imbricate: prima din ele, care utilizeaza contorul i, parcurge liniile matricei; a doua, ce utilizeaza contorul j, parcurge coloanele matricei A. Reprezentarea sugestiva a parcurgerii matricei in acest caz este prezentata in Figura 6.a. Parcurgerea unei matrice se poate face, in general, utilizand si parcurgerea pe coloane si apoi pe linii ca in Figura 6.b.

-  Interschimbarea coloanelor pare cu cele impare se face utilizand a doua modalitate de parcurgere a matricei. Cu exceptia cazului cand n este impar, toate coloanele j se interschimba cu coloanele j+1 utilizand o variabila temporara tmp pentru fiecare element A[i][j]

P6.6 Scrieti un program care citeste de la tastatura o matrice patrata de dimensiune maxima 10  10 elemente reale impreuna cu dimensiunea sa efectiva si determina si afiseaza suma elementelor de pe diagonala principala si de pe diagonala secundara.

#include <stdio.h>

#include <stdlib.h>

int main()

/* Afisarea matricei citite */

printf('nMatricea introdusa este:nn');

for(i = 0; i < dim; i++)

printf('n');

}

/* Suma elementelor de pe diagonala principala */

for(i = 0; i < dim; i++)

sum1 += mat[i][i];

printf('nSuma elementelor de pe diagonala principala');

printf(' este %1.3fn', sum1);

/* Suma elementelor de pe diagonala secundara */

for(i = 0; i < dim; i++)

sum2 += mat[i][dim-i-1];

printf('nSuma elementelor de pe diagonala secundara');

printf(' este %1.3fn', sum2);

system('PAUSE');

return 0;

Programul va afisa pe ecran, dupa compilare si executie:

Introduceti dimensiunea matricei patrate: 4

Introduceti mat[0][0]: 1

Introduceti mat[0][1]: 2

Introduceti mat[0][2]: 3

Introduceti mat[0][3]: 4

Introduceti mat[1][0]: 5

Introduceti mat[1][1]: 6

Introduceti mat[1][2]: 7

Introduceti mat[1][3]: 8

Introduceti mat[2][0]: 9

Introduceti mat[2][1]: 10

Introduceti mat[2][2]: 11

Introduceti mat[2][3]: 12

Introduceti mat[3][0]: 13

Introduceti mat[3][1]: 14

Introduceti mat[3][2]: 15

Introduceti mat[3][3]: 16

Matricea introdusa este:

2.000 3.000 4.000

6.000 7.000 8.000

10.000 11.000 12.000

Suma elementelor de pe diagonala principala este 34.000

Suma elementelor de pe diagonala secundara este 34.000

Discutie

-  Mai intai se citeste dimensiunea efectiva a matricei si apoi elementele sale. Programul nu verifica faptul ca dimensiunea nu depaseste dimensiunea maxima. Recomandam ca citirea dimensiunii sa se faca astfel:

do while(dim < 1 || dim > 10);

-  Apoi se afiseaza matricea citita pentru a verifica datele introduse.

-  Se calculeaza si se afiseaza suma elementelor de pe diagonala principala. Aceste elemente au acelasi indice pentru linii si coloane.

-  Se calculeaza si se afiseaza suma elementelor de pe diagonala secundara. Aceste elemente au indicele coloanei egal cu "dimensiunea indicele randului - 1". In expresia anterioara trebuie sa scadem 1 pentru ca in C numaratoarea incepe de la 0!

P6.7 Scrieti un program care citeste doua siruri de maximum 100 de caractere de la tastatura, concateneaza al doilea sir de caractere la primul si afiseaza rezultatul.

#include <stdio.h>

#include <stdlib.h>

int main()

s1[i] = NULL;

printf('%sn', s1);

system('PAUSE');

return 0;

Daca se introduc de la tastatura sirurile aaa respectiv bbb programul va rula astfel:

Introduceti sirul 1: aaa

Introduceti sirul 2: bbb

aaabbb

Discutie

-  Cele doua siruri de caractere, s1 si s2, sunt citite cu ajutorul functiei scanf()

-  Primul ciclu while parcurge sir1 pana la capat prin detectarea conditiei s1[i] == NULL. Din acel moment caracterele din al doilea sir se adauga in continuare in primul sir cu al doilea ciclu while. Al doilea ciclu while se putea scrie condensat astfel: while((s1[i++] = s2[j++]) != NULL);

-  Se remarca utilizarea operatorului de post‑incrementare. Cat timp rezultatul atribuirii s1[i] = s2[j] nu este NULL, adica sir2 nu s‑a terminat, se incrementeaza i, apoi se incrementeaza j. Corpul instructiunii while contine o instructiune vida intrucat atribuirile sunt realizate direct in conditia instructiunii.

-  La iesirea din al doilea ciclu while, pentru a marca sfarsitul sirului concatenat, se atribuie s1[i] = NULL

-  Problema se poate rezolva si apeland functia standard strcat() astfel:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

P6.8 Scrieti un program care citeste un sir de maximum 100 de caractere de la tastatura si apoi citeste inca un caracter separat, care se va elimina din sirul de caractere daca el exista in sir. Programul va afisa rezultatul.

#include <stdio.h>

#include <stdlib.h>

int main()

Daca se introduc de la tastatura sirul 'orar' respectiv caracterul 'o', programul va rula astfel:

Introduceti sirul de caractere

apoi caracterul ce se doreste eliminat separat prin spatiu

orar o

rar

Discutie

-  Ciclul for parcurge sirul de caractere, sir. Cat timp nu s‑a atins sfarsitul sirului, adica sir[i] != NULL, se testeaza daca elementul curent este diferit de caracterul ce se doreste eliminat, sir[i] != c, si daca da atunci elementul curent din sir se pastreaza pe pozitia curenta prin atribuirea sir[j++] = sir[i], echivalenta cu secventa: sir[j] = sir[i]; j++; j se incrementeaza pentru a pregati urmatoarea iteratie). Daca elementul curent este identic cu caracterul ce se doreste eliminat, atunci atribuirea anterioara nu are loc, astfel ca in urmatoarele iteratii, sir[j], care este urmatorul element din sir, va fi suprascris cu primul caracter diferit de c intalnit in sir

-  De remarcat atribuirea sir[j] = NULL care marcheaza sfarsitul de sir.

P6.9 Scrieti un program care citeste un sir de maximum 100 de caractere de la tastatura si afiseaza acest sir in ordine inversa.

#include <stdio.h>

#include <stdlib.h>

int main()

system('PAUSE');

return 0;

Daca de la tastatura se introduce sirul abcd , programul va rula astfel:

abcd

dcba

Probleme propuse

Scrieti un program care citeste de la tastatura un vector de maximum 50 de numere intregi si determina numarul elementelor impare ale vectorului.

Scrieti un program care citeste de la tastatura doi vectori de maximum 100 de elemente intregi (numarul elementelor poate fi diferit) apoi determina si afiseaza intersectia celor doi vectori (adica elementele comune celor doi vectori).

Scrieti un program care citeste de la tastatura un vector de maximum 20 de elemente intregi si interschimba elementele de pe pozitii pare cu cele de pe pozitiile impare.

Scrieti un program care citeste de la tastatura un vector de maximum 30 de elemente intregi si sorteaza in ordine crescatoare doar elementele de pe pozitiile impare.

Scrieti un program care citeste de la tastatura un vector de maximum 15 elemente intregi si insereaza un element pe o pozitie k. Precizare: se vor citi de la tastatura vectorul impreuna cu dimensiunea sa efectiva, elementul ce se doreste inserat precum si pozitia unde se doreste inserat elementul.

Scrieti un program care citeste de la tastatura o matrice patrata de dimensiuni maxime 10  10 elemente reale, afiseaza matricea transpusa si apoi calculeaza suma elementelor matricei.

Scrieti un program care citeste de la tastatura o matrice de dimensiuni maxime 10  10 elemente intregi apoi determina si afiseaza elementele maxime de pe fiecare linie.

Scrieti un program care citeste de la tastatura o matrice patrata de dimensiuni maxime 100  100 elemente reale apoi calculeaza suma elementelor de sub si de deasupra diagonalei principale.

Scrieti un program care citeste de la tastatura doua matrice A si B (de dimensiuni maxime 10  10 elemente reale) apoi calculeaza produsul lor. Precizare: programul va semnala cazul in care cele doua matrice nu se pot inmulti.

Scrieti un program care citeste de la tastatura doua siruri de caractere (de maximum 51 de caractere fiecare) si elimina toate caracterele continute in al doilea sir din primul sir.
Exemplu: sir1 = 'abcdabcd' sir2 = 'ad' si trebuie sa rezulte 'bcbc'.

Scrieti un program care citeste de la tastatura doua siruri de caractere (de maximum 11 caractere fiecare) si afiseaza pe ecran numarul de aparitii ale caracterelor din primul sir in cel de al doilea sir.
Exemplu: sir1 = 'abc' sir2 = 'aacde'
si trebuie sa rezulte 'a = 2, b = 0, c = 1'

Scrieti un program care citeste de la tastatura doua siruri de caractere (de maximum 41 de caractere fiecare) si determina de cate ori apare secventa de caractere din al doilea sir in primul.
Exemplu: sir1 = 'abcdabcc' sir2 = 'ab'
si programul trebuie sa afiseze 'Sirul ab apare de 2 ori'

Scrieti un program care citeste de la tastatura doua siruri de caractere (de maximum 31 de caractere fiecare) si transforma caracterele majuscule in minuscule si caracterele minuscule in majuscule.
Exemplu: sir = 'abcdABC' si programul trebuie sa afiseze 'ABCDabc'



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1758
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved