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: 10200
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. 2024 )