This is an old revision of the document!


Laboratorul 01.

Observație

Datele de intrare se vor da fie ca parametri în linia de comandă, fie ca valori fixe ale aplicațiilor!

Problema 1

Creați un proiect Java nou, apoi creați un fișier sursă simplu numit Prob1.java.

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.

class Test {
	public static void main(String args[]) {
		System.out.println("Test Java");
	}
}

2. Adăugați modificatorul public în fața declarației clasei Test și î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.

IMPORTANT!

Clasele care NU au atributul public pot avea un nume diferit de numele fișierului sursă, însă dacă adăugăm atributul public este obligatoriu ca numele clasei și numele fișierului sursă, în care se află clasa, să coincidă.

Problema 2

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).

IMPORTANT!

Metoda printInt se va apela în main astfel:

Prob2 obiect = new Prob2(); // creare obiect de tip Prob2
obiect.printInt(42); //apelare metoda printInt
obiect.printInt(7 + 5);
obiect.printInt(3 * 10);

Problema 3

Creați un fișier numit Prob3.java în care scrieți două clase:

  • public class Prob3, care conține metoda main
  • class Printer, în care definiți o metodă nestatică printInt(int x) care afișează valoarea primită ca parametru.

Î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.

IMPORTANT!

Într-un fișier NU pot fi definite două clase publice.

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.

Observație

Argumentele se pot transmite astfel:

  • dacă programul se rulează dintr-un IDE, se vor urma instrucțiunile de la începutul laboratorului;
  • dacăprogramul se rulează din linia de comandă: java numeprogram arg1 arg2 arg3

Problema 5

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ă.

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.

Observație

Pentru afișarea unei expresii de forma p = a + b se va scrie:

System.out.println(p + " = " + a + " + " + b);

unde p, a, b sunt variabile numerice de orice tip (short, int, long, float, double).

Problema 8

În acest exercițiu veți lucra cu tablouri ș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.

Observație

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:

int x = (int) (Math.random() * 100); // 0..99

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:

int min = 10, max = 20;
int y = min + (int) (Math.random() * (max - min + 1)); // 10..20

poo/laboratoare/01.1759685541.txt.gz · Last modified: 2025/10/05 20:32 by carmen.odubasteanu
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