Студентам с лабораторными сюда (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 20 Jun 2007.

Thread Status:
Not open for further replies.
  1. SSB1981

    SSB1981 Elder - Старейшина

    Joined:
    7 Jan 2008
    Messages:
    108
    Likes Received:
    9
    Reputations:
    0
    Здравствуйте!​
    Я пытаюсь разобраться с динамическими массивами.
    Как я понял существуют два способа
    1)
    Code:
    
    int *asd=new int[3];
    
    //как я понимаю, здесь я создаю новый массив asd с тремя элементами.
    
    2)

    Code:
    
    int *asd=(int*)malloc(sizeof(int)*3);
    
    //как я понимаю, здесь я также создаю массив с тремя элементами.
    
    Если я и в первом и во втором случае допишу:

    Code:
    
    asd[[B]n[/B]]=111;
    //где n любое целое число
    
    всё прекрасно работает!!! :eek:
    Внимание вопрос: почему??? :confused:

    visual studio C++
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Не факт что будет работать. Просто та память под которую выделил всё будет доступна для массива, а что за её пределами, может вообще не существовать или быть отданной под другие нужны. К примеру для локальный переменных.
    И тогда ты просто будешь затирать их.
    Вот пример:
    Code:
    int mas[3];
    int z;
    
    z = 0;
    mas[3] = 1122334;
    printf("%i", z);
    
    зависит от компилятора, но с большой вероятностью выведется не 0, а 1122334
     
    1 person likes this.
  3. a1ertso

    a1ertso New Member

    Joined:
    16 Dec 2009
    Messages:
    35
    Likes Received:
    0
    Reputations:
    0
    Помогите пожалуйста с решением(на Делфи).

    1.1)Найти произведение элементов массива A = {1, 3.5, 4, -0.8, 1.9, 5, 13}, удовлетворяющих условию [​IMG] , если С = 2, D = 10. Сформировать из этих элементов массив Z.

    1.2) В массиве Р(m,n) все элементы разделить на максимальный элемент k-го столбца:
    [​IMG]
     
    #2023 a1ertso, 21 Dec 2009
    Last edited: 21 Dec 2009
  4. lisa99

    lisa99 Banned

    Joined:
    15 Jul 2008
    Messages:
    359
    Likes Received:
    200
    Reputations:
    70
    уточни.
    какому условию
     
  5. a1ertso

    a1ertso New Member

    Joined:
    16 Dec 2009
    Messages:
    35
    Likes Received:
    0
    Reputations:
    0
    Сори, просто не заметил. Условия вписал.
     
  6. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    1.1)
    Code:
    program laba35;
    
    const
      a : array [0..6] of real = (1, 3.5, 4, -0.8, 1.9, 5, 13);
      c = 2;
      d = 10;
    
    var
      i : integer;
      p : real;
    
    begin
      p := 1;
      for i := 0 to 6 do 
        if ((a[i] >= c) and (a[i] < d)) then
          p := p * a[i];
      writeln ('p = ', p : 0 : 2);
    end.
    
    1.2)
    Code:
    program laba36;
    
    type
      SomeArray = array [0..1, 0..2] of real;
    
    const
      p : SomeArray  = ((-1.5, 9.1, 3.5), (2.7, 3.14, 1.5));
      k = 0;
    
    function getmax (p : SomeArray; k : integer) : real;
    var
      i : integer;
      max : real;
    begin
      max := p[0][k];
      for i := 1 to 1 do
        if max < p[i][k] then
          max := p[i][k];
      getmax := max;
    end;
    
    var
      i, j : integer;
      max : real;
      
    begin
      max := getmax (p, k);
      for i := 0 to 1 do
        for j := 0 to 2 do
          p[i][j] := p[i][j] / max;
      for i := 0 to 1 do
        for j := 0 to 2 do
          writeln (p[i][j] : 0 : 2);
    end.
    
     
    #2026 krypt3r, 21 Dec 2009
    Last edited: 21 Dec 2009
  7. Semus

    Semus New Member

    Joined:
    27 Mar 2009
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Поиск самого длинного и самого короткого слова

    Здравствуйте, помогите мне пожалуйста.
    Необходимо на С реализовать следующую программу: из введенной пользователем строки выбрать самое длинное и самое короткое слово.

    У меня есть свои попытки решения данной задачи, вот один из примеров:
    Code:
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        char  stroka[300];
        gets (stroka);
    
        int dlin_min=strlen(stroka); // хранит длинну минимальной строки, пока равна длинне всей строки
        int dlin_max=0; //хранит максимальную длинну строки
        int dlin_tek=0; //хранит текущую длинну строки
    
        char stroka_min[300]; //строка хранящая минимальное слово
        char stroka_max[300];// строка хранящая максимальное слово
        char stroka_tek[300]; // строка хранящая текущее слово
    
        for (int i=0; i<strlen(stroka); i++)
        {
     printf ("i= %d\n", i);
            switch (int(stroka [i]))
            {
                case 32  :{
                                  if  (dlin_tek>dlin_max) {
                                                                            for (int j=0; j<dlin_tek; j++)
                                                                            {
                                                                            printf ("j= %d\n", j);
                                                                            stroka_max[j]=stroka_tek[j];
                                                                            };
                                                                            dlin_max=dlin_tek;
                                                                            };
                                  if (dlin_tek<dlin_min) {
                                                                            for (int j=0; j<dlin_tek; j++)
                                                                            {
                                                                            printf ("j2= %d\n", j);
                                                                            stroka_min[j]=stroka_tek[j];
                                                                            };
                                                                            dlin_min= dlin_tek;
                                                                            };
                                  dlin_tek=0;
                                  break;
                                  }
    
                default:
                {
                    stroka_tek[i]=stroka[i];
                    dlin_tek=strlen(stroka_tek);
                };
            };
        };
    
    printf ("minslovo= %s\n", stroka_min);
    printf ("maxslovo= %s\n", stroka_max);
        return EXIT_SUCCESS;
    }
    
    
    Но после нескольких неудачных попыток я понял, я что со стороками у меня все глухо.Заведомо благодарю всех откликнувшихся
     
  8. 043nKRuT0y

    043nKRuT0y Elder - Старейшина

    Joined:
    31 Oct 2007
    Messages:
    226
    Likes Received:
    8
    Reputations:
    0
    Помогите дописать на JAVA два метода :
    1 - сравнение дат (равно , до , после)
    2 - вычисление количества дней между датами
     
  9. St0nX

    St0nX Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    PHP:
    #include<string.h> 
    #include <stdio.h>

    void main(void)
    {
    char *string "a asd sss dasq";
    char *s;
    char *min;
    char *max;
    int i,j,h;
    strtok(string," ");
    strlen(s);
    i;
    while  (
    s  !=NULL)   
    {
    strtok(NULL," ");
    if(
    s!=NULL)
    {
        
    j=strlen(s);
        if (
    i<j)
        {
        
    i=j;
        
    max s;
        }
        if (
    h>j)
        {
        
    h=j;
        
    min s;
        }
    }
    }
    printf("Min %s len - %d",min,h);
    printf("Max %s len - %d",max,i);
    }
    Как то так. Не проверял но смысл как это делать вроде понятен.
     
    #2029 St0nX, 22 Dec 2009
    Last edited: 22 Dec 2009
  10. Trotter

    Trotter New Member

    Joined:
    11 Jun 2007
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Всем привет, понимаю точ то не сюда пишу но всёже, мне надо написать сетевой органайзер на Visual Studio C++ помощи не прошу с формами с кнопочками и т.д но вот беда я нечего не знаю по поводу как так кодить, раньше баловался на делфи тама всё просто было, попробовал тоже самое провести на этой среде нечего конечно же не получилось, помогите советом
     
  11. Semus

    Semus New Member

    Joined:
    27 Mar 2009
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Помогите разобраться с кодом

    Здравствуйте, помогите разобраться, почему не компилируется следующая программа (вернее компилируется, но во время исполнения вылетает ошибка)

    Code:
    //определяем число вхождений подстроки в введенную пользователем строку
    
    # include <stdio.h>
    # include <stdlib.h>
    # include <string.h>
    
    int main ()
    {
        //вводим строку в которой осуществляем поиск
        char * stroka;
        printf ("Vvedite stroku:");
        gets (stroka);
        printf ("%s\n", stroka);
    
        // вводим строку которую будем искать
        char * iskom;
        printf ("Vvedite iskomuy stoku: ");
        scanf ("%s", &iskom);
    
        //указатель на на номер на найденный номер
        char * point = 0;
    
        //следующая переменная - счетчик
        int i = 0;
    
        for (;;)
        {
            point = strstr(stroka, iskom);
            stroka=point+1;
            if (point==NULL) {break;}
            i++;
        };
    
        printf ("kolichestvo vhogdenii = %d", i);
    
        return 0;
    }
    
    
    Заранее благодарю
     
  12. Trotter

    Trotter New Member

    Joined:
    11 Jun 2007
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    я конечно не совсем силён и могу ошибаться, но тебе надо выделять память...
    типо вместо char * stroka писать char * stroka new char[256];
    и чтобы вот такова бреда не было printf ("kolichestvo vhogdenii)
    подрубай locale.h и в main(){setlocale(LC_ALL, "RUSSIAN"); код... printf("Привет")}
    а по поводу выделения памяти я не знаю как на си сделать malloc юзай хотя у меня так заработало как первый раз писал тока вот цикл странный зацикленный какой то)) с циклом извиняй помочь не могу, и чтобы строку к строке прировнять надо по моемому перегрузку оператора сделать... хотя я дилетант тоже не ругайте меня ))
     
  13. modsonic

    modsonic New Member

    Joined:
    22 Dec 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Описание классов в C++

    Пожалуйста, подскажите как описать класс «Экзаменационная ведомость», частью которого является класс «Студент», хранящий информацию о студенте и его оценке на экзамене. Предусмотреть возможность задания произвольного количества студентов, сортировки студентов по фамилии, вычисления среднего балла за экзамен, а также вывода на экран количества различных оценок. Вот код, который я смог написать, но это еще далеко от идеала:

    Code:
    #include <string.h>
    #include <iostream>
    #include <stdlib.h>
    #include <vcl.h>
    #pragma hdrstop
    #include <cstdlib>
    #include <conio.h>
    #pragma argsused
    using namespace std;
    
    class ekzam{
    	public:
    	class stud{
    	string name;
    	string famil;
    	string otches;
    	int otsenka;
    } temp;
    	int col;
    	int srb;
    	int *values;
    	int count;
    	ekzam(int col){
    		count=col;
    		values=new int[count];
    	}
    	~ekzam(){
    		delete[]values;
    	}
    	void Get(int i){
        	for(i=0;i<col;i++){
    			cin>>stud[i].name;
    		}
    	}
    };
    
    main()
    {
    	int n,i;
    	cin>>n;
    	ekzam students(n);
    	system("PAUSE");
    	return EXIT_SUCCESS;
    }
    
     
    #2033 modsonic, 23 Dec 2009
    Last edited by a moderator: 23 Dec 2009
  14. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    шот какоето безумие внутри класса создавать еще клас, тут логически правильней было бы, создать класс студен со следующими полями:
    ФИО
    ГРУППА
    Хеш таблица /* Ключ: название экзамена, значение: оценка*/
    /* не зубудь что вместо оценки может быть неявка, ее можно обозначить например как -1, а 0 - это оценки еще нет */
    ...

    А потом создать класс ведомость:
    Вектор <Студент>
    ...
    ну и добавить в этот клас всякие приблуды:
    добавление студента в ведомость,
    проверка чтобы каждый студент присутствовал только один раз в одной ведомости
    сортировка вектора по ФИО
    Выставление оценки студенту в ведомости

    так будет гораздо правильней
     
    #2034 cupper, 23 Dec 2009
    Last edited: 23 Dec 2009
  15. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    не правильно. оценка хранится не в студенте. и группа в студенте - полнейший бред. в жизни разве так?

    Описываешь классы ведомость, экзамен, студент, строка ведомости. Ведомость хранить вектор строк ведомости и экзамен, чьи результаты она хранит. Строка ведомости хранит студента, оценку.

    [​IMG]

    вот такая диаграммка как вариант.

    [EDIT]
    Exam поправил на Subject (дисциплина)
     
    #2035 Ra$cal, 23 Dec 2009
    Last edited: 23 Dec 2009
  16. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    а что хранит класс экзамен ?
    Разделение ведомости на ведомость и стока ведомости по абстракции конечно правильней но кому нужна такая детализация ?
    Притом исходя из условия то челу нужно всего два класса. Как ты сказал конечно правильней, я просто адаптировал под условия
     
    #2036 cupper, 23 Dec 2009
    Last edited: 23 Dec 2009
  17. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    предмет, по которому принимался экзамен, т.е. в данном случае просто название.
    а на счет детализации - это не детализация. вот у тебя класс ведомости. как ты будешь хранить список студентов с оценками? std::map? надеюсь не надо объяснять, что даже в такой задаче такое решение совсем уж глупое. ты создашь класс, который будет храниться в контейнере, в том же векторе. т.е. придешь все к той же строке ведомости =) подскажу, что разделение журнала на строки - это просто бородатая классика проектирования, и ниче лучше пока не придумано.
     
  18. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    ты видно мало глупостей видел )))
    моя логика - студенческая, и я этим не горжусь (
     
  19. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    не, я достаточно видел, поэтому и рекомендую сразу пытаца минимизировать их число, ибо привычка дело злое =)
     
  20. Semus

    Semus New Member

    Joined:
    27 Mar 2009
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Верно подмечено, ты "не совсем силен" . Ты какой-то бред несешь: "память выделять", "перегрузку операторов делать ". И не нужно подрубать "locale.h", и прочее что ты там написал. Все решилось проще и самостоятельно через пол часа после появления поста:

    Code:
    //Задание №1
    //определяем число вхождений введеного //пользователем слова в введеную пользователем строку
    
    # include <stdio.h>
    # include <stdlib.h>
    # include <string.h>
    
    int main ()
    {
        char stroka[300]; //данный массив предназначен для хранения введеной пользоватлем строки, объем до 300символов
        char * pStr = stroka; //этот указатель используется для поиска данных, ему дается адрес первого элемента
    
        //вводим строку из которой осуществляем поиск
        printf ("Vvedite stroku: "); //просим пользователя ввести строку
        gets (stroka); //пользователь вводит строку
    
        // вводим строку которую будем искать
        char iskStroka[300]; //массив предназначенный для хранения искомой строки
        char * iskom = iskStroka; //этот указатель используется для поиска и подсчета числа вхождения подстрок в строку
    
        //вводим искомую подстроку
        printf ("Vvedite iskomuy slovo: "); //просим пользователя ввести искомое слово
        scanf("%s", iskStroka);// ввод искомого слова
    
        char * point = 0;//указатель на на номер на найденый номер
    
        int i = 0;    // переменная - счетчик, используем для подсчета кол-ва вхождений подстроки в строку
    
        // следующий цикл обеспечивает подсчет вхождений подстроки в строку
        do //далее начинается вечный цикл с постусловие
        {
            point = strstr(pStr, iskom);//ищем позицию вхождения подстроки в строку
            pStr=point+1;                     //при помощи указателя как-бы обрезаем длинну строки,
                                                        //что при следующем цикле осуществился поиск данных
                                                        //с позиции найденой строки+1.
                                                        //Если не поставить "+1" цикл будет бесконечен, так как постоянно
                                                        //будет находиться первое вхождение с которого теперь начинается адрес поискового указателя pStr
    
            if (point==NULL) {break;}; //если на очередном шаге не было найдено вхождения - прерываем цикл
            i++;
        }
        while (true);//цикл вечен, если его не прервать
    
        //закончили подсчет вхождений строки в подстроку
    
        printf ("kolichestvo vhogdenii = %d\n", i);// выводим результат на экран
    
        system ("PAUSE"); //ждем от пользователя нажатия какой-либо клавиши
        return 0;
    }
    
    
     
Thread Status:
Not open for further replies.