1

Тема: прогрма"Успішність учнів" -- автоматизація на Java

Моя перша програма на Java, для полегшення життя вчителям при підрахунку успішності учнів.
що порадите для покращення,були думки більш розбивати на класи і методи,конструктори. поки з графічним інтерфейсом зачекаю.

class Result_of_knowledge 
{
 public static void main(String[] args) 
 {
     System.out.println("Успішність учнів у %:");
     int x12=0,x11=5,x10=2;//кількість учнів які вчаться на 12, 11, 10
     int x9=1,x8=3,x7=1;  //кількість учнів які вчаться на 9, 8, 7
     int x6=2,x5=0,x4=2; //кількість учнів які вчаться на 6, 5, 5
     int x3=1,x2=0,x1=0; //кількість учнів які вчаться на 3, 2, 1
     int a=x10+x11+x12; //сума учнів на високому рівні
     int b=x7+x8+x9;    //сума учнів на достатньому рівні
     int c=x4+x5+x6;   //сума учнів на середньому рівні
     int d=x1+x2+x3;  //сума учнів на низькому рівні
     int k=a+b+c+d; // кількість учнів в класі(загальна кількість учнів на всіх рівнях)
     if (k!=0)
     {
         float a_v=Math.round((float)a*100/k);
         float b_v=Math.round((float)b*100/k);
         float c_v=Math.round((float)c*100/k);
         float d_v=Math.round((float)d*100/k);
         float sum_v=a_v+b_v+c_v+d_v;
         if (sum_v==100.0)
         {
             System.out.println("Високий рівень "+a_v+"%");
             System.out.println("Достатній рівень "+b_v+"%");
             System.out.println("Середній рівень "+c_v+"%");
             System.out.println("Низький рівень "+d_v+"%");
             System.out.println("Готово");
         }
         else 
         {
             System.out.println("не 100");
             float riz_v=(float)100.0-sum_v;
             b_v+=riz_v;
             System.out.println("Високий рівень "+a_v+"%");
             System.out.println("Достатній рівень "+b_v+"%");
             System.out.println("Середній рівень "+c_v+"%");
             System.out.println("Низький рівень "+d_v+"%");
             System.out.println("Різниця: "+riz_v+"% "+ "додана до достатнього рівня");
         }

     }
     else 
     {
         System.out.println("На нуль ділити не можна!");
     }
 }   
}
Подякували: Master_Sergius, 0xDADA11C72

2

Re: прогрма"Успішність учнів" -- автоматизація на Java

Коли у вас з’являється бажання використати змінні від x1 до x12, задумайтесь про використання масиву.
Старайтесь не порівнювати числа з плаваючою комою.
Ну і залишається загадкою, нащо додавати кількість всіх учнів в процентах і порівнювати їх з сотнею.

Подякували: Tinca1

3

Re: прогрма"Успішність учнів" -- автоматизація на Java

Пані як би між іншим, сама задумка автоматичного підрахунку успішності учнів напевно хороша, але ж хто ті дані вводити буде і коли? скажу в мене дружина вчитель і справді якось розповідала що розраховувала успішність напевно в кінці навчального року,моя думка рахувати всі оцінки це жесть.
Особисто я виставив би інтуітивно, подививсь би на рядок оцінок і поставив би щось середнє навіть не рахуючи :)

Можливо якби зісканувати журнал => файнрідер прочитав оцінки => і програмулька виставила б оцінку це було здорово.
Вжик журнал і середня оцінка для всього класу стоїть :)

4

Re: прогрма"Успішність учнів" -- автоматизація на Java

quez написав:

Коли у вас з’являється бажання використати змінні від x1 до x12, задумайтесь про використання масиву.
Старайтесь не порівнювати числа з плаваючою комою.
Ну і залишається загадкою, нащо додавати кількість всіх учнів в процентах і порівнювати їх з сотнею.

дякую, за підказку з масивом; а про порівняння зі сотнею: проблема в тому, що при округленні в деяких випадках губиться приблизно 1 відсоток, а загальна сума всіх рівнів у відсотках має бути 100.

5

Re: прогрма"Успішність учнів" -- автоматизація на Java

Анатолій написав:

Пані як би між іншим, сама задумка автоматичного підрахунку успішності учнів напевно хороша, але ж хто ті дані вводити буде і коли? скажу в мене дружина вчитель і справді якось розповідала що розраховувала успішність напевно в кінці навчального року,моя думка рахувати всі оцінки це жесть.
Особисто я виставив би інтуітивно, подививсь би на рядок оцінок і поставив би щось середнє навіть не рахуючи :)

Можливо якби зісканувати журнал => файнрідер прочитав оцінки => і програмулька виставила б оцінку це було здорово.
Вжик журнал і середня оцінка для всього класу стоїть :)

І тоді якийсь учень би Вам голову відрубав, за те, що в нього на .01 бал менше ніж в його сусіда по парті, за його власним підрахунком. Сумні реалії.

Подякували: Tinca1

6

Re: прогрма"Успішність учнів" -- автоматизація на Java

Анатолій написав:

Пані як би між іншим, сама задумка автоматичного підрахунку успішності учнів напевно хороша, але ж хто ті дані вводити буде і коли? скажу в мене дружина вчитель і справді якось розповідала що розраховувала успішність напевно в кінці навчального року,моя думка рахувати всі оцінки це жесть.
Особисто я виставив би інтуітивно, подививсь би на рядок оцінок і поставив би щось середнє навіть не рахуючи :)

Можливо якби зісканувати журнал => файнрідер прочитав оцінки => і програмулька виставила б оцінку це було здорово.
Вжик журнал і середня оцінка для всього класу стоїть :)

я кожного семестру звіт такий по класах рахую, в деяких школах вимагають це. Тому щоб навчитись і спрости життя собі і може ще комусь

7

Re: прогрма"Успішність учнів" -- автоматизація на Java

В деяких відділах освіти крутиться екселівський варіант. Як на мене, він легший у сенсі введення даних, та й зберігати наочно легко. Але за старання можна похвалити )

Подякували: DOP, leofun012

8

Re: прогрма"Успішність учнів" -- автоматизація на Java

Master_Sergius написав:

В деяких відділах освіти крутиться екселівський варіант. Як на мене, він легший у сенсі введення даних, та й зберігати наочно легко. Але за старання можна похвалити )

зазвичай все рахуємо в нас руцями і калькулятором. А так дякую, для практики!

9 Востаннє редагувалося Tinca (10.03.2015 22:10:05)

Re: прогрма"Успішність учнів" -- автоматизація на Java

замінила масивами, забрала округлення,змінила назви змінних

class result_of_knowledge 
{
 public static void main(String[] args) 
 {
     System.out.println("Успішність учнів у %:");
     int[] vysokyy = new int [] {0,5,2}; //кількість учнів які вчаться на 12, 11, 10 
     int[] dostatniy = new int [] {1,3,7}; //кількість учнів які вчаться на 9, 8, 7
     int[] seredniy = new int [] {2,0,2}; //кількість учнів які вчаться на 6, 5, 4
     int[] pochatkovyy = new int [] {1,0,0};//кількість учнів які вчаться на 3, 2, 1
     int sum_vysokyy=0; // рахуємо суму масиву високого рівня
     for ( int i : vysokyy)
     {
        sum_vysokyy += i; 
     }     
     int sum_dostatniy=0; // рахуємо суму масиву достатнього рівня
     for ( int i : dostatniy)
     {
        sum_dostatniy += i; 
     }  
     int sum_seredniy=0; // рахуємо суму масиву середнього рівня
     for ( int i : seredniy)
     {
        sum_seredniy += i; 
     }
     int sum_pochatkovyy = 0;// рахуємо суму масиву початкового рівня
     for ( int i : pochatkovyy)
     {
        sum_pochatkovyy += i; 
     }
     int zahalna_suma=sum_vysokyy+sum_dostatniy+sum_seredniy+sum_pochatkovyy; 
     // рахуємо загальну кількість відсотків на всіх рівнях
     int zahalni_v=100;
     if (zahalna_suma!=0)
     {
         int vysokyy_v=sum_vysokyy*100/zahalna_suma;
         int dostatniy_v=sum_dostatniy*zahalni_v/zahalna_suma;
         int seredniy_v=sum_seredniy*zahalni_v/zahalna_suma;
         int pochatkovyy_v=sum_pochatkovyy*zahalni_v/zahalna_suma;
         int suma_v=vysokyy_v+dostatniy_v+seredniy_v+pochatkovyy_v;
         if (suma_v==zahalni_v)
         {
             System.out.println("Високий рівень "+vysokyy_v+"%");
             System.out.println("Достатній рівень "+dostatniy_v+"%");
             System.out.println("Середній рівень "+seredniy_v+"%");
             System.out.println("Низький рівень "+pochatkovyy_v+"%");
             System.out.println("Готово");
         }
         else 
         {
             System.out.println("не 100");
             int riz_v=zahalni_v-suma_v;
             dostatniy_v+=riz_v;
             System.out.println("Високий рівень "+vysokyy_v+"%");
             System.out.println("Достатній рівень "+dostatniy_v+"%");
             System.out.println("Середній рівень "+seredniy_v+"%");
             System.out.println("Низький рівень "+pochatkovyy_v+"%");
             System.out.println("Різниця: "+riz_v+"% "+ "додана до достатнього рівня");
         }
     }
     else 
     {
         System.out.println("На нуль дылити не можна!");
     }
 }   
} 

порадьте, що ще можна зробити

Подякували: 0xDADA11C71

10

Re: прогрма"Успішність учнів" -- автоматизація на Java

Tinca написав:

замінила масивами, забрала округлення,змінила назви змінних

class result_of_knowledge 
{
 public static void main(String[] args) 
 {
     System.out.println("Успішність учнів у %:");
     int[] vysokyy = new int [] {0,5,2}; //кількість учнів які вчаться на 12, 11, 10 
     int[] dostatniy = new int [] {1,3,7}; //кількість учнів які вчаться на 9, 8, 7
     int[] seredniy = new int [] {2,0,2}; //кількість учнів які вчаться на 6, 5, 4
     int[] pochatkovyy = new int [] {1,0,0};//кількість учнів які вчаться на 3, 2, 1
     int sum_vysokyy=0; // рахуємо суму масиву високого рівня
     for ( int i : vysokyy)
     {
        sum_vysokyy += i; 
     }     
     int sum_dostatniy=0; // рахуємо суму масиву достатнього рівня
     for ( int i : dostatniy)
     {
        sum_dostatniy += i; 
     }  
     int sum_seredniy=0; // рахуємо суму масиву середнього рівня
     for ( int i : seredniy)
     {
        sum_seredniy += i; 
     }
     int sum_pochatkovyy = 0;// рахуємо суму масиву початкового рівня
     for ( int i : pochatkovyy)
     {
        sum_pochatkovyy += i; 
     }
     int zahalna_suma=sum_vysokyy+sum_dostatniy+sum_seredniy+sum_pochatkovyy; 
     // рахуємо загальну кількість відсотків на всіх рівнях
     int zahalni_v=100;
     if (zahalna_suma!=0)
     {
         int vysokyy_v=sum_vysokyy*100/zahalna_suma;
         int dostatniy_v=sum_dostatniy*zahalni_v/zahalna_suma;
         int seredniy_v=sum_seredniy*zahalni_v/zahalna_suma;
         int pochatkovyy_v=sum_pochatkovyy*zahalni_v/zahalna_suma;
         int suma_v=vysokyy_v+dostatniy_v+seredniy_v+pochatkovyy_v;
         if (suma_v==zahalni_v)
         {
             System.out.println("Високий рівень "+vysokyy_v+"%");
             System.out.println("Достатній рівень "+dostatniy_v+"%");
             System.out.println("Середній рівень "+seredniy_v+"%");
             System.out.println("Низький рівень "+pochatkovyy_v+"%");
             System.out.println("Готово");
         }
         else 
         {
             System.out.println("не 100");
             int riz_v=zahalni_v-suma_v;
             dostatniy_v+=riz_v;
             System.out.println("Високий рівень "+vysokyy_v+"%");
             System.out.println("Достатній рівень "+dostatniy_v+"%");
             System.out.println("Середній рівень "+seredniy_v+"%");
             System.out.println("Низький рівень "+pochatkovyy_v+"%");
             System.out.println("Різниця: "+riz_v+"% "+ "додана до достатнього рівня");
         }
     }
     else 
     {
         System.out.println("На нуль дылити не можна!");
     }
 }   
} 

порадьте, що ще можна зробити

досить непогано тепер, + добре, що юзаєш foreach

Подякували: Tinca1

11 Востаннє редагувалося Tinca (10.03.2015 22:20:38)

Re: прогрма"Успішність учнів" -- автоматизація на Java

Regen написав:

досить непогано тепер, + добре, що юзаєш foreach

від зручніший від for)), що ще можна змінити?

12

Re: прогрма"Успішність учнів" -- автоматизація на Java

Tinca написав:
Regen написав:

досить непогано тепер, + добре, що юзаєш foreach

від зручніший від for)), що ще можна змінити?

і підходить як для обходу колекцій так і масивів + перфоманс той ж самий

13 Востаннє редагувалося Regen (10.03.2015 22:26:50)

Re: прогрма"Успішність учнів" -- автоматизація на Java

Tinca написав:
Regen написав:

досить непогано тепер, + добре, що юзаєш foreach

від зручніший від for)), що ще можна змінити?

можна зробити 1 масив замість чотирьох, але тоді потрібно буде вказувати межі
P.S. маленька порада: старайся називати змінні англійськими словами

14

Re: прогрма"Успішність учнів" -- автоматизація на Java

Regen написав:
Tinca написав:
Regen написав:

досить непогано тепер, + добре, що юзаєш foreach

від зручніший від for)), що ще можна змінити?

можна зробити 1 масив замість чотирьох, але тоді потрібно буде вказувати межі

ці межі враховувати через for потім?

15

Re: прогрма"Успішність учнів" -- автоматизація на Java

sum_dostatnij і т.п. не потрібно присвоювати 0 при ініціалізації, це відбувається дефолтно

Подякували: Tinca1

16

Re: прогрма"Успішність учнів" -- автоматизація на Java

Tinca написав:
Regen написав:
Tinca написав:

від зручніший від for)), що ще можна змінити?

можна зробити 1 масив замість чотирьох, але тоді потрібно буде вказувати межі

ці межі враховувати через for потім?

так for(int i=a; i<=b;i++)

Подякували: Tinca1

17

Re: прогрма"Успішність учнів" -- автоматизація на Java

Regen написав:
Tinca написав:
Regen написав:

можна зробити 1 масив замість чотирьох, але тоді потрібно буде вказувати межі

ці межі враховувати через for потім?

так for(int i=a; i<=b;i++)

та це ясно))

18

Re: прогрма"Успішність учнів" -- автоматизація на Java

Regen написав:

sum_dostatnij і т.п. не потрібно присвоювати 0 при ініціалізації, це відбувається дефолтно

дивно, в мене воно вибиває як помилку і просить присвоїти

19

Re: прогрма"Успішність учнів" -- автоматизація на Java

class result_of_knowledge 
{
 public static void main(String[] args) 
 {
     System.out.println("Успішність учнів у %:");
     int[] otsinky = new int [] {0,5,2,1,3,7,2,0,2,1,0,0};
    /* кількість учнів які вчаться 
     на оцінки 12,11,10,9,8,7,6,5,4,3,2,1*/
     int sum_vysokyy = 0;// рахуємо суму масиву високого рівня
     for ( int  i=0; i<=2;i++)
     {
      sum_vysokyy +=otsinky[i]; 
     }     
     int sum_dostatniy=0; // рахуємо суму масиву достатнього рівня
     for ( int  i=3; i<=5;i++)
     {
        sum_dostatniy += otsinky[i]; 
     }  
     int sum_seredniy=0; // рахуємо суму масиву середнього рівня
     for ( int  i=6; i<=8;i++)
     {
        sum_seredniy += otsinky[i]; 
     }
     int sum_pochatkovyy = 0;// рахуємо суму масиву початкового рівня
     for ( int  i=9; i<=11;i++)
     {
        sum_pochatkovyy += otsinky[i]; 
     }
     int zahalna_suma=sum_vysokyy+sum_dostatniy+sum_seredniy+sum_pochatkovyy; 
     // рахуємо загальну кількість відсотків на всіх рівнях
     int zahalni_v=100;
     if (zahalna_suma!=0)
     {
         int vysokyy_v=sum_vysokyy*100/zahalna_suma;
         int dostatniy_v=sum_dostatniy*zahalni_v/zahalna_suma;
         int seredniy_v=sum_seredniy*zahalni_v/zahalna_suma;
         int pochatkovyy_v=sum_pochatkovyy*zahalni_v/zahalna_suma;
         int suma_v=vysokyy_v+dostatniy_v+seredniy_v+pochatkovyy_v;
         if (suma_v==zahalni_v)
         {
             System.out.println("Високий рівень "+vysokyy_v+"%");
             System.out.println("Достатній рівень "+dostatniy_v+"%");
             System.out.println("Середній рівень "+seredniy_v+"%");
             System.out.println("Низький рівень "+pochatkovyy_v+"%");
             System.out.println("Готово");
         }
         else 
         {
             System.out.println("не 100");
             int riz_v=zahalni_v-suma_v;
             dostatniy_v+=riz_v;
             System.out.println("Високий рівень "+vysokyy_v+"%");
             System.out.println("Достатній рівень "+dostatniy_v+"%");
             System.out.println("Середній рівень "+seredniy_v+"%");
             System.out.println("Низький рівень "+pochatkovyy_v+"%");
             System.out.println("Різниця: "+riz_v+"% "+ "додана до достатнього рівня");
         }
     }
     else 
     {
         System.out.println("На нуль ділити не можна!");
     }
 }   
} 

тепер маємо з одним масивом і через межі))

20

Re: прогрма"Успішність учнів" -- автоматизація на Java

Tinca написав:
class result_of_knowledge 
{
 public static void main(String[] args) 
 {
     System.out.println("Успішність учнів у %:");
     int[] otsinky = new int [] {0,5,2,1,3,7,2,0,2,1,0,0};
    /* кількість учнів які вчаться 
     на оцінки 12,11,10,9,8,7,6,5,4,3,2,1*/
     int sum_vysokyy = 0;// рахуємо суму масиву високого рівня
     for ( int  i=0; i<=2;i++)
     {
      sum_vysokyy +=otsinky[i]; 
     }     
     int sum_dostatniy=0; // рахуємо суму масиву достатнього рівня
     for ( int  i=3; i<=5;i++)
     {
        sum_dostatniy += otsinky[i]; 
     }  
     int sum_seredniy=0; // рахуємо суму масиву середнього рівня
     for ( int  i=6; i<=8;i++)
     {
        sum_seredniy += otsinky[i]; 
     }
     int sum_pochatkovyy = 0;// рахуємо суму масиву початкового рівня
     for ( int  i=9; i<=11;i++)
     {
        sum_pochatkovyy += otsinky[i]; 
     }
     int zahalna_suma=sum_vysokyy+sum_dostatniy+sum_seredniy+sum_pochatkovyy; 
     // рахуємо загальну кількість відсотків на всіх рівнях
     int zahalni_v=100;
     if (zahalna_suma!=0)
     {
         int vysokyy_v=sum_vysokyy*100/zahalna_suma;
         int dostatniy_v=sum_dostatniy*zahalni_v/zahalna_suma;
         int seredniy_v=sum_seredniy*zahalni_v/zahalna_suma;
         int pochatkovyy_v=sum_pochatkovyy*zahalni_v/zahalna_suma;
         int suma_v=vysokyy_v+dostatniy_v+seredniy_v+pochatkovyy_v;
         if (suma_v==zahalni_v)
         {
             System.out.println("Високий рівень "+vysokyy_v+"%");
             System.out.println("Достатній рівень "+dostatniy_v+"%");
             System.out.println("Середній рівень "+seredniy_v+"%");
             System.out.println("Низький рівень "+pochatkovyy_v+"%");
             System.out.println("Готово");
         }
         else 
         {
             System.out.println("не 100");
             int riz_v=zahalni_v-suma_v;
             dostatniy_v+=riz_v;
             System.out.println("Високий рівень "+vysokyy_v+"%");
             System.out.println("Достатній рівень "+dostatniy_v+"%");
             System.out.println("Середній рівень "+seredniy_v+"%");
             System.out.println("Низький рівень "+pochatkovyy_v+"%");
             System.out.println("Різниця: "+riz_v+"% "+ "додана до достатнього рівня");
         }
     }
     else 
     {
         System.out.println("На нуль ділити не можна!");
     }
 }   
} 

тепер маємо з одним масивом і через межі))

Знайдіть код, що дублюється і винесіть його в метод.