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

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

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

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

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

Post's attachments

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

2 Востаннє редагувалося idosyn2 (22.12.2017 14: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, 208 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, 238 downloads since 2017-12-22 

4 Востаннє редагувалося idosyn2 (22.12.2017 14: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, 221 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 16: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 21: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 );
        }
Подякували: NagarD, Torbins, leofun013

9

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

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

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

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

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

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

(цей допис зроблено ботом. можете не звертати на нього уваги)
(цей підпис зроблено адміном. можете не звертати на нього уваги)

11

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

Alchimic написав:

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

:D

Прихований текст
https://upload.wikimedia.org/wikipedia/en/2/21/FoxPro_2.6_Developers_Guide_Cover.pnghttp://blog.composableanalytics.com/wp-content/uploads/2017/09/foxpro.jpg
[x|x<-[2..],all(>0)[x`mod`y|y<-[2..x-1]]]
Подякували: LoganRoss, koala, varkon, leofun014

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

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

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

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

:D

Прихований текст
http://replace.org.ua/extensions/om_images/img/5ad84044ccc72/FoxPro_2.6_Developers_Guide_Cover.pnghttp://replace.org.ua/extensions/om_images/img/5ad84044ccc72/foxpro.jpg

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

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

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

Post's attachments

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

13

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

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

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

:D

Прихований текст
http://replace.org.ua/extensions/om_images/img/5ad84044ccc72/FoxPro_2.6_Developers_Guide_Cover.pnghttp://replace.org.ua/extensions/om_images/img/5ad84044ccc72/foxpro.jpg

Ну навіщо так жорстоко. Є більш цивілізовані варіанти

Прихований текст
Візуал - це вже не по канону. Тільки textmode - тільки хардкор!
[x|x<-[2..],all(>0)[x`mod`y|y<-[2..x-1]]]