Probleme pregatitoare

Probleme(I)

Problema 1

Pentru a retine date despre un anumit pacient se foloseste urmatoarea structura stuct pacient{char nume[35]; int cod}. Se da un tablou de astfel de structuri. Stiind ca tabloul are dimensiunea N, se cere, sa se implementeze o functie pentru:

- Cautarea unui pacient dupa nume (dat de la tastatura) si afisarea codului acestuia.

- Afisarea tuturor pacientilor cu cod mai mic decat codul afisat in urma cautarii anterioare.

Nota: Nu este permisa utilizarea unei alte structuri de date de tip tablou sau lista, in afara tabloului dat.

#define N 1000

struct pacient{

char nume[35];

int cod;

}p[N];

void cautareAfisare(char nume[])

{

int i=0,gasit=0,valoare=0,exista=0;;

while(i<N&&strcmp(p[i].nume,nume))

i++;

if(strcmp(p[i].nume,nume)==0)

{

printf("Pacientul cu numele %s are codul %d\n",p[i].nume,p[i].cod);

gasit=1;

valoare=p[i].cod;

}

else

printf("Pacientul nu a fost gasit");

if(gasit)

{

printf("Pacientii cu cod mai mic decat codul pacientului %s sunt ",p[i].nume);

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

if(p[i].cod<valoare)

{

exista=1;

printf("\n%s",p[i].nume);

}

if(!exista)

printf("inexistenti");

}

}

Problema 2

Se considera urmatoarea baza de date a unei scoli

struct elev {char nume[35]; char gen; floar marime_pantof).

- Sa se ordoneze elevii dupa marimea pantofului, daca exista doua persoane cu aceeasi marime la pantof sa fie ordonat descrescator in functie de nume(z->a)

Nota: Nu este permisa utilizarea unei alte structuri de date de tip tablou sau lista, in afara tabloului dat.

#define N 1000

struct elev{

char nume[35];

char gen;

float marime_pantof;

}e[N];

void swap(int i, int j)

{

char temp[35];

char aux;

float aux_marime;

strcpy(temp,e[i].nume);

strcpy(e[i].nume,e[j].nume);

strcpy(e[j].nume,temp);

aux=e[i].gen;

e[i].gen=e[j].gen;

e[j].gen=aux;

aux_marime=e[i].marime_pantof;

e[i].marime_pantof=e[j].marime_pantof;

e[j].marime_pantof=aux_marime;

}

void sortare()

{

int s=0,i;

do{

s=0;

for(i=0;i<N-1;i++)

{

if(e[i].marime_pantof<e[i+1].marime_pantof)

{

swap(i,i+1);

s=1;

}

if(e[i].marime_pantof==e[i+1].marime_pantof)

{

if(strcmp(e[i].nume,e[i+1].nume)<0)

swap(i,i+1);

}

}

}while(s!=0);

}

Problema 3

O civilizatie extraterestra doreste sa invadeze Pamantul. Pentru aceasta creeaza urmatoarea structura :

struct tara{char nume [35]; float suprafata; int soldati}.

- Ajutati-i ordonand descrescator dupa suprafata doar tarile de pe pozitii impare, fara a afecta tarile de pe pozitiile pare.

Nota: Nu este permisa utilizarea unei alte structuri de date de tip tablou sau lista, in afara tabloului dat.

#define N 1000

struct tara{

char nume[35];

float suprafata;

int soldati;

}tara[N];

void swap(int i, int j)

{

char temp[35];

float aux_suprafata;

int aux_soldati;

strcpy(temp,tara[i].nume);

strcpy(tara[i].nume,tara[j].nume);

strcpy(tara[j].nume,temp);

aux_suprafata=tara[i].suprafata;

tara[i].suprafata=tara[j].suprafata;

tara[j].suprafata=aux_suprafata;

aux_soldati=tara[i].soldati;

tara[i].soldati=tara[j].soldati;

tara[j].soldati=aux_soldati;

}

void sortare_pozitii_impare()

{

int i,s=0;

do{

s=0;

for(i=1;i<N-2;i=i+2)

if(tara[i].suprafata>tara[i+2].suprafata)

{

swap(i,i+2);

s=1;

}

}while(s!=0);

}

Probleme(I)

Problema 1

Pentru a retine date despre un anumit produs dintr-un magazin se foloseste urmatoarea structura stuct produs {char nume[35]; int cod}. Se da un tablou de astfel de structuri. Stiind ca tabloul are dimensiunea N, se cere, sa se implementeze o functie pentru:

- Cautarea unui anumit produs al carui nume este dat de la tastatura si afisarea pe ecran a codului sau.

- Afisarea pe ecran a tuturor produselor care au lungimea numelui mai mare sau egala cu valoarea codului afisat in urma cautarii anterioare.

#include <stdio.h>

#include <stdlib.h>

#define N 1000

struct produs{

char nume[35];

int cod;

}p[N];

void cautareAfisare(char nume[])

{

int i=0,gasit=0,valoare=0,exista=0;;

while(i<N&&strcmp(p[i].nume,nume))

i++;

if(strcmp(p[i].nume,nume)==0)

{

printf("Produsul cu numele %s are codul %d\n",p[i].nume,p[i].cod);

gasit=1;

valoare=p[i].cod;

}

else

printf("Produsul nu a fost gasit");

if(gasit)

{

printf("Produsele care au lungimea numelui mai mare sau egala cu valoarea codului produsului %s sunt:\n ",p[i].nume);

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

if(strlen(p[i].nume)>=valoare)

{

exista=1;

printf("\n%s",p[i].nume);

}

if(!exista)

printf("inexistenti");

}

}

Problema 2

Mai multi studenti contorizeaza erorile pe care le intalnesc creand un tablou de structuri:

struct eroare {char limbaj[35]; int cod_eroare; boolean rezolvare}. (Campul rezolvare este setat pe 1 daca a fost gasita o solutie, respectiv pe 0 daca nu)

- Scrieti un algoritm pentru sortarea erorilor dupa limbajul in care au fost produse, iar erorile produse in acelasi limbaj sa fie sortate crescator in functie de codul erorii.

Nota: Nu este permisa utilizarea unei alte structuri de date de tip tablou de structuri sau lista de structuri, in afara tabloului dat.

#include <stdio.h>

#include <stdlib.h>

#define N 1000

typedef enum { false=0, true=1 } boolean;

struct eroare{

char limbaj[35];

int cod_eroare;

boolean rezolvare;

}e[N];

void swap(int i, int j)

{

char temp[35];

boolean aux;

int aux_eroare;

strcpy(temp,e[i].limbaj);

strcpy(e[i].limbaj,e[j].limbaj);

strcpy(e[j].limbaj,temp);

aux=e[i].rezolvare;

e[i].rezolvare=e[j].rezolvare;

e[j].rezolvare=aux;

aux_eroare=e[i].cod_eroare;

e[i].cod_eroare=e[j].cod_eroare;

e[j].cod_eroare=aux_eroare;

}

void sortare()

{

int s=0,i;

do{

s=0;

for(i=0;i<N-1;i++)

{

if(strcmp(e[i].limbaj,e[i+1].limbaj)>0)

{

swap(i,i+1);

s=1;

}

if(strcmp(e[i].limbaj,e[i+1].limbaj)==0)

{

if(e[i].cod_eroare>e[i+1].cod_eroare)

swap(i,i+1);

}

}

}while(s!=0);

}

Problema 3

Pentru a retine date despre un anumit produs dintr-un magazin se foloseste urmatoarea structura stuct produs {char nume[35]; int cod}. Se da un tablou de astfel de structuri. Stiind ca tabloul are dimensiunea N, se cere, sa se implementeze o functie pentru:

- Ordonarea crescatoare dupa cod doar a acelor produse care contin coduri cu valori pare, fara insa a afecta pozitiile pe care sunt produsele cu coduri impare.

Nota: Nu este permisa utilizarea unei alte structuri de date de tip tablou de structuri sau lista de structuri, in afara tabloului dat.

#include <stdio.h>

#include <stdlib.h>

#define N 1000

struct produs{

char nume[35];

int cod;

}p[N];

void swap(int i, int j)

{

char temp[35];

int aux_cod;

strcpy(temp,p[i].nume);

strcpy(p[i].nume,p[j].nume);

strcpy(p[j].nume,temp);

aux_cod=p[i].cod;

p[i].cod=p[j].cod;

p[j].cod=aux_cod;

}

void sortare_coduri_pare()

{

int i,s=0,index=0;

do{

s=0;

for(i=0;i<N-1;i++)

if(p[i].cod%2==0)

{

index=i+1;

while(index<N&&p[index].cod%2!=0)

index++;

if(index<N)

{

if(p[i].cod>p[index].cod)

{

swap(i,index);

s=1;

}

}

}

}while(s!=0);

}

Probleme(II)

Problema 1

Sa se scrie o functie care primeste ca parametru un cuvant si afiseaza toate sufixele acelui cuvant.

pentru "STUDENT"-> sufixele sunt: T, NT, ENT, DENT, UDENT, TUDENT, STUDENT

#include <iostream>

#include <string.h>

using namespace std;

void functie(char cuvant[])

{

int j,t,sfarsit=strlen(cuvant);

for(j=0;j<sfarsit;j++)

{

for(t=sfarsit-j-1;t<sfarsit;t++)

cout<<cuvant[t]<<" ";

cout<<endl;

}

}

Problema 2

Completati secventele de cod lipsa pentru gasirea solutiilor de parcurgere a traselului intr-un labirint intre doua perechi de coordonate date.

#include <stdio.h>

#define nmax 3

typedef struct coordonate

{

int x;

int y;

}coordonate;

coordonate pos[nmax]; //tabloul de posibilitati

coordonate a[nmax*nmax]; //tablou de maxim nmax elemente

int matrice[nmax][nmax] = { { 1, 0, 1 },

{ 0, 0, 0 },

{ 1, 1, 1 } }; //matricea initiala (0=liber)

void initializare(int n) //int a[] variabila globala

{

}

void afiseaza_solutia(int n)

{

int i;

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

printf("X=%d Y=%d\n", a[i].x, a[i].y);

printf("\n");

}

int acceptabil(coordonate pos)

{

.........

}

int solutie(int k, coordonate c,coordonate c_final)

{

..........

}

void labirint(int k, coordonate c_final) //k pasul, c coordonata curenta

{

int i;

coordonate aux;

if (solutie(k, a[k-1],c_final)) //solutie completa (avem n elemente)

afiseaza_solutia(k);

else

{

for (i = 0; i < 4; i++) // parcurgem pe rand posibilitatile

{

aux.x = a[k-1].x + pos[i].x;

aux.y = a[k-1].y + pos[i].y;

if (acceptabil(aux)) {//daca posibilitatea e acceptabila

a[k] = aux;

matrice[a[k].y][a[k].x] = 2; //marcheaza ca vizitat

labirint(k + 1,c_final); // back1(posibilitate_k+1)

matrice[a[k].y][a[k].x] = 0; //sterge marcajul ca vizitat

}

}

}

} /*labirint*/

int main(void)

{

coordonate c,c2;

initializare(nmax);

printf("Dati valoarea initiala pt x intre (0 si %d): ", nmax);

scanf("%d", &c.x);

printf("Dati valoarea initiala pt y intre (0 si %d): ", nmax);

scanf("%d", &c.y);

printf("Dati valoarea finala pt x intre (0 si %d): ", nmax);

scanf("%d", &c2.x);

printf("Dati valoarea finala pt y intre (0 si %d): ", nmax);

scanf("%d", &c2.y);

if (acceptabil(c)&&(acceptabil(c2))) //daca pozitia initala se incadreaza in limitele hartii si este libera

matrice[c.y][c.x] = 2;

else

printf("Coordonate invalide\n");

a[0] = c; //pasul 0 reprezinta originea

labirint(1, c2);

return 0;

}

Problema 3

Să se scrie un program folosind tablouri articulate cu liste pentru modelarea situaţiei dintr-o firma software în care proiectele pot fi adăugate sau retrase în orice moment iar angajatii pot fi asignati sau retrasi de la un anumit proiect în orice moment. Programul va putea efectua operaţii asupra unui număr arbitrar de proiecte şi va trebui să implementeze următorii operatori:

  • transferă_angajat(nume_angajat, nume_proiect_nou) – transferă angajatul dat prin numele său la un nou proiect;

  • listare_proiecte() – pentru fiecare proiect listează angajatii din echipa de proiect în ordine invers alfabetica.

Se va descrie în cuvinte rolul fiecărei structuri de date folosite si a fiecărei funcţii implementate.

class LinkedList<Element> {

private class Node {

Element data;

Node next;

public Node(Element data) {

this.data=data;

this.next=null;

}

public Node(Element data, Node next) {

this.data = data;

this.next = next;

}

public Element getData() {

return this.data;

}

public void setData(Element data) {

this.data = data;

}

public Node getNext() {

return this.next;

}

public void setNext(Node nextNode) {

this.next = nextNode;

}

}

private Node inceput;

private Node sfarsit;

private int size;

public LinkedList() {

inceput = null;

sfarsit = null;

size = 0;

}

private Node getNode(int index){

if(index>size){

throw new IllegalArgumentException("Pozitia este prea mare. Maxim: "+this.size);

}

Node curent = inceput;

for (int i=0;i<index;i++){

curent = curent.getNext();

}

return curent;

}

public void add(int index, Element data) {

if (index > size) {

throw new IllegalArgumentException("Pozitia la care vreti sa inserati este mai mare decat dimensiunea listei" +

"("+this.size+").");

}

else {

Node tmp = new Node(data);

Node current = getNode(index);

if (index==0) {

tmp.setNext(inceput);

inceput = tmp;

sfarsit = inceput;

}

else

if (index == size) {

sfarsit.setNext(tmp);

sfarsit = tmp;

}

else{

tmp.setNext(current.getNext());

current.setNext(tmp);

}

}

size++;

}

public void add(Element data) {

add(size,data);

}

public void replace(Element data, int index) {

getNode(index).setData(data);

}

public void remove(int index) {

if (index == 0) {

inceput = inceput.getNext();

} else {

getNode(index).setNext(getNode(index).getNext().getNext());

}

this.size--;

}

public boolean contains(Element data){

for(int i=0;i<size;i++)

if(getNode(i).data.equals(data))

return true;

return false;

}

public void remove(){

remove(0);

}

public Element get(int index) {

return getNode(index).getData();

}

public int size() {

return this.size;

}

}

class Angajat{

private String nume;

public Angajat(String nume){

this.nume=nume;

}

public String getNume() {

return nume;

}

//doi angajati sunt egali daca au acelasi nume

public boolean equals(Object o){

if(o instanceof Angajat)

if(this.nume.equals( ((Angajat)o).nume))

return true;

return false;

}

//metoda care afiseaza un angajat

public String toString(){

return "Angajat: "+this.nume+"\n";

}

}

class Proiect{

private LinkedList<Angajat> angajati=new LinkedList<Angajat>();

private String nume;

// se adauga un angajat la un proiect

public Proiect(Angajat angajat,String nume){

angajati.add(angajat);

this.nume=nume;

}

//se adauga urmatorii angajati la proiectul curent

public void adaugaAngajat(Angajat angajat){

angajati.add(angajat);

}

private void sorteazaAngajati(){

int s=0;

do{

s=0;

for(int i=0;i<angajati.size();i++){

if(angajati.get(i).getNume().compareTo(angajati.get(i+1).getNume())<0){

Angajat tmp=angajati.get(i);

Angajat tmp2=angajati.get(i+1);

angajati.remove(i);

angajati.add(i,tmp2);

angajati.remove(i+1);

angajati.add(i+1,tmp);

s=1;

}

}

}while(s!=0);

}

// metoda care afiseaza un proiect cu angajatii in oridine inversa alfabetica

public String toString(){

String result="Proiect: "+this.nume+"\n";

sorteazaAngajati();

for(int i=0;i<angajati.size();i++)

result=result+angajati.get(i).toString();

return result;

}

}

class Firma{

private LinkedList<Proiect> proiecte=new LinkedList<Proiect>();

public void adaugaProiect(Proiect proiect){

proiecte.add(proiect);

}

//afiseaza toate proiectele

public String toString(){

String result="";

for(int i=0;i<proiecte.size();i++)

result=result+proiecte.toString();

return result;

}

}

public class Main {

public static void main(String[] args) {

}

}

Probleme(II)

Problema 1

Se da un sir de caractere c si o multime A de caractere. Sa se scrie o functie care determina care elemente ale multimii A apar in scrierea lui c.

Ex. Daca c="LABORATORUL DE SDA ESTE INTERESANT"

si A={A, B, C, X}

Se va afisa:

A, B

#include <iostream>

#include <string.h>

using namespace std;

/* Pentru ca "A" este considerata a fi multime, inseamna ca elementele ei sunt unice*/

void functie(char c[],char A[])

{

int n=strlen(c),m=strlen(A),i,j,found=0;

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

for(j=found;j<m;j++)

if(c[i]==A[j])

{

cout<<A[j]<<" ";

found++;

}

}

Problema 2

Completati secventele de cod lipsa pentru a gasi o solutie de parcurgere a unui traseu intre doua perechi de coordonate cu piesa de sah tura, atunci cand pe tabla de sah exista spatii libere si obstacole.

#include <stdio.h>

#define nmax 5

#define nmaxx 4

typedef struct coordonate

{

int x;

int y;

}coordonate;

coordonate pos[nmaxx]; //tabloul de posibilitati

coordonate a[nmax*nmax]; //tablou de maxim nmax elemente

int matrice[nmax][nmax] = { { 0, 0, 1, 0, 1 },

{ 0, 0, 0, 0, 1 },

{ 1, 1, 0, 0, 1 },

{ 1, 0, 1, 1, 0 },

{ 0, 1, 0, 1, 0 }, }; //matricea initiala (0=liber)

void initializare(int n) //int a[] variabila globala

{

//initializarea posibilitatilor in sensul acelor de ceasornic

int i;

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

pos[i]=!(i%2);

}

void afiseaza_solutia(int n)

{

int i;

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

printf("X=%d Y=%d\n", a[i].x, a[i].y);

printf("\n");

}

int acceptabil(coordonate pos)

{

/*Solutia este acceptabila daca se afla pe o pozitie libera (==0) si daca e nevizitata */

if(matrice[pos.x][pos.y]==0)

return 1;

return 0;

}

int solutie(int k, coordonate c,coordonate c_final)

{

if(k==nmax-1&&c.x=c_final.x&&c.y==c_final.y)

return 1;

else

return 0;

}

void labirint(int k, coordonate c_final) //k pasul, c coordonata curenta

{

int i;

coordonate aux;

if (solutie(k, a[k-1],c_final)) //solutie completa (avem n elemente)

afiseaza_solutia(k);

else

{

for (i = 0; i < 4; i++) // parcurgem pe rand posibilitatile

{

aux.x = a[k-1].x + pos[i].x;

aux.y = a[k-1].y + pos[i].y;

if (acceptabil(aux)) {//daca posibilitatea e acceptabila

a[k] = aux;

matrice[a[k].y][a[k].x] = 2; //marcheaza ca vizitat

labirint(k + 1,c_final); // back1(posibilitate_k+1)

matrice[a[k].y][a[k].x] = 0; //sterge marcajul ca vizitat

}

}

}

} /*labirint*/

int main(void)

{

coordonate c,c2;

initializare(nmax);

printf("Dati valoarea initiala pt x intre (0 si %d): ", nmax);

scanf("%d", &c.x);

printf("Dati valoarea initiala pt y intre (0 si %d): ", nmax);

scanf("%d", &c.y);

printf("Dati valoarea finala pt x intre (0 si %d): ", nmax);

scanf("%d", &c2.x);

printf("Dati valoarea finala pt y intre (0 si %d): ", nmax);

scanf("%d", &c2.y);

if (acceptabil(c)&&(acceptabil(c2))) //daca pozitia initala se incadreaza in limitele hartii si este libera

matrice[c.y][c.x] = 2;

else

printf("Coordonate invalide\n");

a[0] = c; //pasul 0 reprezinta originea

labirint(1, c2);

return 0;

}

Problema 3

Să se modeleze un sistem medical în care pacienţii apar la momente aleatoare şi sunt caracterizaţi printr-o clasă de asigurare (întreg,1,2,...), un nume şi o prioritate (număr întreg), prioritatea fiind valabilă în cadrul clasei respective. La anumite momente, medicul-ul tratează câte un pacient şi anume pe cel de prioritate maximă din clasa ce conţine numărul maxim de pacienţi. Să se definească o listă înlănţuită principală pentru clase şi cozi implementate prin tablouri pentru pacienţii fiecărei clase şi să se implementeze operatorii:

  • actualizare_pacient(nume, clasa_nouă, prioritate_nouă) – funcţia caută un pacient după nume şi apoi îl mută într-o nouă clasă şi îi atribuie o nouă prioritate;

  • listare() – listează toţi pacienţii, pe clase.

Se va descrie în cuvinte rolul fiecărei structuri de date folosite si a fiecărei funcţii implementate.

class LinkedList<Element> {

private class Node {

Element data;

Node next;

public Node(Element data) {

this.data=data;

this.next=null;

}

public Node(Element data, Node next) {

this.data = data;

this.next = next;

}

public Element getData() {

return this.data;

}

public void setData(Element data) {

this.data = data;

}

public Node getNext() {

return this.next;

}

public void setNext(Node nextNode) {

this.next = nextNode;

}

}

private Node inceput;

private Node sfarsit;

private int size;

public LinkedList() {

inceput = null;

sfarsit = null;

size = 0;

}

private Node getNode(int index){

if(index>size){

throw new IllegalArgumentException("Pozitia este prea mare. Maxim: "+this.size);

}

Node curent = inceput;

for (int i=0;i<index;i++){

curent = curent.getNext();

}

return curent;

}

public void add(int index, Element data) {

if (index > size) {

throw new IllegalArgumentException("Pozitia la care vreti sa inserati este mai mare decat dimensiunea listei" +

"("+this.size+").");

}

else {

Node tmp = new Node(data);

Node current = getNode(index);

if (index==0) {

tmp.setNext(inceput);

inceput = tmp;

sfarsit = inceput;

}

else

if (index == size) {

sfarsit.setNext(tmp);

sfarsit = tmp;

}

else{

tmp.setNext(current.getNext());

current.setNext(tmp);

}

}

size++;

}

public void add(Element data) {

add(size,data);

}

public void replace(Element data, int index) {

getNode(index).setData(data);

}

public void remove(int index) {

if (index == 0) {

inceput = inceput.getNext();

}

else {

getNode(index).setNext(getNode(index).getNext().getNext());

}

this.size--;

}

public boolean contains(Element data){

for(int i=0;i<size;i++)

if(getNode(i).data.equals(data))

return true;

return false;

}

public void remove(){

remove(0);

}

public Element get(int index) {

return getNode(index).getData();

}

public int size() {

return this.size;

}

}

class Pacient{

private String nume;

private int prioritate;

public Pacient(String nume, int prioritate){

this.nume=nume;

this.prioritate=prioritate;

}

public String getNume(){

return this.nume;

}

public void setNume(String nume){

this.nume=nume;

}

public int getPrioritate(){

return this.prioritate;

}

public void setPrioritate(int prioritate){

this.prioritate=prioritate;

}

/*Doi pacienti sunt cosiderati a fi egali daca au acelasi nume*/

public boolean equals(Object o){

if(o instanceof Pacient)

if(this.nume.equals(((Pacient)o).nume))

return true;

return false;

}

public String toString(){

String result="Nume pacient: ";

result=result+this.nume+"\nPrioritate: "+this.prioritate+"\n";

return result;

}

}

/*Membrii din aceeasi grupa, au aceeasi clasa de asigurare*/

class GrupePacienti{

private int clasaAsigurare;

private LinkedList<Pacient> pacienti=new LinkedList<Pacient>();

private int numarPacienti=0;

public GrupePacienti(int clasaAsigurare){

this.clasaAsigurare=clasaAsigurare;

}

/*Adauga un pacient in grupa curenta de pacienti*/

public void add(Pacient p){

pacienti.add(p);

numarPacienti++;

}

/*Consider ca pacientul exista, pentru a nu mai scrie exceptii(sau a arunca una predefinita de tip uncheked)*/

public int found(Pacient p){

for(int i=0;i<numarPacienti;i++)

if(pacienti.get(i).equals(p))

return i;

return -1;

}

public void remove(Pacient p){

pacienti.remove(found(p));

}

public LinkedList<Pacient> getPacienti() {

return pacienti;

}

/*Afisare tuturor pacientilor din grupa curenta*/

public String toString(){

String result="";

for(int i=0;i<numarPacienti;i++)

result=result+pacienti.get(i).toString();

result=result+"\n";

return result;

}

public Pacient getPacientCuPrioritateMaxima(){

int maxim=pacienti.get(0).getPrioritate();

Pacient aux=null;

for(int i=1;i<numarPacienti;i++)

if(pacienti.get(i).getPrioritate()>maxim){

maxim=pacienti.get(i).getPrioritate();

aux=pacienti.get(i);

}

return aux;

}

}

class SistemMedical{

private LinkedList<GrupePacienti>sistem=new LinkedList<GrupePacienti>();

private int numarGrupe=0;

public void add(GrupePacienti grupe){

sistem.add(grupe);

numarGrupe++;

}

public void actualizarePacient(Pacient p,GrupePacienti grupe){

/*Il gasesc intr-o grupa si in sterg de acolo si il adaug la alta grupa*/

for(int i=0;i<numarGrupe;i++)

if(sistem.get(i).getPacienti().contains(p)) {

int pozitie = sistem.get(i).found(p);

sistem.get(i).getPacienti().remove(pozitie);

}

grupe.add(p);

}

public String toString(){

String result="";

for(int i=0;i<numarGrupe;i++)

result=result+sistem.get(i).toString()+"\n";

return result;

}

private GrupePacienti getGrupaMaxima(){

int maxim=sistem.get(0).getPacienti().size();

GrupePacienti aux=null;

for(int i=1;i<numarGrupe;i++)

if(sistem.get(i).getPacienti().size()>maxim){

maxim=sistem.get(i).getPacienti().size();

aux=sistem.get(i);

}

return aux;

}

/*Elimin pacientul din grupa cu numarul maxim de pacienti si priotate maxima*/

public void remove(){

GrupePacienti maxim=getGrupaMaxima();

Pacient prioritateMaxima=maxim.getPacientCuPrioritateMaxima();

int pozitie=maxim.found(prioritateMaxima);

maxim.getPacienti().remove(pozitie);

}

}

public class Main {

public static void main(String[] args) {

}

}