Setul 2

Problema 1 Folosind struct și union, definiți o structură de date care să poată memora următoarele informații despre viețuitoare:

    • tipul (poate fi: mamifer, insectă, pește, pasăre);

    • durata medie de viață în ani;

    • dacă e mamifer:

      • perioada de gestație;

      • numărul mediu de pui pe care îi naște;

    • dacă e insectă:

      • numărul de picioare;

      • dacă poate să zboare sau nu;

      • dacă este periculoasă sau nu pentru om;

    • dacă e pește:

      • tipul de apă: sărată/dulce;

      • adâncimea maximă la care se poate întâlni;

      • viteza maximă de înot;

    • dacă e pasăre:

      • anvergura aripilor;

      • altitudinea maximă de zbor;

      • viteza maximă de zbor;

Definiți structura în așa fel încât memoria consumată să fie minimă. Citiți și afișați informațiile despre o viețuitoare.

#include <stdio.h>

#include <stdlib.h>

int main()

{

printf("Hello world!\n");

struct vietuitoare{

float durataviata;

union tipvietuitoare{

struct mamifer{

float gestatie,nrpui;

}m;

struct insecta{

int nrpicioare;

int zboara,periculoasa;

}i;

struct peste{

char *tip_apa;

float viteza,adancime;

}pe;

struct pasare{

float viteza,altitudine,anvergura;

}pa;

}tipv;

}vie;

int tip;

printf("Tipul vietuitoarei este:1(mamifer)/2(insecta)/3(peste)/4(pasare):");scanf("%d",&tip);

printf("Durata de viata este:");scanf("%f",&vie.durataviata);

switch(tip){

case 1: printf("Perioada de gestatie este:");scanf("%f",&vie.tipv.m.gestatie);

printf("Numarul de pui este:");scanf("%f",&vie.tipv.m.nrpui);

printf("\nVietuitoarea citita este un mamifer cu durata de viata %f :\n",vie.durataviata);

printf("\n Aceasta are in medie %f pui si o perioada de gestatie medie de %f",vie.tipv.m.nrpui,vie.tipv.m.gestatie);

break;

case 2: printf("Numarul de picioare este:");scanf("%d",&vie.tipv.i.nrpicioare);

printf("Este vietuitoarea periculoasa?(1/0):");scanf("%d",&vie.tipv.i.periculoasa);

printf("Poate vietuitoarea sa zboare?(1/0):");scanf("%d",&vie.tipv.i.zboara);

printf("\nVietuitoarea citita este o insecta cu durata de viata %f :\n",vie.durataviata);

if(vie.tipv.i.periculoasa==1)

printf("\nVietuitoarea este periculoasa!");

else

printf("\nVietuitoarea nu este periculoasa");

if(vie.tipv.i.zboara==1)

printf("\nVietuitoarea poate sa zboare!");

else

printf("\nVietuitoarea nu poate sa zboare");

break;

case 3: printf("In ce fel de apa se regaseste pestele?(sarata/dulce):");scanf("%s",&vie.tipv.pe.tip_apa);

printf("Cu ce viteza innoata?:");scanf("%f",&vie.tipv.pe.viteza);

printf("Care este adancimea maxima?:");scanf("%f",&vie.tipv.pe.adancime);

printf("\nVietuitoarea citita este un peste cu durata de viata %f :\n",vie.durataviata);

printf("\nAdancimea maxima care se poate intalni este %f",&vie.tipv.pe.adancime);

printf("\nPestele se poate gasi in apa %s",vie.tipv.pe.tip_apa);

printf("\nAcesta innoata cu o viteza maxima de %f",vie.tipv.pe.viteza);

break;

case 4: printf("Care este viteza maxima?:");scanf("%f",&vie.tipv.pa.viteza);

printf("Care este altitudinea maxima?:");scanf("%f",&vie.tipv.pa.altitudine);

printf("Care este anvergura maxima?:");scanf("%f",&vie.tipv.pa.anvergura);

printf("\nVietuitoarea citita este o pasare cu durata de viata %f :\n",vie.durataviata);

printf("\nAltitudinea maxima la care poate zbura este:%f",vie.tipv.pa.altitudine);

printf("\nViteza maxima cu care poate zbura este:%f",vie.tipv.pa.viteza);

printf("\nAnvergura maxima este %f",vie.tipv.pa.anvergura);

break;

}

return 0;

}

Problema 2 - Poligon

Fie un poligon cu N vârfuri. Se citesc de la tastatură coordonatele celor N vârfuri, parcurse în sens trigonometric. Pe urmă se citesc coordonatele unui punct Q în plan. Determinați dacă punctul Q se află în interiorul sau în exteriorul poligonului. Poligonul poate fi atât convex cât și concav. Pentru păstrarea coordonatelor vârfurilor poligonului se va folosi alocare dinamică, astfel încât spațiul de memorie folosit să fie minim. Coordonatele punctelor sunt numere reale.

(Indicație de rezolvare: din punctul Q se trasează o semidreaptă oarecare. Dacă semidreapta intersectează un număr par de laturi atunci punctul Q este în exteriorul poligonului. Dacă semidreapta intersectează un număr impar de laturi, atunci punctul este în interior. Pentru a ușura calculele, se poate alege semidreapta paralelă cu Ox. Pentru a ușura și mai mult calculele, se poate translata poligonul astfel încât punctul Q să devină originea sistemului de coordonate.)

rezolvare

Problema 3 - Citire informaţie de la tastatură

Se citește de la tastatură o linie de text care conține o atribuire a unei variabile cu o valoare. Linia are forma:

Valoarea poate fi număr întreg, număr real, caracter sau șir de caractere. Numele variabilei poate conține doar litere sau cifre, cu restricția ca primul caracter să fie literă. Câteva exemple de astfel de atribuiri:

nume_var=valoare

raza=10.12 B22 = 'c' adresa="Bd. Vasile Parvan nr. 2" n=100

Folosind struct și union definiți o structură de date pentru a păstra în mod eficient informația din linia citită de la tastatură. Transferați informația din linia citită într-o variabilă de tipul structurii de date definite. Afișați informația păstrată în variabilă. Tratați posibile erori ce pot să apară în linia citită (nume incorect de variabilă, lipsește semnul egal, valoarea atribuită este invalidă).

rezolvare

Problema 4 - Dicţionar dinamic

Să se gestioneze un dicționar în mod dinamic. O înregistrare este formată dintr-un cuvânt și explicația lui. Se consideră că un cuvânt încape în 20 de caractere, dar explicația poate fi oricât de lungă. De asemenea mărimea dicționarului (numărul de înregistrări) poate fi oricât de mare.

    1. Să se citească dicționarul de la tastatură. Introducerea de înregistrări nu va fi condiționată de un n citit iniţial.

    2. După ce dicționarul a fost citit, va fi afişat.

    3. Să se citească un cuvânt de la tastatură, după care să se caute respectivul cuvânt și să se afișeze explicația lui.

    4. Se citește un text de la tastatură. Să se afișeze toate cuvintele greșite; adică cele care nu se găsesc în dicţionar.

    5. Scrieți un meniu cu opțiunile de mai sus, astfel încât să se poată alege oricare opțiune, de oricâte ori, în orice ordine, până la apăsarea tastei T (terminat)

rezolvare