Administrative

Assessment

  • Lab project --> 60 points
  • Course examination --> 30 points (30%)
  • Lab activity --> up to 10 points cumulated over the entire 14 weeks

The contents of the tests will be oriented towards verifying the level of understanding of the concepts, results, and way of thinking presented at the course and at the laboratories. Therefore, the answers must be based on these elements, the alternative solutions being considered only if they are correlated/compared with those taught in the course/laboratories or if they are part of the recommended additional bibliography, in which case it must be mentioned.

Minimal performance standards

  • 10 points from the course examination
  • 20 points from lab project

The status of graduated / non-graduated is established only according to the fulfillment of the minimum performance standards (all of them). The total score reflects the fulfillment of the minimum standard only if it incorporates sufficient points in the evaluation of the elements included in the standards.

Grades

They are established according to the distribution of the scores of those promoted: the sum of the scores obtained at the laboratories and the ones from the tests. The percentages proposed by ECTS ("top 10%, next 25%, next 30%, next 25%, lowest 10%") correspond to the normal distribution and are indicative. Their application will be made with possible changes, depending on the actual distribution of scores.

For this reason, the ECTS percentages are only supported as a starting point in establishing the final grades; if the distribution of scores is different than the normal one, the percentages will be adjusted accordingly.

For students from past years

Previous results obtained on past Android courses/labs will NOT be equated. You will need to take both the lab and course tests to pass the mobile programming course.

Conducting the courses and the labs

Both Course and Lab will be held on-site. For asynchronous communication, the discipline's Discord Server will be used.

Courses

  1. Introduction

    • History & characteristics
    • Basic types
    • Strings
    • Operators
    • Control flow instructions
    • Custom Types
    • Functions
    • Link: Course 1
  2. Collections

    • Iterable
    • Lists
    • Map & Sets
    • Exceptions
    • Link: Course 2
  3. Object Oriented programming

    • Classes
    • Constructors
    • Data members
    • Methods
    • Properties
    • Operators
    • Inheritance
    • Link: Course 3
  4. Generics & Libraries

    • Generics
    • Regular expressions
    • Date/Time
    • Serialization
    • Custom libraries
    • Link: Course 4
  5. Flutter framework

    • Introduction (download, setup, install)
    • Material Design concepts
    • Basic Widgets
    • Link: Course 5
  6. Stateful widgetds

    • Stateful widgets
    • Timers
    • Custom painters
    • Link: Course 6

RO: Reguli alegere proiect:

  1. Proiectele sunt individuale si nu se pot face in echipa.
  2. Proiectele sunt impartite in 3 categorii (A, B, C) in functie de complexitate.
  3. Proiectele trebuie alese pana pe 15.04.2026 si nu mai pot fi schimbate.
  4. Orice proiect poate fi ales de maxim 5 studenti. Proiectele vor fi asignate pe criteriul: primul venit, primul servit.
  5. Alegerea proiectului inseamna trimitirea unui mesaj privat pe Discord catre profesorul de laborator. Mesajul trebuie sa contina numele studentului si id-ului proiectului. Ex: Popescu Marian - proiect A7
  6. Proiectele pot fi prezentate in oricare laborator din a doua partea a semestrului (laboratoarele 9-14).
  7. Proiectele pot fi punctate si partial.
  8. Orice proiect cu mentiunea (mobile + web) trebuie sa aiba implementare specifica pentru ambele platforme. (si nu doar sa va bazati pe faptul ca flutter suporta ambele platforme si ca transforma automat ui-ul pentru a se potrivi pe ambele platforme).
  9. Pentru propunerile personale trebuie sa discutati cu profesorul de laborator pentru a va incadra propunerea in una din cele 3 categorii.

EN: Project Selection Rules:

  1. Projects are individual and cannot be done in teams.
  2. Projects are divided into 3 categories (A, B, C) based on complexity.
  3. Projects must be chosen by April 15, 2026 and cannot be changed afterward.
  4. Any project can be selected by a maximum of 5 students. The projects will be assigned on a first-come, first-served basis.
  5. Choosing the project means sending a private message on Discord to the lab professor. The message must include the student's name and the project ID. Example: Adams Thomas - project A7
  6. Projects can be presented in any lab session during the second half of the semester (labs 9-14).
  7. Projects can also be graded partially.
  8. Any project labeled (mobile + web) must have a specific implementation for both platforms (you cannot rely solely on Flutter’s ability to support both platforms and automatically adjust the UI).
  9. For personal project proposals, you must discuss with the lab professor to classify your proposal into one of the three categories.

Categoria A

Categoria B

Categoria C

Asigurati-va ca ati citit regulile inainte de a alege un proiect.

Make sure you reviewed the rules before picking a project.

A Category (maximum points 60):

1. AFD

Create a file manager for Android. The user should be able to easily navigate through the filesystem and perform operations such as deleting a file/folder, moving/copying a file/folder, renaming a file/folder and editing/creating text files.

2. SportScores

Create an app for displaying scores for various sports. For each sport there must be several categories, such as leagues from different countries or continental competitions. The data may be fetched from any web service/source. For each sport display live events such as the current score and text commentary. You must be able to access past events and see scheduled future events. The user should be able to follow some events and receive live notifications.

3. TechNewsAgg

Create an app that aggregates tech news from different sites and displays them all in one unified news feed. The app should have a list of possible news sites to which the user can subscribe as well as support for multiple users (locally). Each user will be displayed only news from his subscription list. These preferences should be stored using SharedPreferences. The app should also have a welcome screen. (EX. https://feeder.co/knowledge-base/rss-content/rss-lists-popular-and-useful-rss-feeds/)

4. Netflix app clone (mobile + web):

  • Home page (browse) without playback (no video, just thumbnails)
  • First movie big view (with thumbnail and title)
  • Top10 in Romania list
  • Other categories
  • Netflix Originals (different format)
  • More info page (modal) without playback
  • Series/Films/My List pages

5. Spotify app clone (mobile + web)

  • Left Side panel (web) / bottom nav bar (mobile)
  • Home/Your Library/Search(not functional)
  • Playlists
  • Home page (mobile + web)
  • Frequent playlists (tiles)
  • Made for User (cards)
  • Other categories
  • Playlist view (mobile + web)
  • Song playing view (no video, just background)
  • Like song functionality (liked songs playlist)

6. Weather Alarm

Create an app that will allow you to set alarms for different times of the day. Each alarm should be placed into a list after creation, sorted by trigger time and should have the option to have as a ringtone the reading out loud of the weather on that day (general presentation, temperature, wind, rain chance). The app should get the location of the user automatically and should use a weather API for weather information in that location.

7. Tazz app clone (mobile + web):

  • HomePage
  • Food & More
  • Restaurante Favorite
  • Meniul Zilei
  • BottomNavBar
  • HomePage
  • Cos
  • Comenzi
  • Purchase history, with purchase item view
  • Cont
  • Name
  • View for Restaurants
  • View for one Restaurant
  • Header with thumbnail and details
  • Tab view with items by category (each tab is a category)

8. Travel Planning App. (mobile + web)

The user should be able to choose a location (a city) and for that location to organize a single or multi day trip. Each day should be viewed in a tab bar view with a timeline for each day. For each element in the timeline the user must be able to move it up or down, or remove it entirely. Also, the user must be able to create new elements in the timeline. For each element he must be able to select geographical coordinates, select a duration and add comments. (Checkout visitacity.com)

9. PlayStation App clone (mobile only)

  • Homepage
  • 3 of the most recent played games displayed with thumbnail and trophy details
  • Top panel for friends chats and friends online
  • BottomNavBar
  • Play (homepage)
  • Explore
  • PS Store
  • GameLibrary
  • Search

10. HBO Max App clone (web + mobile)

  • Home page (browse) without playback (no video, just thumbnails)
  • First movie big view (with thumbnail and title)
  • My List
  • Other categories
  • Just Added (different format)
  • Single item page (for series with seasons, for movies more like this and details)
  • Side Panel (mobile + web)
  • Categories
  • Hubs
  • BottomNavBar (mobile)
  • Home
  • Search
  • Account

11. Duolingo clone (web + mobile)

  • Learning path with icons
  • Lesson process with at least 3 types of questions (multiple choice, fill the gap, sort words in a sentence) with progress bar and losing lives functionality
  • League view

12. Discord clone (web + mobile)

  • Servers bar
  • Channels list
  • Conversations (text)
    • "chat bubble" with avatar name date and message
  • Profile view
  • Notifications
  • All other icons without functionality

13. Poker trainer:

Create an app that helps the user train for different Texas Hold`Em hand configurations.

  • An user should be able to configure the number of players he/she plays against.
  • Each round, the user gets presented a situation where he/she can see their cards but not the other players and the user must make a decission (fold, check, raise, re-raise, all-in) based on the cards on the table (river, flop, turn).
  • You must calculate te percentage of success and show the user what was the best move after the user picks his/her move. A

14. GitKraken Clone

Create an app that helps manage Git operations.

  • An user should be able to save repositories and open them
  • When a User opens a repository, he should see the commits with the relevant info (Author, commit id, timestamp, etc)
  • The app should support as many git operations as possible but minimum (add, commit, push, create branch, make pull request, merge, rebase)
  • Optional: Draw the merge graph

15. Docker Desktop Clone

Create an app that helps manage docker containers.

  • An user should be able to see locally downloaded images and containers.
  • The user should be able to create a new container from an image, stop containers, restart containers or see logs and shell of container.
  • Display aggregate resource usage for all running containers.

Asigurati-va ca ati citit regulile inainte de a alege un proiect.

Make sure you reviewed the rules before picking a project.

B Category (maximum points 45):

1. Google Tasks Clone (mobile + web):

  • Splash Screen
  • Tab Bar Views with Task Lists
  • BottomNavBar with button for new tasklist
  • Split view of completed/to complete tasks for each tasklist

2. Budget Tracker (mobile + web)

The user should be able to insert a new expense with an amount and category. He/she/they should be able to see their expenses grouped by month/day/year and/or by category.

3. Movie App.

This app should give the user the possibility to browse through movies, and for every movie he can see details about plot, actors, producers. Each user should have the possibility to have a list of favorite actors and movies. The user can also see the movies grouped by genre.

4. WhatsApp clone (mobile + web):

  • Chats view
  • Single chat view with messages
  • Dark and light theme

5. Google Keep clone (mobile + web):

  • All Notes view ( list and cards)
  • Single note view (only simple text notes, no checklists or images)
  • Create note
  • Dark and light theme

6. MorseCode

This app should take a phrase and at the touch of a button should make the led on the phone flash the morse code for that phrase. It should also display the code for a certain character when the led is flashing it. The app should also be able to send that code via sms. Also, the app should be able to decrypt the received sms.

7. WhiteTile

The game consists of a grid in which there are white/black tiles coming from the top of the screen to the bottom with an increasing speed. The goal of the game is to touch only the black tiles(which should make a sound). Menu with highscores, share on facebook, new game.

8. FlipFive

This is a logic puzzle in which you have a square grid of 3x3 cells. Each cell is initially either white or black. When you click on a square it flips, or toggles, the color of that square and the colors of its four immediate north, south, east and west neighbors that exist (they don’t exist if they would be outside the grid).The problem is to find the minimum number of cell clicks to transform a grid of all white cells into the input grid (which is always possible). You cannot rotate the grid. link:http://coj.uci.cu/24h/problem.xhtml?pid=3008

9. BlooDoChalenge App clone:

  • Home page (clasament, puncte, numaratoare inversa pana la donare)
  • BottomNavBar
  • “Mai mult” (clasament, istoric donari)

10. Solitaire

Create a Solitaire like game, with records and dificulty levels. It should have several options (like the number of cards that are being drawn - 1 or 3, the backend of the cards, etc).

11. Baby Logger

Create an app that would enable the user to log baby activities like feeding (formula/natural/bottle), diapers (type and size), height and weight, sleep (time and duration). The app should also have a timeline view of the activities that can be filtered by activity type.

Asigurati-va ca ati citit regulile inainte de a alege un proiect.

Make sure you reviewed the rules before picking a project.

C Category (maximum points 30):

1. ScienceCalc

Create a scientific calculator. It will have support for trigonometric functions and other functions. Also it will support composed expressions (use math library).

2. MegaConvertor

Create an app for measuring conversions and currency. It will have support for various physical measures(length, temperature, pressure, weight) and several currencies. The last rates and converted values will be stored persistent. The exchange rates should be automatically feeded.

3. APad

Create a notepad for android. The user should be able to open/edit/save text files and apply some simple formatting options for parts of the text (text font size and style, bold, underline, etc.)

4. CountDown

Create an app which will display a countdown from 5 to 0 with a dynamic time interval without showing the last two digits (0,1). The point of the game is to click that moment when it should be 0 without seeing the actual digit. The app should have a welcome screen, the game, and a menu with “New Game” , “HighScore” and social media share.

Create a game app that will make the user guess the brand name of certain logos displayed as pictures. The app should have a collection of pictures with logos of brands, tagged with the brand name. The user will be displayed the picture and would have to write the name of the brand. The app should have a welcome screen, the game, and a menu with “New Game”, “HighScore” and social media Share.

6. Listonic App clone (web + mobile)

  • Multiple shopping lists
  • Elements in list should have a category
  • Add/delete elements

7. Timer App

The user should be able to set a timer with hour,minute and seconds, after the time ran out, there should be a sound played. The elapsing time should be displayed as well as a graphical feedback (progress indicator). Start, cancel and pause features should be supported.

8. Stopwatch App

The user should be able to start a stopwatch and set lap times. Each lap time should be displayed in the list below the stopwatch. Start, lap, resume and reset functions should be supported.

9. TicTacToe

Create a TicTacToe game, with options to run against the computer (with different levels) or another human opponent.

10. HangMan

Make a simple hangman game, with a dictionary of 100 romanian words that are chosen randomly.

Labs Thursday

Lab 1 - Wednesday

  1. Write and compile a dart program that prints the first 100 prime numbers.
  2. Write a DART program that extracts all words from a phrase. A word is considered to be formed out of letters and numbers. Words are separated one from another with one or multiple spaces or punctuation marks.
  3. Write a dart function that extracts all the numbers from a text. The numbers can be double or int. The program will return the sum of the extracted numbers.
  4. Write a dart function that converts a string of characters written in UppeCamelCase into lowercase_with_underscore.

Laborator 02

Problema 1:

Pentru o lista de numere primite ca parametru sa se afiseze sub-lista cu suma maxima.

Exemplu:

Cmd: "maxsumarray.exe -2 1 -3 4 -1 2 1 -5 4"

Output: 6

Explicatie: [4,-1,2,1] are cel mai mare sum = 6.

Problema 2:

Sa se construiasca un Map (dictionar) cu mai multe nivele unde fiecare cheie este o litera dintr-un cuvant iar valorea este fie urmatoarea litera din cuvant daca aceasta exista, fie numarul aparitiilor acelui cuvant. Pentru "abcd" si "adcb" ar arata astfel:

{
    "a": {
        "b": {
            "c": {
                "d": 1
            }
        },
        "d": {
            "c": {
                "b": 1
            }
        }
    }
}

Pentru o linie de comanda precum "freq.exe abcd adfc albc adbc arlv ab" sa se afiseze cate cuvinte incep cu "ab" (ultimul parametru) precum si cuvintele. In caz ca nu se gaseste niciunul se va afisa 0. Pentru exemplu de mai sus s-ar afisa:

Exemplu:

Cmd: "freq.exe abcd adfc albc adbc arlv ab"

Output:

    Count: 1

    abcd

Problema 3:

Pentru doua stringuri a si b, sa se verifice daca a este subsecventa a lui b. Se considera subsecventa a unui string, un nou string care este format din caracterele stringului original stergand unele caractere, fara sa schimbe pozitia caracterelor ramase (ex. "ace" este subsecventa a lui "abcde", dar "aec" nu este)

Problema 4:

Pentru 2 stringuri a si b sa se verifice daca a este anagrama a lui b. O anagrama este un cuvant format din literele altui cuvant, dar in alta ordine.

Lab 02 - Tuesday - 10-12

Problem 1:

For a list of numbers received as a parameter, display the sublist with the maximum sum.

Example:

Cmd: "maxsumarray.exe -2 1 -3 4 -1 2 1 -5 4"

Output: 6

Explanation: [4,-1,2,1] has the highest sum = 6.

Problem 2:

Construct a Map (dictionary) with multiple levels where each key is a letter from a word, and the value is either the next letter in the word if it exists, or the number of occurrences of that word. For "abcd" and "adcb", it would look like this:

{
    "a": {
        "b": {
            "c": {
                "d": 1
            }
        },
        "d": {
            "c": {
                "b": 1
            }
        }
    }
}

For a command line like :

"freq.exe abcd adfc albc adbc arlv ab"

display how many words start with "ab" (the last parameter) as well as the words themselves. If none is found, display 0. For the above example, it would display:

Example:

Cmd: "freq.exe abcd adfc albc adbc arlv ab"

Output:
Count: 1
abcd

Problem 3:

For two strings a and b, verify if a is a subsequence of b. A subsequence of a string is a new string that is formed by deleting some characters of the original string without changing the position of the remaining characters (e.g., "ace" is a subsequence of "abcde", but "aec" is not).

Problem 4:

For 2 strings a and b, check if a is an anagram of b. An anagram is a word formed by rearranging the letters of another word.

Laborator 03

Problem 1:

Implement a Stack ( .push(), pop(), top(), isEmpty(), toString() )

Problem 2:

Implement a class with a fromJson(string json) constructor + toJson()

class Exemplu {
    int varA;
    int varB;
    String varC;
    List <int> varD;
    double varE;
}

Problem 3:

a) Create a class called BankClient that has 3 private attributes:

- Id : which is generated automatically and represents the order of the clients in the bank Data Base (starting from 1 and can't be changed)

- Name (can't be changed)

- Balance has 3 methods (get, add, substractIfPossible). It will be initialized with 0 and can't be negative.

b) Create a constructor that uses "Initializer list" to initialize the name.

c) Create a static method that prints the number of clients and the bank balance.

d) Create a small test program (main).

Laborator 04

Problema 1:

Scrieti o functie care primeste ca parametru un String regex, un String text si un int x, si returneaza substringurile de lungime x care fac match pe expresia regulata.

Problema 2:

Implementati o Coada folosind fisiere ca storage.

Problema 3:

Implementati clasa MathOps unde T si G pot fi int, double sau String:

MathOps <T,G> {
    int sum(T obj1, G obj2);
    int div(T obj1, G obj2);
}

Problema 4:

Implementanti Map<String,dynamic> jsonSumJson(String jsonPath1, String jsonPath2), unde jsonPath1 si jsonPath2 sunt path-uri catre doua fisiere json. Operatia de adunare intre 2 fisiere json ar trebui sa rezulte intr-un json in care pentru nodurile comune se va alege valoarea din cel de-al doilea fisier json. Functia va fi scrisa intr-o librarie separata de cea din care va fi apelata.

English

Problema 1:

Write a function that takes as parameters a String regex, a String text, and an int x, and returns the substrings of length x that match the regular expression.

Problema 2:

Implement a Queue using files as storage.

Problema 3:

Implement the MathOps class where T and G can be int, double, or String.

MathOps <T,G> {
    int sum(T obj1, G obj2);
    int div(T obj1, G obj2);
}

Problema 4:

Implement a function Map<String, dynamic> jsonSumJson(String jsonPath1, String jsonPath2), where jsonPath1 and jsonPath2 are paths to two JSON files. The operation of summing two JSON files should result in a JSON where, for common nodes, the value from the second JSON file will be chosen. The function will be written in a separate library from the one where it will be called.

Laborator 05

Problema 1:

Faceti o aplicatie care sa gestioneze o lista de cumparaturi. Aplicatia va contine cel putin un ListView, un TextField si un Button. Aplicatia va permite adaugarea si stergerea elementelor din lista.

  • https://docs.flutter.dev/cookbook/forms/retrieve-input
  • https://docs.flutter.dev/cookbook/lists/basic-list
  • https://docs.flutter.dev/cookbook/lists/mixed-list
  • https://googleflutter.com/flutter-add-item-to-listview-dynamically/
  • https://api.flutter.dev/flutter/widgets/State/setState.html

English

Exercise 1

Create an application that manages a shopping list. The application will contain at least one ListView, one TextField, and one Button. The application should allow adding and deleting elements from the list.

Laborator 06

Problema 1:

Continuati aplicatia inceputa la laboratorul anterior:

  1. Pentru fiecare element din lista adaugati o categorie

  2. In functie de categoria fiecarui element, adaugati in dreptul lui o imagine reprezentativa folosing CustomPainter

  3. La fiecare 5 secunde imaginile isi vor schimba culoarea.

English

Exercise 1:

Continue the application started in the previous laboratory:

  1. For each element in the list add a category

  2. Depending on the category of each element, add a representative image to the right of it using CustomPainter

  3. Every 5 seconds the images will change color.

Labs Thursday

Lab 1 - Thursday

  1. Write and compile a Dart program that prints the first 50 Fibonacci numbers. The program should generate the sequence dynamically (not hardcoded values).

  2. Write a Dart program that extracts all words from a phrase and prints only the longest word(s).

  3. Write a Dart function that extracts all numbers from a text. Numbers can be integers or doubles. Print the count of the numbers, average and maximum of them.

  4. Write a dart function that converts a string of characters written in lowercase_with_underscore into UppeCamelCase.

Laborator 02

Problema 1:

Pentru o lista cu numere unice, sa se afiseze toate subseturile posibile. Solutia nu trebuie sa contina duplicate.

Exemplu:

Input: [1,2,3]
Output: [[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]

Problema 2:

Pentru o lista de string-uri strs sa se grupeze anagramele. O anagrama este un cuvant format din literele altui cuvant, dar in alta ordine.

Exemplu:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"]
Output: [["eat","tea","ate"],["tan","nat"],["bat"]]

Problema 3:

Pentru un string s sa se afiseze prima litera care nu se repeta in string. Daca toate literele se repeta, se va afisa -1.

Exemplu:

Input: "fffffffffflllllllllllluttttttttteeeeeeerr"
Output: "u"

Problema 4:

Pentru un string s sa se afiseze cea mai mare (ascii code) litera care se gaseste si lower case si upper case in string. Daca nu se gaseste nicio litera care se respecte constrangerea, se va afisa -1.

Exemplu:

Input: "aBcDeFgHiJkLmNozPqRsTuVwXyZ"
Output: "Z"

Laborator 03

Problema 1:

Implement a RingBuffer with a fixed capacity (push(), pop(), peakEnd(), peakStart()) isEmpty(), toString())

Checkout Ring-Buffers

Problema 2:

Implement a class with a fromJson() constructor + toJson() (without using jsonDecode)

class Exemplu {
    double varA;
    int varB;
    String varC;
    List <String> varD;
    Map<String, int> varE;
}

Problema 3:

a) Create a class CalendarBooking that has 3 private attributes:

- Id - which is generated automatically and represents the order of the bookings in the calendar Data Base (starting from 1 and can't be changed)

- Name (can't be changed)

- DateTime (can be modified only to a date in the future)

b) Create a constructor that uses "Initializer list" to initialize the name.

c) Create a static method that prints the clients name and the bookings datetime (sorted by datetime).

d) Create a small test program (main).

Laborator 04

The english translation

Problem 1:

Scrieti o functie care primeste ca parametru un String si o lista de expresii regulate si returneaza o lista de stringuri care fac match pe cel putin una dintre expresiile regulate primite ca parametru.

Problem 2:

Implementati o Stiva folosind fisiere ca storage.

Problem 3:

Implementati clasa MathOps unde T si G pot fi int, double sau String:

Problem 4:

Implementanti Map<String,dynamic> jsonSubJson(String jsonPath1, String jsonPath2), unde jsonPath1 si jsonPath2 sunt path-uri catre doua fisiere json. Operatia de scadere intre 2 fisiere json ar trebui sa rezulte intr-un json fara nodurile comune. Functia va fi scrisa intr-o librarie separata de cea din care va fi apelata.

English:

Problem 1:

Write a function that takes a string and a list of regular expressions as parameters and returns a list of strings that match at least one of the given regular expressions.

Problem 2:

Implement a Stack using files as storage.

Problem 3:

Implement class MathOps, where T and G can be int, double or String:

    MathOps <T,G> {
      int sub(T obj1, G obj2);
      int prod(T obj1, G obj2);
      int mod(T obj1, G obj2);
    }

Problem 4:

Implement Map<String, dynamic> jsonSubJson(String jsonPath1, String jsonPath2), where jsonPath1 and jsonPath2 are paths to two JSON files. The subtraction operation between the two JSON files should result in a JSON without the common nodes. The function should be written in a separate library from the one where it will be called.

Laborator 05

Problema 1:

RO: Faceti o aplicatie care sa gestioneze o lista de cumparaturi. Aplicatia va contine cel putin un GridView, un TextField si un Button. Aplicatia va permite adaugarea si stergerea elementelor din lista.

EN: Create an application that manages a shopping list. The application will contain at least a GridView, a TextField and a Button. The application will allow to add and delete elements from the list.

https://docs.flutter.dev/cookbook/forms/retrieve-input

https://api.flutter.dev/flutter/widgets/GridView-class.html

https://blog.logrocket.com/how-to-create-a-grid-list-in-flutter-using-gridview/

https://api.flutter.dev/flutter/widgets/State/setState.html

Laborator 06

Problema 1:

Continuati aplicatia inceputa la laboratorul anterior:

  1. Pentru fiecare element din lista adaugati o categorie

  2. In functie de categoria fiecarui element, adaugati in dreptul lui o imagine reprezentativa folosing CustomPainter

  3. La fiecare 5 secunde imaginile isi vor schimba culoarea.

English

Exercise 1:

Continue the application started in the previous laboratory:

  1. For each element in the list add a category

  2. Depending on the category of each element, add a representative image to the right of it using CustomPainter

  3. Every 5 seconds the images will change color.

Labs Thursday

Lab 1 - Friday

  1. Write and compile a Dart program that prints the first 10 prime numbers from the Fibonacci sequence.

  2. Write a Dart program that extracts all words from a phrase and prints top 3 most frequent words (case sensitive).

  3. Write a Dart program that extracts all numbers from a text. Numbers can be integers or doubles. Aggregate all numbers alternating the four simple operators ('+', '-', '/' '*') and print the result. Make sure you also parse negative numbers correctly.

  4. Write a Dart program that converts a string of characters written in UpperCamelCase into kebab-case-with-dash.

Laborator 02

Problema 1:

RO: Pentru un sir de numere date ca argumente la linia de comanda (reprezentand un intreg foarte mare), sa se construiasca o lista unde fiecare element este o cifra a acestui numar. Sa se afiseze lista corespunzatoare numarului primit ca argument, incrementat cu 1.

EN: For a sequence of numbers given as command-line arguments (representing a very large integer), construct a list where each element is a digit of this number. Display the list corresponding to the given number, incremented by 1.

Exemplu:

Cmd: "plusunu.dart 1 2 3"

Output: [1,2,4]

Cmd: "plusunu.dart 9 9 9"

Output: [1,0,0,0]

Problema 2:

RO: Se da de la tastatura un sir de litere si numere (unde fiecare numar corespunde literei anterioare) si un cuvant. Pentru cuvantul primit sa se afiseze suma numerelor, folosind valoarea corespunzatoare pentru fiecare litera din cuvant.

EN: A sequence of letters and numbers is given from the keyboard (where each number corresponds to the previous letter) along with a word. For the given word, display the sum of the numbers using the corresponding value for each letter in the word.

Exemplu:

Cmd: "wordsum.dart A 5 B 3 C 9 ABBCC"

Output: 29

Problema 3:

RO: Pentru o lista data, sa se returneze numarul de "perechi bune". O pereche (i, j) este buna daca list[i] == list[j] si i != j. Fiecare pereche va fi reprezentata printr-un set.

EN: For a given list, return the number of "good pairs." A pair (i, j) is considered good if list[i] == list[j] and i != j. Each pair will be represented as a set.

Problema 4:

RO: Se da un numar n. Fiecare numar de la 1 la n este grupat in functie de suma cifrelor sale. Sa se returneze numarul de grupuri care au cele mai multe numere.

EN: A number n is given. Each number from 1 to n is grouped based on the sum of its digits. Return the number of groups that contain the most numbers.

Exemplu 1:

Input: n = 13

Output: 4

Explicatie:
RO: Sunt 9 grupuri in total, sunt grupate in functie de suma cifrelor numerelor de la 1 la 13:   
EN: There are 9 groups in total, grouped based on the sum of the digits of the numbers from 1 to 13.

[1,10], [2,11], [3,12], [4,13], [5], [6], [7], [8], [9].

RO: Sunt 4 grupuri ce au cele ai multe numere.
EN: There are 4 groups that have the most numbers.

Exemplu 2:

Input: n = 30

Output: 1

Laborator 03

Problem 1:

Implement a Queue (push(), pop(), back(), front(), isEmpty(), toString()).

Problem 2:

Implement a class with a fromXml() constructor + toXml().

  class Example{
  
      int varA;
  
      int varB;
  
      String varC;
  
      List <int> varD;
  
      double varE;
  
  }

Problem 3:

a) Create a class Client that have 2 private attributes:

  • Name - can't be changed

  • PurchasesAmount(double) - that have 2 methods: get(), add()

b) Create a constructor that initialize the name

c) Create a class LoyalClient that have 1 private attribute:

  • PurchasesAmount(double) - that have 1 method: get() (use different name from the method in superclass)

d) Create a method discount() that assign to PurchasesAmount (subclass) the value of PurchasesAmount (superclass) after reduction of 10%.

e) Create a small test program (main).

Laborator 04

The english translation

Problema 1:

Scrieti o functie care primeste ca parametru un String regex, un String text si un int x, si returneaza substringurile de lungime x sau mai mari care fac match pe expresia regulata.

Problema 2:

Implementati o Stiva folosind fisiere ca storage. (pop, push, top)

Problema 3:

Implementati clasa MathOps unde T si G pot fi int, double sau String:

MathOps <T,G> {
    dynamic sub(T obj1, G obj2);
    dynamic mul(T obj1, G obj2);
}

Pentru String implementati sub ca diferenta dintre lungimile celor doua stringuri si mul va arunca exceptie.

Problema 4:

Implementanti Map<String,dynamic> jsonSumJson(String jsonPath1, String jsonPath2), unde jsonPath1 si jsonPath2 sunt path-uri catre doua fisiere json. Operatia de adunare intre 2 fisiere json ar trebui sa rezulte intr-un json in care pentru nodurile comune se va alege valoarea din cel de-al doilea fisier json. Functia va fi scrisa intr-o librarie separata de cea din care va fi apelata.

English

Exercise 1:

Write a function that takes as parameters a String regex, a String text, and an int x, and returns the substrings of length x or larger, that match the regular expression.

Exercise 2:

Implement a Stack using files as storage. (pop, push, top)

Exercise 3:

Implement the MathOps class where T and G can be int, double, or String.

MathOps <T,G> {
    int sub(T obj1, G obj2);
    int mul(T obj1, G obj2);
}

In the case of String, sub should return the difference between the lengths of the two strings and mul should throw an exception.

Exercise 4:

Implement a function Map<String, dynamic> jsonSumJson(String jsonPath1, String jsonPath2), where jsonPath1 and jsonPath2 are paths to two JSON files. The operation of summing two JSON files should result in a JSON where, for common nodes, the value from the second JSON file will be chosen. The function will be written in a separate library from the one where it will be called.

Laborator 05

Problema 1:

Faceti o aplicatie care sa gestioneze o lista de cumparaturi. Aplicatia va contine cel putin un ListView, un TextField si un Button. Aplicatia va permite adaugarea si stergerea elementelor din lista.

  • https://docs.flutter.dev/cookbook/forms/retrieve-input
  • https://docs.flutter.dev/cookbook/lists/basic-list
  • https://docs.flutter.dev/cookbook/lists/mixed-list
  • https://googleflutter.com/flutter-add-item-to-listview-dynamically/
  • https://api.flutter.dev/flutter/widgets/State/setState.html

English

Exercise 1

Create an application that manages a shopping list. The application will contain at least one ListView, one TextField, and one Button. The application should allow adding and deleting elements from the list.

Laborator 06

Problema 1:

Continuati aplicatia inceputa la laboratorul anterior:

  1. Pentru fiecare element din lista adaugati o categorie

  2. In functie de categoria fiecarui element, adaugati in dreptul lui o imagine reprezentativa folosing CustomPainter

  3. La fiecare 5 secunde imaginile isi vor schimba culoarea.

English

Exercise 1:

Continue the application started in the previous laboratory:

  1. For each element in the list add a category

  2. Depending on the category of each element, add a representative image to the right of it using CustomPainter

  3. Every 5 seconds the images will change color.

Labs Thursday

Lab 1 - Thursday

  1. Write and compile a Dart program that prints the first 50 Fibonacci numbers. The program should generate the sequence dynamically (not hardcoded values).

  2. Write a Dart program that extracts all words from a phrase and prints only the longest word(s).

  3. Write a Dart function that extracts all numbers from a text. Numbers can be integers or doubles. Print the count of the numbers, average and maximum of them.

  4. Write a dart function that converts a string of characters written in lowercase_with_underscore into UppeCamelCase.

Laborator 02

Problema 1:

Pentru o lista cu numere unice, sa se afiseze toate subseturile posibile. Solutia nu trebuie sa contina duplicate.

Exemplu:

Input: [1,2,3]
Output: [[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]

Problema 2:

Pentru o lista de string-uri strs sa se grupeze anagramele. O anagrama este un cuvant format din literele altui cuvant, dar in alta ordine.

Exemplu:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"]
Output: [["eat","tea","ate"],["tan","nat"],["bat"]]

Problema 3:

Pentru un string s sa se afiseze prima litera care nu se repeta in string. Daca toate literele se repeta, se va afisa -1.

Exemplu:

Input: "fffffffffflllllllllllluttttttttteeeeeeerr"
Output: "u"

Problema 4:

Pentru un string s sa se afiseze cea mai mare (ascii code) litera care se gaseste si lower case si upper case in string. Daca nu se gaseste nicio litera care se respecte constrangerea, se va afisa -1.

Exemplu:

Input: "aBcDeFgHiJkLmNozPqRsTuVwXyZ"
Output: "Z"