Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo:laboratoare:01 [2017/12/22 12:53]
mihai.nan
poo:laboratoare:01 [2025/10/05 22:04] (current)
carmen.odubasteanu [Problema 8]
Line 8: Line 8:
  
 ====Problema 1==== ====Problema 1====
-Să se introducă programul de mai jos (clasa **//​Test//​**) într-un fișier ​cu numele ''​Prob1.java'',​ folosind mediul integrat NetBeans / Eclipse+Creați un proiect Java nou, apoi creați ​un fișier ​sursă simplu numit **Prob1.java**.  
-1. Să se compileze ​și să se ruleze următorul program:+ 
 +**1.** În acest fișier scrieți o clasă numită **Test** care conține metoda ''​main'' ​și afișează în consolă mesajul "//​Test Java//"​. Rulați programul și verificați apariția mesajului în fereastra Run. 
 <code java> <code java>
 class Test { class Test {
Line 17: Line 19:
 } }
 </​code>​ </​code>​
-Adăugați ​atributul **//public//** înaintea cuvântului cheie **//​class//​**,​ recompilați și executați programulRezolvați problema ​apărută!+ 
 +**2.** ​Adăugați ​modificatorul ''​public''​ în fața declarației clasei Test șîncercați din nou să rulați. Observați eroarea raportată de IDE și apoi rezolvați-o făcând ca numele fișierului și numele clasei publice să coincidăPuteți alege fie să redenumiți fișierul în Test.java, fie să redenumiți clasa în Prob1. Recompilați și rulați din nou pentru a confirma că problema ​este rezolvată și că mesajul este afișat corect.
  
  
Line 28: Line 31:
  
 ====Problema 2==== ====Problema 2====
-Să se scrie o clasă **//Problema2//** care conţine două metode (funcţii):​ +Scrieți un program în fișierul **Prob2.java** care definește ​o clasă **Prob2** și o //**__metodă nestatică__**// numită ''​printInt'',​ ce primește un număr întreg și îl afișează ​la consolă. În metoda ​''​main'',​ creați ​**un obiect** al clasei Prob2 (adică **o instanță** a clasei) ​și apelați metoda nestatică ''​printInt''​ de mai multe ori, folosind valori constante (de pildă 42, 7 + 5, 3 * 10).
-  ​metoda ​**//print()//** care primește un argument de tip String pe care-l ​afișează+
-  * metoda **//main()//** care apelează funcția ​**//print()//** pentru afișarea unui șir constant.+
  
 <note warning> <note warning>
 <color #​FF0000>​**IMPORTANT!**</​color>​ <color #​FF0000>​**IMPORTANT!**</​color>​
  
-Metoda ​print se va apela în **//​main//​** astfel:+Metoda ​printInt ​se va apela în **//​main//​** astfel:
 <code java> <code java>
-Problema2 ​obiect = new Problema2(); // creare obiect de tip Problema2 +Prob2 obiect = new Prob2(); // creare obiect de tip Prob2 
-obiect.print("​Test"​); //apelare metoda ​print+obiect.printInt(42); //apelare metoda ​printInt 
 +obiect.printInt(7 + 5); 
 +obiect.printInt(3 * 10);
 </​code>​ </​code>​
 </​note>​ </​note>​
Line 48: Line 51:
  
 ====Problema 3==== ====Problema 3====
-  - Să se modifice clasa scrisă la exerciţiul anterior prin definirea a două clase, ​fiecare ​conţinând câte o metodă: +Creați un fișier numit **Prob3.java** în care scrieți ​două clase
-    * o clasă pentru metoda **//main()//**+  * ''​public class Prob3''​care conține metoda ''​main''​ 
-    * o clasă pentru metoda ​**//print()//**. +  ''​class Printer'',​ în care definiți ​__//**metodă nestatică**//__ ''​printInt(int x)''​ care afișează valoarea primită ca parametru.
-  - as+
  
 +În ''​main''​ apelați metoda ''​printInt''​ folosind o instanță a clasei Printer, ca în exemplul de la problema precedentă.
  
 +Acum adăugați modificatorul ''​public''​ și la clasa Printer, încercați să compilați și observați eroarea. Pentru a corecta, păstrați o singură clasă publică pe fișier: lăsați Prob3 publică în Prob3.java și mutați Printer într-un fișier separat numit **Printer.java**,​ unde o puteți declara public. Compilați din nou și rulați Prob3.
  
 +Opțional, adăugați și în Printer o metodă ''​main''​ minimală care apelează ''​printInt'',​ apoi rulați-o separat pentru a confirma că ambele clase se pot executa independent când au propriul fișier.
  
-1.  
-\begin{itemize} 
-\item 
-o clasă pentru metoda \textbf{main()};​ 
-\item 
-o clasă pentru metoda \textbf{print()}. 
-\end{itemize} 
-\par 
-\noindent 
-Să se verifice dacă ambele clase din fi\c{s}ier pot fi publice. 
-\par 
-\noindent 
-Apelul metodei \textbf{print} se va realiza în acelaşi mod ca la problema 2! 
-\newline 
-\warning{IMPORTANT !}  
-\begin{Warning} 
-Într-un fi\c{s}ier \textbf{\textit{nu}} pot fi definite două \textbf{\textit{clase publice}}. 
-\end{Warning} ​ 
-\par 
-\setlength{\parindent}{7ex} 
-2. Să se modifice programul anterior prin crearea a două fişiere sursă, fiecare conţinând o clasă cu câte o singură metodă. Incercati să executa\c{t}i ambele clase. 
-\noindent 
-\newline 
-\newline 
-\warning{IMPORTANT !}  
-\begin{Warning} 
-O \textbf{\textit{clasă executabilă}} este o clasă care con\c{t}ine obligatoriu \textbf{\textit{metoda main}}. 
-\end{Warning} 
  
-\noindent +<note important>​ 
-\chapter{\textbf{Problema 4}} +<color red>​**IMPORTANT!**</​color>​ 
-\par + 
-\setlength{\parindent}{7ex} +Într-un fișier **NU** pot fi definite două **clase publice**. 
-Să se scrie un program ​pentru ​afi\c{s}area tuturor argumentelor ​primite în linia de comandă. +</​note>​ 
-\begin{myblock}{Observatie}+ 
 + 
 +====Problema 4==== 
 +Scrieți ​un program ​în fișierul **Prob4.java** care afișează toate argumentele ​primite în linia de comandă. 
 + 
 +În metoda ''​main'',​ parcurgeți vectorul ''​args''​ și afișați, pentru fiecare element, indicele și valoarea lui, pe câte o linie separată. Dacă programul este rulat fără argumente, afișați un mesaj clar, de tipul "Nu s-au primit argumente."​. 
 + 
 +Pentru testare, rulați programul de mai multe ori: fără argumente, cu un singur argument și apoi cu mai multe (ex.: Ana are mere). Observați cum se modifică lungimea vectorului args și ordinea elementelor afișate. 
 + 
 +<note tip> 
 +<color green>​**Observație**</​color>​ 
 Argumentele se pot transmite astfel: Argumentele se pot transmite astfel:
-\begin{itemize} +  * dacă programul se rulează dintr-un IDE, se vor urma instrucțiunile ​de la începutul laboratorului;​ 
-\item +  * dacăprogramul se rulează ​din linia de comandă: ​''​java numeprogram arg1 arg2 arg3''​ 
-daca programul se ruleaza din NetBeans / Eclipse ​se vor urma instructiunile ​de la începutul laboratorului;​ +</​note>​
-\item +
-daca programul se ruleaza ​din linia de comandă: +
-\setlength{\parindent}{14ex} +
-\par +
-\textbf{\textit{java numeprogram arg1 arg2 arg3}} +
-\end{itemize} +
-\end{myblock}+
  
-\noindent 
-\chapter{\textbf{Problema 5}} 
-\par 
-Să se realizeze o clasă care cuprinde o metodă recursivă care calculează puterea întreagă a unui numar întreg \c{s}i o metodă pentru afi\c{s}area rezultatului func\c{t}iei,​ alături de rezultatul func\c{t}iei statice \textbf{\textit{Math.pow(baza,​ exp)}} pentru a se putea valida. Clasa va con\c{t}ine un \textbf{main} în care se vor testa cele două metode definite anterior. 
  
-\warning{IMPORTANT !}  +====Problema 5==== 
-\begin{Warning} +Scrieți în fișierul **Prob5.java** o clasă **Prob5** care conține o __//**metodă ​nestatică**//__ ''​powInt(int baza, int exp)''​ ce calculează recursiv puterea întreagă pentru exponenți pozitiviÎn ''​main''​ alegeți câteva perechi constante de valori pentru bază și exponent ​(de exemplu 3^4, 2^10, 5^0), apelați metoda voastră și afișați rezultatul în consolă.
-\noindent +
-O \textbf{\textit{metodă ​statică}} a unei clase se apelează prin: +
-\setlength{\parindent}{17ex} +
-\par\color{Blue}\textbf{NumeClasă.numeMetodăStatică(...)+
-\newline +
-Ex: \texttt{Math.pow(...);​} +
-\end{Warning} ​+
  
 +Pentru validare, afișați alături rezultatul returnat de ''​Math.pow(baza,​ exp)''​. Comparati rezultatele si afisati rezultatul comparatiei,​ afisand mesajul "​egale"​ sau "​diferite"​. Păstrați bazele și exponenții suficient de mici încât rezultatul să nu depășească limitele tipului întreg pe care îl folosiți; dacă apare un rezultat "​ciudat",​ cel mai probabil s-a produs **overflow**.
 +
 +
 +
 +
 +====Problema 6====
 +În fișierul **Prob6.java** scrieți o clasă **Prob6** care conține o __//​**metodă nestatică**//​__ ''​isPrime(int n)''​ ce întoarce true dacă n este număr prim și false în caz contrar.
 +
 +În metoda ''​main''​ parcurgeți toate numerele întregi de la 1 la 20 și afișați pentru fiecare un mesaj clar, de forma "n prim" sau "n nu e prim".
 +
 +**Considerați numărul 1 ca fiind număr prim.**
 +
 +
 +====Problema 7====
 +**Ipoteza lui Goldbach** spune că orice număr par se poate scrie ca sumă a două numere prime.
 +
 +Exemple: 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 3 + 7 sau 5 + 5. 
 +
 +Scrieți în fișierul **Prob7.java** un program care verifică ipoteza lui Goldbach pentru primele n numere pare. Refolosiți funcția ''​isPrime(int)''​ din **problema anterioară**.
 +
 +Pentru fiecare număr par p, afișați exact forma p = a + b (o singură dată fiecare pereche, fără simetrice repetate).
 +
 +Considerați numărul 1 prim și mențineți n (valoare constantă în cod) suficient de mic pentru a verifica rapid.
 +
 +<note tip>
 +<color green>​**Observație**</​color>​
 +
 +Pentru afișarea unei expresii de forma ''​p = a + b''​ se va scrie:
 +<code java>
 +System.out.println(p + " = " + a + " + " + b);
 +</​code>​
 +unde ''​p'',​ ''​a'',​ ''​b''​ sunt variabile numerice de orice tip (''​short'',​ ''​int'',​ ''​long'',​ ''​float'',​ ''​double''​).
 +</​note>​
 +
 +
 +
 +====Problema 8====
 +În acest exercițiu veți lucra cu vectori și cu două metode utile din clasa **Arrays**: ''​Arrays.sort''​ pentru ordonare și ''​Arrays.binarySearch''​ pentru căutare rapidă într-un tablou deja sortat. Ideea este simplă: mai întâi puneți elementele într-un tablou, le ordonați crescător, apoi căutați o cheie și interpretați poziția returnată de funcția de căutare.
 +
 +Creați fișierul **Prob8.java** și, în metoda ''​main'',​ **creați** un tablou de ''​int''​ de dimensiune fixă (de exemplu n = 12). **Populați-l** cu valori pseudo-aleatoare într-un interval mic. **Afișați** conținutul inițial al tabloului, apoi **apelați** ''​java.util.Arrays.sort(tab)''​ pentru a-l ordona și **afișați** din nou rezultatul, ca să se vadă efectul sortării.
 +
 +După sortare, **alegeți** o cheie pentru test. Cel mai comod este să alegeți o valoare despre care știți sigur că există în tablou, de exemplu elementul din mijloc după sortare; în felul acesta ''​Arrays.binarySearch(tab,​ cheie)''​ vă va întoarce un indice valid (>= 0), iar apoi veți **afișa** un mesaj clar care indică poziția găsită. **Testați** apoi și un caz în care cheia nu există (de exemplu o valoare mai mare decât toate elementele din tablou) și **observați** ce returnează funcția.
 +
 +
 +<note tip>
 +<color green>​**Observație**</​color>​
 +
 +Metoda ''​Math.random()''​ întoarce un ''​double''​ în intervalul **[0.0, 1.0)**, adică poate fi 0.0, dar este întotdeauna mai mic decât 1.0. Pentru a obține un întreg într-un interval dorit, **înmulțiți rezultatul cu lățimea intervalului** și apoi **faceți conversia la int**. ​
 +
 +De exemplu, valori întregi între 0 și 99 generați astfel:
 +<code java>
 +int x = (int) (Math.random() * 100); // 0..99
 +</​code>​
 +
 +Observați ordinea: mai întâi se înmulțește,​ abia apoi se face conversia la int. Dacă ați scrie ''​(int) Math.random() * 100'',​ conversia s-ar face înainte (rezultând mereu 0) și ați obține doar 0.
 +
 +Dacă vreți un interval general [min, max] inclusiv, folosiți formula:
 +<code java>
 +int min = 10, max = 20;
 +int y = min + (int) (Math.random() * (max - min + 1)); // 10..20
 +</​code>​
 +
 +</​note>​
  
  
-\vspace{0.2cm} 
-\noindent 
-\chapter{\textbf{Problema 6}} 
-\par 
-Să se implementeze o clasă cu două metode: 
-\begin{itemize} 
-\item 
-o metodă de tip \textbf{\textit{boolean}} care verifică dacă un număr întreg dat este prim; 
-\item 
-metoda \textbf{\textit{main()}} care verifică metoda anterioară pentru toate numerele naturale mai mici ca 20. 
-\end{itemize} 
  
-\noindent 
-\chapter{\textbf{Problema 7}} 
-\par 
-Să se scrie un program pentru verificarea ipotezei lui Goldbach pentru primele \textbf{n} numere pare, prin afi\c{s}area tuturor sumelor de două numere prime prin care poate fi exprimat un număr par. Variabila \textbf{n} poate fi ini\c{t}ializată cu o valoare constantă. 
-\par 
-\textbf{Ipoteza lui Goldbach:} orice nr par poate fi descompus ca sumă de cel pu\c{t}in o pereche de două numere prime. Se consideră $1$ ca fiind număr prim. 
  
-\begin{myexampleblock}{Cod sursă Java} 
-\par 
-Pentru afi\c{s}area unei expresii de forma \textbf{\textit{a = b + c}} se va scrie: 
-\begin{lstlisting} 
-System.out.println(a + " = " + b + " + " + c); 
-\end{lstlisting} 
-unde \textbf{\textit{a}},​ \textbf{\textit{b}},​ \textbf{\textit{c}} sunt variabile numerice de orice tip (\textbf{\textit{short}},​ \textbf{\textit{int}},​ \textbf{\textit{long}},​ \textbf{\textit{float}},​ \textbf{\textit{doube}}). 
-\end{myexampleblock} 
  
-\noindent 
-\chapter{\textbf{Problema 8}} 
-\par 
-Să se scrie un program pentru ordonarea unui vector de numere \c{s}i căutarea binară în acest vector, folosind metodele statice \textbf{\textit{sort()}} si \textbf{\textit{binarySearch()}} din clasa \textbf{\textit{Arrays}}. Vectorul va con\c{t}ine numere generate aleator folosind metoda statică \textbf{\textit{random()}} din clasa \textbf{\textit{Math}},​ cu rezultat de tip \textbf{\textit{double}}. 
  
poo/laboratoare/01.1513940036.txt.gz · Last modified: 2017/12/22 12:53 by mihai.nan
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0