BG Development


  Reply to this topicStart new topicStart Poll

> Средноаритметично на числа
lechev
Публикувано на: 11-05-2018, 15:49
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 16
Регистриран на: 15.12.15



Здравейте,
Опитах се да напиша програма, която чрез използване на масиви и цикъл for да въвежда точките на студенти по няколко предмета, след което да изчисли средноаритметична оценка на всеки студент и общата средноаритметична стойност за всички студенти. Докарах я до там да извежда средноаритметична оценка на първия студент, но проблема е че след втората итерация на цикъла се добавя общата стойност към тази на предната итерация и води до грешно изчисление. Ето и до къде съм стигнал:

CODE

package com.java24hours;

import java.util.*;

class Marks{
   public static void main(String[] args){
       int student[]=new int[3];
       int mark[]=new int[6];
       float total=0,avgall,avg;
       char letterGrade=0;
       Scanner user_input = new Scanner(System.in);
       for(int count=0;count<student.length;count++){  //изкарва броя студенти
           System.out.println("Student: "+(count+1));
           for(int count2=0;count2<mark.length;count2++){  //изкарва броя оценки
               System.out.println("Subject: "+(count2+1));
               mark[count2]=user_input.nextInt();  //въвеждане на точки от потребителя
               total+=mark[count2];        //общ брой точки
           }  
           avg=total/mark.length;   //средно аритметично за студент
           if(avg>0&&avg<50){
                   letterGrade='F';
               }
               else if(avg>=50&&avg<64){
                   letterGrade='D';
               }
               else if(avg>=64&&avg<75){
                   letterGrade='C';
               }
               else if(avg>=75&&avg<86){
                   letterGrade='B';
               }
               else if(avg>=86&&avg<=100){
                   letterGrade='A';
               }
               else{
                   System.out.println("Error! Input a value between 1 and 100");
               }
               switch(letterGrade){
                   case 'F':
                       System.out.println("Your grade is F");
                       break;
                   case 'D':
                       System.out.println("Your grade is D");
                       break;
                   case 'C':
                       System.out.println("Your grade is C");
                       break;
                   case 'B':
                       System.out.println("Your grade is B");
                       break;
                   case 'A':
                       System.out.println("Your grade is A");
                       break;
               }
       }
       
   }
}


Ако може някой да хвърли едно око и да каже къде какво съм пропуснал, понеже не успях до момента да открия грешката си. Кодът е компилиран на NetBeans IDE 8.2

Това мнение е било редактирано от lechev на 11-05-2018, 15:50

Прикачен файл ( Брой сваляния: 2 )
Прикачен файл  Marks.class
PM
Top
fast_user
Публикувано на: 11-05-2018, 15:59
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 352
Регистриран на: 19.09.12



По пътя на логиката, ако някъде се добавя стойност от предходната итерация към текущата , а не трябва - трябва да намериш къде става това и да занулиш стойноста на предходната. За целта ползваш дебъгер да намериш това място и преди сумирането на двете стойности зануляваш тази от предходната итерация.


--------------------
Linux is only free if your time has no value.
Linux Akbar
PMEmail Poster
Top
SuN
Публикувано на: 11-05-2018, 16:25
Quote Post


Group Icon
Име: Финто Нешън
Група: Администратор
Ранг: Почетен член

Мнения: 6089
Регистриран на: 27.01.05



Логиката е за слабаци. С малко груба сила може да зануляваш на някой ред и ако не стане - премести зануляването на друг ред. Повтори докато тръгне правилно.

Това мнение е било редактирано от SuN на 11-05-2018, 16:26


--------------------
Копирай лесно ударено и - ѝ Ѝ
Замърсяване на въздуха в София - http://aqicn.org/city/bulgaria/sofia/druzhba/
PMEmail Poster
Top
lechev
Публикувано на: 14-05-2018, 08:00
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 16
Регистриран на: 15.12.15



Благодаря за съветите. Занулих променливата total след цикъла switch и всички изчисления излязоха верни.
PM
Top
lechev
Публикувано на: 14-05-2018, 08:40
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 16
Регистриран на: 15.12.15



Справих се със условието. За изчисляване на общия среден успех използвах отново комбинация от if-else и switch, но в условието на if точките съм ги разделил на student.length (броя на студентите). Резултатът е доста точен, разбира се много е възможно да има разминавания ако въведените точки са доста близки до горната и долната граница за оценяване. Ето и пълния код на програмата:
CODE

package com.java24hours;

import java.util.*;

class Marks{
   public static void main(String[] args){
       int student[]=new int[3];
       int mark[]=new int[6];
       float total=0,avgall,avg = 0;
       char letterGrade=0;
       Scanner user_input = new Scanner(System.in);
       for(int count=0;count<student.length;count++){  //изкарва броя студенти
           System.out.println("Student: "+(count+1));
           for(int count2=0;count2<mark.length;count2++){  //изкарва броя оценки
               System.out.println("Subject: "+(count2+1));
               mark[count2]=user_input.nextInt();  //въвеждане на точки от потребителя
               total+=mark[count2];        //общ брой точки
           }  
           avg=total/mark.length;   //средно аритметично за студент
           avgall=(total/mark.length)/student.length; //средно аритметично за всички студенти
           if(avg>0&&avg<50){              //превръщане от точки в оценка
                   letterGrade='F';
               }
               else if(avg>=50&&avg<64){
                   letterGrade='D';
               }
               else if(avg>=64&&avg<75){
                   letterGrade='C';
               }
               else if(avg>=75&&avg<86){
                   letterGrade='B';
               }
               else if(avg>=86&&avg<=100){
                   letterGrade='A';
               }
               else{
                   System.out.println("Error! Input a value between 1 and 100");
               }
               switch(letterGrade){
                   case 'F':
                       System.out.println("Your grade is F");
                       break;
                   case 'D':
                       System.out.println("Your grade is D");
                       break;
                   case 'C':
                       System.out.println("Your grade is C");
                       break;
                   case 'B':
                       System.out.println("Your grade is B");
                       break;
                   case 'A':
                       System.out.println("Your grade is A");
                       break;
               }

               if(avgall>0&&avgall<50/student.length){ //критерии за средна оценка на броя студенти
                   letterGrade='F';
               }
               else if(avgall>=50/student.length&&avgall<64/student.length){
                   letterGrade='D';
               }
               else if(avgall>=64/student.length&&avgall<75/student.length){
                   letterGrade='C';
               }
               else if(avgall>=75/student.length&&avgall<86/student.length){
                   letterGrade='B';
               }
               else if(avgall>=86/student.length&&avgall<=100/student.length){
                   letterGrade='A';
               }
               else{
                   System.out.println("Error! Input a value between 1 and 100");
               }
               switch(letterGrade){
                   case 'F':
                       System.out.println("Average grade of all students is F");
                       break;
                   case 'D':
                       System.out.println("Average grade of all students is D");
                       break;
                   case 'C':
                       System.out.println("Average grade of all students is C");
                       break;
                   case 'B':
                       System.out.println("Average grade of all students is B");
                       break;
                   case 'A':
                       System.out.println("Average grade of all students is A");
                       break;
               }
               total=0;
       }
   }
}
PM
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0