1 Востаннє редагувалося idosyn2 (23.12.2017 15:57:42)

Тема: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

Суть завдання:

Описати клас студентська група.
-можливість роботи з довільною кількістю записів
-пошук записів за деякою ознакою
-додавання і вилучення записів
-сортування за прізвищем
-доступ до запису за номером

1. Дві ідентичні з вигляду помилки
2. Взагалі нема певності, що в правильному напрямі просуваюсь
3. Поки-що не вїжджаю взагалі в якому напрямку думати стосовно реалізації сортування. Може, це якийсь метод ліста? Але через що?
Допоможіть початківцю. Початківець буде вдячний.

Post's attachments

errors2.PNG 492.22 kb, 216 downloads since 2017-12-22 

2 Востаннє редагувалося idosyn2 (22.12.2017 13:22:11)

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

1.

/*
 * Created by SharpDevelop.
 * User: USER
 * Date: 22.12.2017
 * Time: 3:30
 * 
 ****Описати клас студентська група.
 * #можливіст роботи з довільною кількістю записів
 * -пошук записів за деякою ознакою
 * #додавання і вилучення записів
 * -сортування за прізвищем
 * #доступ до запису за номером
 */
 
using System;

namespace Lab44
{
    class Program
    {
        static void Main() {
            Group math = new Group(8);
            math.AddStudent("Надiя", "Стрiлець", new DateTime(1997, 9, 9));
            math.AddStudent("Роман", "Гоменюк", new DateTime(1999, 1, 2));
            math.AddStudent("Вiктор", "Вакуленко", new DateTime(1994, 7, 21));
            math.AddStudent("Олександр", "Прищепа", new DateTime(1998, 12, 12));
            math.AddStudent("Ангелiна", "Щур", new DateTime(1998, 10, 7));
            math.AddStudent("Ярослава", "Матейченко", new DateTime(1997, 12, 31));
            math.AddStudent("Артур", "Дем'яненко", new DateTime(1998, 4, 20));
            math.AddStudent("Мирон", "Жук", new DateTime(1999, 2, 11));
            math.AddStudent("Алiна", "Скляренко", new DateTime(1997, 11, 9));
            math.AddStudent("Рeната", "Лiтвiнова", new DateTime(1995, 5, 17));
            math.AddStudent("Анастасiя", "Рошко", new DateTime(1998, 12, 27));
            math.AddStudent("Людмила", "Федоренко", new DateTime(1997, 9, 19));
            math.AddStudent("Пилип", "Шпак", new DateTime(1999, 12, 29));
            
            //math.ShowAll();
            math.RemoveStudent(12);
            math.ShowAll();
            Console.WriteLine();
            Console.WriteLine("Найуспiшнiшим студентом у групi є: " + math.GroupLeader());
            Console.ReadLine();

        }
    }
}
Post's attachments

Program.cs 1.87 kb, 584 downloads since 2017-12-22 

3

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

2.

/*
 * Created by SharpDevelop.
 * User: USER
 * Date: 22.12.2017
 * Time: 5:04
 */
using System;

namespace Lab44
{
    sealed class Student {
        static int st = 1;
        public string Firstname { get; private set; }
        public string Lastname  { get; private set; }
        public int Card         { get; private set; }
        public DateTime Birth   { get; private set; }

        int[] marks;

        public Student(string f, string l, DateTime d, int items) {
            Firstname = f;
            Lastname = l;
            Birth = d;
            Card = st;

            Random rnd = new Random();
            marks = new int[items];
            for(int i = 0; i < marks.Length; i++) {
                marks[i] = rnd.Next(DateTime.Now.Second+Birth.Day, 101);
            }
            st++;
        }
        public double Rank() {
            double a = 0;
            for(int i = 0; i < marks.Length; i++) {
                a += marks[i];
            }
            return a/marks.Length;
        }
        public static bool operator ==(Student st1, Student st2) {
            if(st1.Firstname == st2.Firstname & st1.Lastname == st2.Lastname 
               & st1.Birth == st2.Birth & st1.Card == st2.Card)
                return true;
            else return false;
        }
        public static bool operator !=(Student st1, Student st2) {
            if(st1.Firstname != st2.Firstname | st1.Lastname != st2.Lastname 
               | st1.Birth != st2.Birth | st1.Card == st2.Card)
                return true;
            else return false;
        }
        public override string ToString() {
            return Card + ". " + Firstname + " " + Lastname + "\n" +
                "(" + Birth.ToString("d") + ") - середнiй бал: " + this.Rank() + ".\n";
        }
    }
}
Post's attachments

Student.cs 1.52 kb, 597 downloads since 2017-12-22 

4 Востаннє редагувалося idosyn2 (22.12.2017 13:26:22)

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

3. Ось тут помилка. В методах
public Student GetStudentForName(string f, string l)
public Student GetStudentForBirth(DateTime d)

/*
 * Created by SharpDevelop.
 * User: USER
 * Date: 22.12.2017
 * Time: 7:52
 */
using System;
using System.Collections.Generic;

namespace Lab44
{
    class Group {
        List<Student> students;
        public int Items { get; private set; }

        public Group(int itm) {
            Items = itm;
            students = new List<Student>();
        }
        public void AddStudent(string f, string l, DateTime b) {
            Student student = new Student(f, l, b, Items);
            students.Add(student);
        }
        public void RemoveStudent(int i) {
            students.Remove(students[i]);
        }
        public Student GetStudentForIndex(int i) {
            return students[i];
        }
        public Student GetStudentForBirth(DateTime d) {
            for(int i = 0; i < students.Count; i++) {
                if(students[i].Birth == d)
                    return students[i];
                else return null;
            }
        }
        public Student GetStudentForName(string f, string l) {
            for(int i = 0; i < students.Count; i++) {
                if((students[i].Firstname == f) & (students[i].Lastname == l))
                    return students[i];
                else return null;
            }
        }
        public Student GroupLeader() {
            double buff = students[0].Rank();
            int index = 0;
            for(int i = 0; i < students.Count; i++) {
                if(students[i].Rank() > buff) {
                    buff = students[i].Rank();
                    index = i;
                }
            }
            return students[index];
        }
        public void ShowAll() {
            for(int i = 0; i < students.Count; i++)
                Console.WriteLine(students[i]);
        }
        public void Show(int i) {
            Console.WriteLine(students[i]);
        }
    }
}
Post's attachments

Group.cs 1.51 kb, 558 downloads since 2017-12-22 

5

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

Викладайте код прямо сюди, в тег code. Незручно.
Рядки 35, 43 - i++ недосяжний, бо в обох гілках return. До i++ не дійде.

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

6

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

Стосовно ==, !=, Equals і GetHashCode - класи передаються за посиланням, тобто Student s - це не об'єкт класу Student, а посилання на об'єкт. Відповідно, порівняння == буде видавати рівність не вмісту об'єктів, а посилань (тобто чи посилаються порівнювані змінні на один і той самий об'єкт), тому бажано, якщо вже почали перевизначати деякі порівняння, перевизначати їх усіх.

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

7 Востаннє редагувалося idosyn2 (23.12.2017 15:45:32)

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

public Student GetStudentForBirth(DateTime d) {
            Student st = null;
            for(int i = 0; i < students.Count; i++) {
                if(students[i].Birth == d)
                    st = students[i];
            }
             return st;
        }
        
public Student GetStudentForName(string f, string l) {
            Student st = null;
            for(int i = 0; i < students.Count; i++) {
                if((students[i].Firstname == f) & (students[i].Lastname == l))
                    st = students[i];
            }
            return st;
        }

Переробила ось так. Дякую.

Подякували: 0xDADA11C7, koala2

8 Востаннє редагувалося koala (23.12.2017 20:11:02)

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

Оскільки нас не цікавить номер елементу в масиві, а результат пошуку, як я розумію, не обов'язково має бути останнім (нас влаштовує будь-який елемент з відповідною характеристикою, так?), то

public Student GetStudentForBirth(DateTime d) {
            foreach(Student st in students) {//foreach безпечніший за for, якщо його можна застосувати
                if(st.Birth == d) {
                    return st;//перериваємо цикл
                }
            }
        }

Потім, операція & - це бітове І, на відміну від логічного &&. Результат що &, що && для булевих значень однаковий, але && швидша, бо не обчислює другий операнд, якщо перший false. Тому

                if((students[i].Firstname == f) && (students[i].Lastname == l))

Ну і, нарешті, List має вбудований метод Find, який робить саме те, що треба, але потребує додаткової функції для порівняння. Цю функцію можна зробити анонімною:

public Student GetStudentForBirth(DateTime d) {
            return students.Find( (st) => (st.Birth == d) );
        }

public Student GetStudentForName(string f, string l) {
            return students.Find( (st) => ( (st.Firstname == f) && (st.Lastname == l) ) );
        }

і навіть додати додатковий метод для пошуку за предикатом:

public Student GetStudentByPredicate(Predicate<Student> match) {
            return students.Find( match );
        }
Подякували: NaharD, Torbins, leofun013

9

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

А, і ще: якщо просто перейменувати .psd-файл на .png, він не стає .png. Треба через меню вибрати "зберегти як" чи як воно там в Photoshop.

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

10 Востаннє редагувалося Alchimic (17.04.2018 14:07:05)

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

Краще організувати ні рівні Субд. Там всі функії включені зразу. Тільки оболочку написати. може підійти фокспро для завдання щоб візуально оформити.

11 Востаннє редагувалося /KIT\ (27.07.2021 11:47:50)

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

Alchimic написав:

Краще організувати ні рівні Субд. Там всі функії включені зразу. Тільки оболочку написати. може підійти фокспро для завдання щоб візуально оформити.

:D

Прихований текст

https://replace.org.ua/extensions/om_images/img/5ad84044ccc72/FoxPro_2.6_Developers_Guide_Cover.pnghttps://replace.org.ua/extensions/om_images/img/5ad84044ccc72/foxpro.jpg

Подякували: LoganRoss, koala, varkon, leofun014

12 Востаннє редагувалося Engineer (19.04.2018 09:13:10)

Re: Впритул не бачу помилки. Звідки її ноги ростуть? Студентота в треді.

/KIT\ написав:
Alchimic написав:

Краще організувати ні рівні Субд. Там всі функії включені зразу. Тільки оболочку написати. може підійти фокспро для завдання щоб візуально оформити.

:D

Прихований текст

https://replace.org.ua/extensions/om_images/img/5ad84044ccc72/FoxPro_2.6_Developers_Guide_Cover.pnghttps://replace.org.ua/extensions/om_images/img/5ad84044ccc72/foxpro.jpg

Ну навіщо так жорстоко. Є більш цивілізовані варіанти (див. приєднаний файл)  :D

Можу підігнати навіть міні ORM для роботи з фоксовими базами в .Net

Але рекомендувати Фокс в 2018 році, навіть як навчальний інструмент, я б не ризикнув. Бо ця штука може неправильно переформатувати мізки прогамера

Post's attachments

ms_vfp.PNG 61.63 kb, 194 downloads since 2018-04-19