Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Probleme rezolvate informatica c

c


Set 5

  1. Scrieti o functie care sa furnizeze ca rezultat puterea a patra a unei valori de tip real. Folositi functia pentru a calcula valoarea expresiei (a+b)4, unde a si b sunt doua valori de tip real.

Rezolvare:



#include<stdio.h>

#include<conio.h>

float putere4(float x);

void main()

float putere4(float x)

  1. Scrieti o functie care sa aib 626q1610g a ca rezultat valoarea minima existenta într-un tablou de numere.

Rezolvare:

#include<stdio.h>

#include<conio.h>

int min(int a[50], int n)

return min;

void main()

printf("elementul minim din tablou este: %d", min(a, n));

getch();

  1. Sa se scrie o functie care sa determine cel mai mic multiplu comun pentru doua numere întregi precizate.

Rezolvare:

  1. Scrieti o functie care sa aib 626q1610g a ca rezultat suma cifrelor ce formeaza un numar întreg.

Rezolvare:

#include<stdio.h>

#include<conio.h>

int sumacifre(int x)

return s;

void main()

  1. Sa se scrie o functie cifra(n,m) care are ca rezultat valoarea celei de-a m-a cifre de la dreapta spre stânga a numarului n scris în sistemul zecimal. De exemplu: cifra(7283, 3) are valoarea 2.

Rezolvare:

#include<stdio.h>

#include<conio.h>

int cifrax(int x, int y)

rez=x%10;

return rez;

void main()

  1. Scrieti o functie care sa stabileasca daca un numar dat n contine în reprezentarea sa zecimala o anumita cifra precizata, notata, de exemplu, c. Se va utiliza apoi aceasta functie pentru a afisa toti întregii cu valori cuprinse între 1 si p (p citit de la tastatura) pentru care numarul, patratul si cubul reprezrntarii sale contin aceeasi cifra. Exemple de astfel de numere: 1, 5, 6, 10, 11, 12 etc.

Rezolvare:

#include<stdio.h>

#include<conio.h>

int continen(int x, int y)

x/=10;

}

return rez;

void main()

n/=10;

}

}

getch();

  1. Scrieti o functie pentru calcularea valorii xn, unde x si n sunt numere întregi pozitive folosite ca parametri. Utilizati apoi aceasta functie în cadrul unui program pentru a testa daca valoarea 4(k+1) divide sau nu suma (2k+1)2k+3 + (2k+3)2k+1, considerând k o valoare cunoscuta ce îndeplineste conditia: 0 <= k <= 5.

Rezolvare:

#include<stdio.h>

#include<conio.h>

int puteren(int x, int y)

void main()

Set 7

  1. Pentru n cunoscut, sa se calculeze fn, termenul de rangul n din sirul Fibonacci, stiind ca: f0 = 1 ; f1 = 1 ; fp = fp-1 + fp-2 pentru orice valoare p >= 2.

Rezolvare:

#include<stdio.h>

#include<conio.h>

int fib(int x)

void main()

  1. Sa se scrie o functie recursiva si o alta iterativa pentru calculul valorilor polinoamelor Hermite, Hn(x) stiind ca:    H0(x) = 1 ; H1(x) = 2x ; Hn(x) = 2xHn-1(x) - 2(n-1)Hn-2(x) pentru n > 1.

Rezolvare:

#include<stdio.h>

#include<conio.h>

//recursiv

int hermrec(int x, int y)

//iterativ

int hermiter(int x, int y)

return rez;

void main()

Set 9

Aici nu voi rezolva un exemplu din set ci va voi da un exemplu mai complex care acopera majoritatea operatiilor cu liste si totodata voi folosi si operatii pe siruri de caractere.

Exemple de lucru cu liste dublu înlantuite. Consideram urmatoarea definitie care reprinzinta un element al listei:

typedef struct mystruct elem;

Primul element al listei va fi tinut într-o variabila globala. De asemenea fiecare nod va contine numarul de ordine în care a fost inserat.

//declar primul element al listei global

elem *top = NULL;

//ordinea de inserare este tinuta în variabila globala

int order = 1;

1. Inserare înainte de nodul primit ca parametru:

Rezolvare:

/* inserare înaintea elementului primit ca parametru cu text static "textStatic" */

elem * insertB(elem *nod)

else

2. Inserare la începutul listei:

Rezolvare:

//inserare la începutul listei cu text primit ca parametru

//se va modifica top

void insertB(char *varText)

else

3. Inserare dupa de nodul primit ca parametru:

Rezolvare:

//inserare dupa element primit ca parametru cu text static "textStatic"

elem * insertA(elem *nod)

else

4. Inserare la sfârsitul listei:

Rezolvare:

//inserare la sfârsitul listei cu text primit ca parametru

//daca lista este goala se va modifica top

void insertA(char *varText)

else

5. stergere a unui nod primit ca parametru:

Rezolvare:

//sterge element primit ca parametru => daca este primul element se modifica top

void sterge(elem *nod)

//daca este ultimul element al listei

if(nod->next == NULL)

//daca este un nod oarecare

if(nod->prev != NULL && nod->next != NULL)

6. stergere de noduri care contin ca informatie utila textul primit ca parametru:

Rezolvare:

//sterge toate elementele din lista care contin stringul primit ca parametru

//=> daca primul element se gaseste printre aceste elemente se va modifica top



void sterge(char *varText)

//daca este ultimul element al listei

if(temp->next == NULL)

//daca este un nod oarecare

if(temp->prev != NULL && temp->next != NULL)

temp = temp->next;

7. Afisare lista de la nodul primit ca parametreu pâna la ultimul nod:

Rezolvare:

//afisare lista de la nodul primit ca parametru

void afisare(elem *nod)while(nod != NULL);

else

printf("\nNici un element de afisat!");

8. Afisare elemente din lista care contin ca informatie utila testul primit ca parametru:

Rezolvare:

//afisare elemente din lista care contin stringul primit ca parametru pornid de la nodul //primit ca parametru

void afisare(elem *nod, char *varText)

nod = nod->next;

}while(nod != NULL);

printf("\nLista contine %d elemente!",found);

else

printf("\nNici un element de afisat!");

Fisiere

Exemplu de sortare a informatiilor continute într-un fisier binar. Avem un fisier binar în care memoram informatiile despre angajatii unei inteprindri. Informatia despre un angajat va fi reprezentata folosind o definitie de tip structura (PERSOANA). Analizând datele problemei se observa ca volumul de date este voluminos si ele sunt introduse aleator în fisier, nu ordonate dupa un anumit criteriu. Se doreste sortarea informatiei în ordinea alfabetica a numelor angajatilor si afisarea acestora.

Pentru a îndeplinii operatia de sortare, daca se foloseste o abordare directa si datele sunt aduse în întregime în memoria interna, vor fi sortate si rescrise pe disc, eventual în alt fisier sau în acelasi redenumit, va fi necesar un numar mare de operatii si se va folosii multa memorie. Daca volumul datelor este foarte mare este posibil sa nu avem suficienta memorie pentru a le prelucra pe toate odata si atunci ele vor trebui prelucrate pe bucati. De asemenea daca se doreste sortarea dupa un alt criteriu trebuiesc reluate operatiile de la capat. În concluzie o astfel de abordare nu este eficienta pentru ca are o serie de probleme de prelucrare.

Din aceste considerente se va adopta o solutie care nu modifica datele din fisier ci creaza un fisier ajutator pe care îl vom numi fisier index. Pentru a realiza sortarea se va citi numai acea parte din înregistrare în raport cu care se face sortarea, pe care o vom numi "cheie" - în cazul nostru va fi numele persoanei. Fiecarei chei i se va asocia un pointer, numit "index", ce arata pozitia pe care o ocupa înregistrarea completa în fisierul de date (original). În continuare se va face sortarea perechilor index-cheie în ordine alfabetica a cheilor (numelor). Perechile index-cheie pot fi reprezentate folosind o definitie de tip structura (INDEX) care are 2 câpuri - pozitia înregistrarii în fisierul original si cheia (câmpul din înregistrare dupa care se face sortarea). Dupa sortare ele vor fi memorate în fisierul index.

Pentru o mai buna întelegere a metodei descrise mai sus sa consideram urmatorul mic exemplu:

  • Fisierul de date contine urmatoarele înregistrari:

Gheorghiu Florin 21 01 1980 Ploiesti

Toma Ion 03 11 1974 Resita

Alexandrescu Victor 15 03 1954 Tîrgoviste

Botez Cristian 11 11 1960 Bucuresti

  • Se formeaza perechile index-cheie citind doar numele din fisierul de date:

Gheorghiu Florin

Toma Ion

Alexandrescu Victor

Botez Cristian

  • Se sorteaza perechile:

Alexandrescu Victor

Botez Cristian

Gheorghiu Florin

Toma Ion

  • Se memoreaza perechile ordonate în fisierul index.

Rezolvare:

/*program pentru scrierea informatiilor in fisierul binar*/

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#define LUNG_NUME 20

typedef struct

PERSOANA;

void main(void)

printf("introduceti date de la tastatura:\n");

printf("Cate persoane inregistrati?: ");

scanf("%d", &n);

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

fclose(f);

/*program pentru citirea informatiilor din fisierul binar*/

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#define LUNG_NUME 20

typedef struct

PERSOANA;

void main (void)

fseek(f,0L,2);

n=ftell(f)/sizeof(PERSOANA);

fseek(f,0L,0);

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

fclose(f);

/* program pentru sortare index-cheie */

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#define LUNG_NUME 20

typedef struct

PERSOANA;

typedef struct

INDEX;

int constr_tablou_index (FILE *fis, INDEX tabl[], int nr_max)

return nr_gasite;

/*compara 2 elemente de tip INDEX*/

int compara (const void * a, const void *b)

/*sorteaza tabloul index ce are "nr" elemente cu "QSORT"*/

void sort_tablou (INDEX tabl[], int nr)

/*citeste inf. din fis. original si le scrie pe ecran in

ordinea indicata de tabloul index sortat cnform criteriului

stabilit*/

void scrie_inf_din_fisier (FILE *fis, INDEX tabl[], int val_max_indice)

/*functia "main"*/

#define NR_MAX_COMPONENTE 100

void main (void)

nr_inreg_citite=constr_tablou_index (fisier,tabl,NR_MAX_COMPONENTE);

sort_tablou(tabl,nr_inreg_citite);

scrie_inf_din_fisier(fisier,tabl,nr_inreg_citite);

Observatii:

  • În exemplul prezentat mai sus se lucreaza cu un volum mic de date. De aceea, diferenta (ca numar de prelucrari si volum de informatii) dintre sortarea fisierului index si a celui original nu este foarte semnificativa.
  • În situatii reale însa, metoda prezentata reduce în mod seminificativ volumul de prelucrari si cantitatea de memorie necesara executiei.
  • Evident, exista si alte metode de prelucrare a fisierelor! Acesta este doar un exemplu pentru creare, afisare si sortare a componentelor unui fisier binar.




Document Info


Accesari: 10328
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )