Последние новости

YoungCoder теперь и на Stepikе. Записывайтесь: https://vk.cc/75rISy

Чтобы записаться на курс, необходимо зарегистрироваться на Степике: https://vk.cc/75rIC4

Это моя личная ссылка-приглашение на Stepik для вас. Регистрируясь по этой ссылке, записываясь на курсы и решая задачи, Вы помогаете автору данного сайта принять участие в конкурсе платформы Stepik! Подробности конкурса здесь: https://vk.cc/75rKuS

понедельник, 15 июля 2013 г.

Занятие 11. Одномерные массивы. Программирование для начинающих.

Прочитайте улучшенную версию этого урока "Одномерные массивы".

В новой версии:

  • Ещё более доступное объяснение
  • Дополнительные материалы
  • 9 задач на программирование с автоматической проверкой решения

Добрый день. Сегодня поговорим о массивах. Не будем тянуть быка за хвост, а сразу же возьмем его за рога. Вот представьте, вы хотите написать программу, которая будет вычислять среднее арифметическое ваших (или вашего чада) оценок за четверть/семестр.  И при этом вы хотите не только посчитать среднее, а еще и по какому предмету, у вас максимальный средний балл, сколько пятерок получено за все предметы вместе взятые, и сколько неудов поставлено за весь период и много еще чего. Ясное дело все эти оценки надо где-то хранить. Можно конечно завести пару сотен переменных, придумать им всем разные названия, да еще и так, чтобы отличать в каких именно хранятся оценки по математике, а в которых по русскому. А как средний балл потом как считать? Складывать между собой 200 разных переменных и  результат сложения делить на 200? Ну общая идея конечно такова, но в такой реализации её может исполнить только истинный мазохист. Но есть и хорошая новость для нас с вами. Для хранения больших объемов однотипной информации можно использовать массивы.

Как себе представить массив? Да легко. Можно считать, что массив это такая таблица, точнее один столбик (или одна строчка) некоторой таблицы. Возвращаясь к нашей задаче с оценками можно, это выглядело бы так.
Рис.1 Пример целочисленного массива оценок.

Кстати, запомните, в массиве могут храниться данные только одного типа. Т.е. нельзя в одном массиве хранить данные типа int и типа float. В примере выше, все данные в массиве целые числа. Это и понятно, так как оценок 3.7, 4.2, 2.73 не предусмотрено.

Теперь разберемся с тем, как объявить массив, как с ним работать и чем он может нам помочь.

Для начала научимся объявлять массив. Ничего нового тут нет, Америку сейчас я не открою.
Итак, внимание на экран.

Рис 2. Объявление массива

Как видите, объявление массива почти не отличается об объявления переменной. Точно так же сначала записывают типа данных, которые будут храниться в массиве. Далее следует имя будущего массива.  А теперь, как говорится, десерт, а точнее именно то, что отличает массив от переменной. После имени массива в квадратных скобках пишут размерность массива. Размерность массива это количество данных, которые предполагается хранить в массиве. В нашем случае это 8. То есть мы предполагаем хранить в нашем массиве 8 элементов.

Пришло время рассказать еще об одной особенности массива. Каждый элемент массива имеет свой номер. И причем нумерация элементов начинается с нуля. Поэтому многие программисты, вероятно чувствуя свою элитарность начинают счет с нуля. Ну вы понимаете... =)))
Рис 3. Массив оценок

Кстати, это является не только поводом для шуток, но и для трудностей. Одной из самых распространенных ошибок, при работе с массивами является выход за пределы массива. Это когда у нас есть массив из 8 элементов, а мы пытаемся обратиться к элементу с номером 53. Как видите, размерность у нас 8, а последний номер элемента 7. Вроде бы ничего сложно, помни, что у тебя на один номер меньше, чем объявлял и всё. Но нет ошибались, ошибаются и будут ошибаться.

Теперь посмотрим как занести данные в массив, и как их оттуда извлечь.
Например, мы хотим сохранить данные в первый элемент массива ( помним, что это первый элемент это, элемент с цифрой 0).

Листинг 11.1
ochenka [0] = 4; // занести в нулевой элемент  значение 4
printf("%d ", ochenka[0]); // вывести значение хранящееся в                                  // нулевом элементе

В общем и целом работа с отдельным элементом массива ничем не отличается от работы с обычной переменной. Элемент массива можно использовать везде, где вы использовали переменные. Единственно что нужно следить за типом данных, но это нужно делать и при работе с обычными переменными.

А теперь рассмотрим одну из задач, которые встречаются в ЕГЭ. Как будет выглядеть массив после выполнения следующей программы. Только не надо её переписывать в среду разработки, прокрутите программу ручками. Это называется компиляция в уме. Нарисуйте массив, и последовательно выполняйте операции, шаг за шагом.

Листинг 11.2

#include <stdio.h>

int main(){
      int A[10], k=0;
       for (int i=0; i<=9; i++)
             A[i]=9-i;
       for (int i=0; i<=4; i++){
             k = A[i];
             A[i] = A[9-i];
             A[9-i] = k;
       } 
      for (int i=0; i<=9; i++)
            printf("%d ", A[i]);
return(0); 
}

Правильный ответ написан ниже, белым цветом.Выделите строку и сразу его увидите. Настоятельно вас прошу, проделать это упражнение самостоятельно, без помощи компьютера.
0 1 2 3 4 5 6 7 8 9

Вернемся на секундочку к нашему примеру, который мы описали в начале урока. Давайте таки найдем среднее арифметическое из оценок и посчитаем количество двоек например.

Листинг 11.3


#include <stdio.h>

int main(){
      int ochenka[8];
      for (int i=0; i<=7; i++){
            printf ("Vvedite %d ochenku:", i+1);
            scanf("%d", &ochenka[i]);
      }
int k=0; //переменная счетчик для двоек 
float s_a=0; //переменная для хранения среднего арифметического 
      for (int i=0; i<=7; i++){
            if (ochenka[i] == 2)
                  k++;
            s_a+=ochenka[i];
      }
printf("Kolichestvo dvoek = %d srednii ball = %3.2f\n", k, s_a/8);
return(0);
}


Результат выполнения данной программы представлен на следующем рисунке.
Рис 4. Программа вычисляющая средний балл и количество двоек.
Как видите, работа с массивами подразумевает неплохое владение операторами цикла. Редко используют лишь один какой-то элемент массива. Чаще изменения затрагивают все элементы массива, поэтому используются циклические конструкции. Работать же с конкретным элементом массива, приходится уже внутри цикла.



Хотел еще написать про основные алгоритмы, используемые при работе с массивами написать, но решил оставить это на следующий урок.

Резюме урока:
  •  научились основным действия  при работе с массивами: объявление массива из нескольких элементов, присвоение конкретному элементу некоторого значение.
  •  попрактиковались выполнять программу в уме (на листочке)

 Задание для практической работы:

  • Выполнить задание, которое описано в уроке. Разобраться в нем, особенно если у вас не сразу получился правильный ответ.
  • Задан целочисленный массив из N элементов. N<=30. Пользователь задает некоторое целое число. Необходимо посчитать, количество элементов массива  меньших по модулю этого числа
  • Написать программу, которой на вход подается три массива оценок: сначала по русскому языку, потом по математике и наконец по физике. Причем, количество их заранее не известно, но не превышает 20 штук, по любому из предметов.  По разным предметам может быть введено различное количество оценок. Ввод оценок производится пользователем с клавиатуры, причем сначала он вводит одну из цифр 1, 2, 3 которая определяет,  по какому предмету эта оценка. (1 -русский язык, 2 - математика и 3 - физика)
Ввод данных заканчивает, когда пользователь введет цифру 0.
Например:
1 5
1 4
2 3
1 5
3 4
0
Такой набор исходных данных означает, что ученик получил
по русскому языку 5,4,5
по математике 3
по физике 4
Программа, должна вывести на экран все оценки ученика по каждому из предметов в формате:
rus: 5 4 5
math: 3
fiz: 4
Посчитать средний балл по каждому из предметов. Посчитать количество двоек по каждому из предметов, если их нет, то вывести 0. Посчитать средний балл по всем оценкам. Посчитать количество пятерок, которые получены по всем предметам.


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

60 комментариев :

  1. Спасибо!
    Очень хорошие уроки!
    Все очень понятно и доступно!

    У меня вопрос по этому уроку.
    Как делегировать заполнение массива в отдельную функцию?
    например заполняем массив рандомными числами от 0 до 10:
    int mas[n], n;
    srand(time(NULL));
    for (i = 0; i <= n; i++) {
    mas[i] = rand()%10;
    }
    А если у нас таких массивов 10? для каждого писать цикл? можно же как то отдельную функцию сделать для заполнения?

    p.s. когда продолжение? :)

    ОтветитьУдалить
    Ответы
    1. for (i = 0; i <= (n-1); i++); конечно же :)

      Удалить
    2. Можно было просто оставить меньше =))

      Спасибо, мне приятно слышать лестные отзывы о своем труде.

      Теперь по существу вопроса. Вы чуточку опережаете события, и почти раскрыли тему следующего занятия. Точнее одну из микротем. )

      Да, конечно можно. И до этого мы обязательно дойдем. Если вам интересно, то могу указать направление, а вы уже сами разыщите и попробуйте. =) Вам нужно просто передать массив в функцию, там есть небольшие особенности, но я думаю вам не составит труда с ними разобраться. Попробуйте запрос "передача массива в функцию Си". Я бы с радостью об этом рассказал в будущем уроке, но тогда придется рассказывать еще много из того, что не все знают. )

      Удалить
    3. Продолжение в это воскресенье.

      Удалить
  2. Задание 2.
    #include
    void mass(int a,int b){ // a-dlinna massiva, b-to nekotoroe chislo
    int i,c=0,massiv[a];
    for (i=0;i30) || (x<=0))
    }

    можно ли как-то с функцией сделать задание, если да то подскажите

    ОтветитьУдалить
    Ответы
    1. Тут что-то непонятное написано. Можно, но опять же еще рано. Чуть позже. )

      Удалить
  3. весь текст не могу выложить, но как можно заполнять массив с помощью функции и scanf

    ОтветитьУдалить
    Ответы
    1. Если сделать массив глобальным, то в любой функции он будет доступен. Можно использовать указатели.
      Но об этом мы еще будем говорить.

      Удалить
  4. задание 2.
    #include

    void main(void)
    { int x,y,i,k=0;
    do
    scanf(" %d %d \n",&x,&y);
    while ((x>30) || (x<=0));
    int mass[30];
    for (i=0;i<x;++i){
    scanf("%d \n",&mass[i]);
    if (mass[i]<y)
    k++;
    }
    printf("%d \n",k);
    }
    когда я заполнил массив чтобы окончить заполнение мне требуется написать какойто символ например "а". Почему функция сканф не заканчивает своей работы после Enter.

    У меня Microsoft visual studio 2010.

    ОтветитьУдалить
    Ответы
    1. Что-то я не совсем понял, что делает ваша программа. Поясните пожалуйста.

      Удалить
  5. Задание 3.

    #include
    #include
    void main(void)
    {
    int rus[20],math[20],fiz[20],c,r,m,f,r1,m1,f1;
    c=getchar();
    r=0;
    m=0;
    f=0;
    while (c!=0)
    {
    switch (c)
    {
    case '1' : scanf(" %d\n",&rus[r]); ++r; break;
    case '2' : scanf(" %d\n",&math[m]); ++m; break;
    case '3' : scanf(" %d\n",&fiz[f]); ++f; break;
    default : break;
    }
    c=getchar();
    }
    printf("\nrus: ");
    for (r1=0;r1<=r;++r1)
    printf("%d ",rus[r1]);
    printf("\nmath: ");
    for (m1=0;m1<=m;++m1)
    printf("%d ",math[m1]);
    printf("\nfiz: ");
    for (f1=0;f1<=f;++f1)
    printf("%d ",fiz[f1]);
    }

    Правельно? а то у меня компелятор глючит.

    ОтветитьУдалить
  6. #include "stdio.h"
    int main ()
    {
    int tab[30], i, vvod, k, n=0;
    for (i=0; i<31; i++)
    {
    if (i==30)
    {
    printf ("vvedite chislo dlya sravneniya - ");
    scanf ("%d", &vvod);
    }
    else
    {
    printf ("vvedite chislo - ");
    scanf ("%d", &tab[i]);
    }
    }
    for (i=0; i<30; i++)
    {
    if (tab[i]<0)
    k=tab[i]*-1;
    else
    k=tab[i];
    if (k<vvod)
    n+=1;
    }
    printf("kolichestvo cifr men'she sravnimogo - %d\n", n);
    return (0);
    }

    ОтветитьУдалить
  7. //Vot moy krokodil na poslednee zadanie:

    #include "stdio.h"
    int main()
    {
    int rus[20], mat[20], fiz[20], i=0, a, b, x=0, y=0, z=0;
    printf("vvedite nomer predmeta i ocenku cherez probel\n");
    for (i; i<60; i++)
    {
    scanf ("%d", &a);
    if (a==0)
    b=0;
    else
    scanf ("%d", &b);
    switch (a)
    {
    case 1: {
    rus[x]=b;
    x++;
    } break;
    case 2: {
    mat[y]=b;
    y++;
    } break;
    case 3: {
    fiz[z]=b;
    z++;
    } break;
    case 0: {
    for (x; x<20;x++)
    rus[x]=0;
    for (y; y<20;y++)
    mat[y]=0;
    for (z; z<20;z++)
    fiz[z]=0;
    i=60;
    } break; //case0
    default: {
    printf ("%d - net takogo predmeta\n", a);
    i--;
    } break;//default
    }//switch
    }//for
    printf ("rus: ");
    for (i=0; i<20; i++)
    {
    if (rus[i]!=0)
    printf ("%d ", rus[i]);
    }//for rus
    printf ("\nmat: ");
    for (i=0; i<20; i++)
    {
    if (mat[i]!=0)
    printf ("%d ", mat[i]);
    }//for mat
    printf ("\nfiz: ");
    for (i=0; i<20; i++)
    {
    if (fiz[i]!=0)
    printf ("%d ", fiz[i]);
    }//for fiz
    //printf ("\n");
    int n5=0, sum1=0, sum2=0, sum3=0, c=0;
    x=0;
    y=0;
    z=0;
    a=0;
    b=0;
    for (i=0; i<20;i++)
    {
    if (rus[i]>0)
    {
    sum1+=rus[i];
    a++;
    }//if rus
    if (mat[i]>0)
    {
    sum2+=mat[i];
    b++;
    }//if mat
    if (fiz[i]>0)
    {
    sum3+=fiz[i];
    c++;
    }//if fiz
    switch (rus[i])
    {
    case 2: x++;break;
    case 5: n5++;
    }
    switch (mat[i])
    {
    case 2: y++;break;
    case 5: n5++;
    }
    switch (fiz[i])
    {
    case 2: z++;break;
    case 5: n5++;
    }
    }//for
    printf("\nkolichestvo dvoek po russkomu - %d\nkolichestvo dvoek po matematike - %d\nkolichestvo dvoek po fizike - %d\n", x, y, z);
    printf("srednyaya ocenka po russkomu - %2.1f\nsrednyaya ocenka po matematike - %2.1f\nsrednyaya ocenka po fizike - %2.1f\n", (float)sum1/a, (float)sum2/b, (float)sum3/c);
    printf("srednyaya ocenka po vsem predmetam - %2.1f\n", (float)(sum1+sum2+sum3)/(a+b+c));
    printf("kolichestvo pyaterok po vsem predmetam - %d\n", n5);
    return(0);
    }//main

    ОтветитьУдалить
  8. Задача номер 2

    #include

    int main()
    {
    int a,N,M[30],k=0;
    do {
    printf("Vvedite razmer massiva - ");
    scanf("%d",&N);
    } while (N>30 || N<0);

    printf("Vvedite sravnimoe chislo - ");
    scanf("%d",&a);

    for (int i=0;i<N;i++)
    {
    printf("Vvedite chislo %d - ",i+1);
    scanf("%d",&M[i]);
    }
    for (int i=0;i<N;i++)
    {
    if (M[i]<0)
    M[i]=M[i]*(-1);
    if (M[i]<a)
    k++;
    }
    printf("Kolichestvo chisel menshih modulya dannogo - %d\n",k);
    return (0);
    }

    ОтветитьУдалить
  9. Вот мое решение на 3-ю задачу (может немного и запутал но вроде работает):

    #include

    int main()
    {
    int R[20],M[20],F[20],r=0,m=0,f=0,a,b,r2=0,m2=0,f2=0,k5=0;
    float sr=0,sm=0,sf=0,s;
    printf("Vvedite ocenki v formate a b\ngde: a - predmet, b - ocenka \nKodi predmetov: \n1 - russkiy yazik \n2 - matematika \n3 - fizika\nDlya okonchaniya vvoda vvedite - 0 0\n");
    do
    {
    scanf("%d %d",&a,&b);


    if (a<0 || a>3)
    {
    printf("\nNepravilniy vvod koda predmeta\n");
    }
    else
    if (a==1)
    {
    if (r>=20)
    {
    printf("\nPo etomu predmetu uzhe vvedeno 20 ocenok!\n");
    }
    else
    {
    if (b<1 || b>5)
    {
    printf("\nNe pravilno vvedena ocenka\n");
    }
    else
    {
    R[r]=b;
    r++;
    }
    }
    }
    else
    if (a==2)
    {
    if (m>=20)
    {
    printf("\nPo etomu predmetu uzhe vvedeno 20 ocenok!\n");
    }
    else
    {
    if (b<1 || b>5)
    {
    printf("\nNe pravilno vvedena ocenka\n");
    }
    else
    {
    M[m]=b;
    m++;
    }
    }
    }
    else
    if (a==3)
    {
    if (f>=20)
    {
    printf("\nPo etomu predmetu uzhe vvedeno 20 ocenok!\n");
    }
    else
    {
    if (b<1 || b>5)
    {
    printf("\nNe pravilno vvedena ocenka\n");
    }
    else
    {
    F[f]=b;
    f++;
    }
    }
    }
    else
    {
    printf("Vvod okonchen\n");
    }
    } while (a!=0 && b!=0);

    printf("\nrus: ");
    for (int i=0; i<r; i++)
    {
    printf("%d ",R[i]);
    }
    printf("\nmath: ");
    for (int i=0; i<m; i++)
    {
    printf("%d ",M[i]);
    }
    printf("\nfiz: ");
    for (int i=0; i<f; i++)
    {
    printf("%d ",F[i]);
    }

    printf("\n\nSredniy bal po predmetam:");
    printf("\nrus: ");
    for (int i=0; i<r; i++)
    {
    sr=sr+R[i];
    }
    sr=sr/r;
    printf("%.1f",sr);

    printf("\nmath: ");
    for (int i=0; i<m; i++)
    {
    sm=sm+M[i];
    }
    sm=sm/m;
    printf("%.1f",sm);

    printf("\nfiz: ");
    for (int i=0; i<f; i++)
    {
    sf=sf+F[i];
    }
    sf=sf/f;
    printf("%.1f",sf);

    printf("\n\nkolichestvo 2-k:");
    printf("\nrus: ");
    for (int i=0; i<r; i++)
    {
    if (R[i]==2)
    r2++;
    }
    printf("%d",r2);

    printf("\nmath: ");
    for (int i=0; i<m; i++)
    {
    if (M[i]==2)
    m2++;
    }
    printf("%d",m2);

    printf("\nfiz: ");
    for (int i=0; i<f; i++)
    {
    if (F[i]==2)
    f2++;
    }
    printf("%d",f2);

    s=(sr+sm+sf)/3;
    printf("\n\nSredniy bal po vsem predmetam: %.1f", s);

    printf("\n\nkolichestvo 5-k po vsem predmetam: ");
    for (int i=0; i<r; i++)
    {
    if (R[i]==5)
    k5++;
    }

    for (int i=0; i<m; i++)
    {
    if (M[i]==5)
    k5++;
    }
    for (int i=0; i<f; i++)
    {
    if (F[i]==5)
    k5++;
    }
    printf("%d",k5);

    printf("\n");
    return (0);
    }

    ОтветитьУдалить
  10. Задание 2

    #include
    #define N 30
    int main()
    {
    int i,k,x;
    int y=0; //счетчик чисел меньших заданного по модулю
    int ms[N];
    printf("Vvedite razmer massiva(NE BOLEE %d)\n",N);
    scanf("%d",&k);
    printf("Vvedite sravnivaemoe celoe chislo: ");
    scanf("%d",&x);
    printf("Vvedite massiv\n");
    for ( i=0;i<k;i++)
    scanf("%d",&ms[i]);

    printf("Ishodnii massiv iz %d elementov:\n",k);
    for ( i=0;i<k;i++)
    printf("%5d",ms[i]);

    if(x<0) //как учитываются положительные числа?Я не понял ,что то
    // или все дело {...} ?
    x=x*(-1);

    for (int i=0; i<k; i++)
    {
    if(ms[i]<x)
    y++;
    }
    printf("\nKolichestvo chisel menshih |x|=%d : %d\n",x,y);
    for(i=0;i<y;i++)
    printf("%5d",ms[i]);
    printf("\n");
    }

    Ответьте на вопрос описанный в цикле...

    ОтветитьУдалить
  11. Этот комментарий был удален автором.

    ОтветитьУдалить
    Ответы
    1. Задание 3

      #include
      #define N 100
      int main()
      {
      int i,b;
      int sr=0,sm=0,sf=0; //счетчик для пятерок
      float s_r=0,s_m=0,s_f=0; //средний балл
      int tr=0,tm=0,tf=0; //счетчик для двоек
      int k=0,x=0,y=0;
      int m[N],r[N],f[N]; //m-математика,f-физика,r-русский язык

      printf("Vvedite kod predmeta i ocenku(2-5) cherez probel\n");
      printf("Kod predmeta #1=[rus], #2=[math], #3=[fiz]\n");
      printf("-Primer-\n 1 3\n 2 4\n");
      printf("--------------------\n");
      for(i=0;i3);*/

      {
      if(b==1)
      {
      scanf("%d",&r[k]);
      s_r+=r[k];
      if(r[k]==2)
      {
      tr++;
      }
      if(r[k]==5)
      {
      sr++;
      }
      k++;
      }

      if(b==2)
      {
      scanf("%d",&m[x]);
      s_m+=m[x];
      if(m[x]==2)
      {
      tm++;
      }
      if(m[x]==5)
      {
      sm++;
      }
      x++;
      }

      if(b==3)
      {
      scanf("%d",&f[y]);
      s_f+=f[y];
      if(f[y]==2)
      {
      tf++;
      }
      if(f[y]==5)
      {
      sf++;
      }
      y++;
      }
      if(b==0)
      {
      printf("\t\t--Ocenki--\nRusskii: ");
      for(k=0;k<r[k];k++)
      {
      printf("%2d",r[k]);
      }
      printf("\nSrednii ball=%2.2f\tKolichestvo 2=%d",s_r/k,tr);
      printf("\nMatematika: ");
      for(x=0;x<m[x];x++)
      {
      printf("%2d",m[x]);
      }
      printf("\nSrednii ball=%2.2f\tKolichestvo 2=%d",s_m/x,tm);
      printf("\nFizika: ");
      for(y=0;y<f[y];y++)
      {
      printf("%2d",f[y]);
      }
      printf("\nSrednii ball=%2.2f\tKolichestvo 2=%d",s_f/y,tf);
      printf("\n\nKolichestbo ocenok:%d\tObshii srednii ball=%2.2f",x+y+k,(s_r/k+s_m/x+s_f/y)/3);
      printf("\nObshee kolichestvo 2=%d\tObshee kolichestvo 5=%d\n",tr+tf+tm,(sm+sr+sf));
      return 0;
      }


      }
      }
      return 0;
      }

      Я ее наконец сделал.Времени убил немерено.
      Хотя!Получил массу впечатлений после завершения.Защиту от дурака вводить не стал(потом может дополню) и писать через фунции(еще не до конца разобрался,но обязательно напишу)...
      Пробовал через switch()-case,while и тд...
      Убедительная просьба указать на ошибки в 2х задачах)))

      Удалить
  12. Задание 3

    #include "stdio.h"
    #define N 100
    int main()
    {
    int i,b;
    int sr=0,sm=0,sf=0; //счетчик для пятерок
    float s_r=0,s_m=0,s_f=0; //средний балл
    int tr=0,tm=0,tf=0; //счетчик для двоек
    int k=0,x=0,y=0;
    int m[N],r[N],f[N]; //m-математика,f-физика,r-русский язык

    printf("Vvedite kod predmeta i ocenku(2-5) cherez probel\n");
    printf("Kod predmeta #1=[rus], #2=[math], #3=[fiz]\n");
    printf("-Primer-\n 1 3\n 2 4\n");
    printf("--------------------\n");
    for(i=0;i<N;i++)
    {
    scanf("%d",&b);
    {
    if(b==1)
    {
    scanf("%d",&r[k]);
    s_r+=r[k];
    if(r[k]==2)
    {
    tr++;
    }
    if(r[k]==5)
    {
    sr++;
    }
    k++;
    }

    if(b==2)
    {
    scanf("%d",&m[x]);
    s_m+=m[x];
    if(m[x]==2)
    {
    tm++;
    }
    if(m[x]==5)
    {
    sm++;
    }
    x++;
    }

    if(b==3)
    {
    scanf("%d",&f[y]);
    s_f+=f[y];
    if(f[y]==2)
    {
    tf++;
    }
    if(f[y]==5)
    {
    sf++;
    }
    y++;
    }
    if(b==0)
    {
    printf("\t\t--Ocenki--\nRusskii: ");
    for(k=0;k<r[k];k++)
    {
    printf("%2d",r[k]);
    }
    printf("\nSrednii ball=%2.2f\tKolichestvo 2=%d",s_r/k,tr);
    printf("\nMatematika: ");
    for(x=0;x<m[x];x++)
    {
    printf("%2d",m[x]);
    }
    printf("\nSrednii ball=%2.2f\tKolichestvo 2=%d",s_m/x,tm);
    printf("\nFizika: ");
    for(y=0;y<f[y];y++)
    {
    printf("%2d",f[y]);
    }
    printf("\nSrednii ball=%2.2f\tKolichestvo 2=%d",s_f/y,tf);
    printf("\n\nKolichestbo ocenok:%d\tObshii srednii ball=%2.2f",x+y+k,(s_r/k+s_m/x+s_f/y)/(x+y+k));
    printf("\nObshee kolichestvo 2=%d\tObshee kolichestvo 5=%d\n",tr+tf+tm,(sm+sr+sf));
    return 0;
    }
    }
    }
    return 0;
    }

    Я ее наконец сделал.Времени убил немерено.
    Хотя!Получил массу впечатлений после завершения.Защиту от дурака вводить не стал(потом может дополню) и писать через фунции(еще не до конца разобрался,но обязательно напишу)...
    Пробовал через switch()-case,while и тд...
    Убедительная просьба указать на ошибки в 2х задачах)))

    ОтветитьУдалить
  13. Судьба Егор, такова: не сладко придется тебе 12.11.2013 от злой старухи получишь ты по горбам! а будут звать эту старуху КОВАЛЬЧУК, хахахаха. Но ты можешь вонзить ей кол в сердце сегодня ночью и будешь ты жить поживать, да добра наживать!=) ( если грохнешь ее, позвони плз, я на пары не пойду) =)

    ОтветитьУдалить
    Ответы
    1. Нормальный препод)
      Просто мы бокланим на занятиях)

      Удалить
  14. Задание №2:

    #include

    int main(){
    int massiv[10];
    for (int i=0; i<=9; i++){
    printf ("Vvedite celoe chislo v massiv:\n");
    scanf("%d", &massiv[i]);
    }
    int a, s=0;
    printf ("Vvedite celoe chislo A:\n");
    scanf("%d", &a);
    for (int i=0; i<=9; i++){
    if (massiv[i]<0)
    {
    massiv[i]=massiv[i]*(-1);

    }
    }
    for (int i=0; i<=9; i++)
    {
    if (massiv[i]<a)
    s++;
    }


    printf("Kolichestvo chisel = %d \n", s);

    return(0);
    }

    ОтветитьУдалить
  15. #include ((stdio.h))//задание 1
    int main()
    {
    int ocen[10],a=0,i;
    float sr_ar=0;
    for(i=0;i<10;i++){
    printf("\n vvedite %d ocenku ", i+1);
    scanf("%d",&ocen[i]);
    if (ocen[i]==2){ a++;
    }
    sr_ar+=ocen[i];
    }//for
    printf(" \n dvoek - %d, srednee - %f \n",a,sr_ar/10);
    return(0);
    }
    тока кол-во оценок у меня 10... вроде работает...

    ОтветитьУдалить
  16. #include ((stdio.h))//задание 2 сравнение модуля
    #include ((math.h))
    int main()
    {
    int n,mass[30],i,A,kol=0;
    printf("vvedite dlinnu massiva i celoe chislo \n ");
    scanf("%d %d", &n,&A);
    for(i=0;i<n;i++){
    printf("\n vvedite chislo v massiv v yacheiku %d ", i+1);
    scanf("%d",&mass[i]);
    if (abs(mass[i])<A) kol++;
    }//for
    printf(" \n kolvo chisel s men'shim modulem %d\n",kol);
    return(0);
    }

    ОтветитьУдалить
  17. #include //задание 3 оценки
    int main()
    {
    int russ[20], math[20],fiz[20],n,i_r=0,i_m=0,i_f=0,k2_rus=0,k2_math=0,k2_fiz=0,k5=0;
    float r_sr=0,m_sr=0,f_sr=0;
    do{//ввод данных
    printf("vvedite nomer predmeta 1-russk,2-mathem,3-fizika,0 -konec vvoda\n ");
    scanf_s ("%d", &n );
    switch(n){
    case 1:printf("\t\t\t vvedite ocenku po russkomu ");scanf("%d",&russ[i_r]);if(russ[i_r]==5) k5++;i_r++;break;
    case 2:printf("\t\t\t vvedite ocenku po matematike ");scanf("%d",&math[i_m]);if(math[i_m]==5) k5++;i_m++;break;
    case 3:printf("\t\t\t vvedite ocenku po fizike ");scanf("%d",&fiz[i_f]);if(fiz[i_f]==5) k5++;i_f++; break;
    }//switch
    }
    while(n!=0);
    printf("\n russkii:");
    do//печать руск.
    {printf(" %d", russ[n]);
    r_sr+=russ[n];
    if (russ[n]==2) k2_rus++;
    n++;}
    while(n<i_r);
    float sr=r_sr/i_r;
    printf(" srednee %f, kol-vo 2-ek %d", sr,k2_rus);
    n=0;
    printf("\n mathem: ");
    do//печать матем.
    {printf(" %d", math[n]);
    m_sr+=math[n];
    if(math[n]==2) k2_math++;
    n++;}
    while(n<i_m);
    sr=m_sr/i_m;
    printf(" srednee %f, kol-vo 2-ek %d", sr,k2_math);
    n=0;
    printf("\n fizika: ");
    do//печать физики
    {printf(" %d", fiz[n]);
    f_sr+=fiz[n];
    if(fiz[n]==2) k2_fiz++;
    n++;}
    while(n<i_f);
    sr=f_sr/i_f;
    printf(" srednee %f, kol-vo 2-ek %d", sr,k2_fiz);
    sr=(r_sr+m_sr+f_sr)/(i_r+i_m+i_f);
    printf("\n obwee srednee %f, kol-vo 5-ok %d\n",sr,k5);
    return(0);
    }
    как то так...

    ОтветитьУдалить
  18. задание 2
    #include ((stdio.h))// задание 2
    #include ((stdlib.h))
    int main ()
    {
    int arr[1000], i,n,vr;
    for (i = 0; i < 1000; i++) {//for1 заполнение массива случайными числами
    arr[i] = rand()%101;
    }//for1
    for (n=0; n<998; n++){//for 2 сортировка max-->min
    for (i=0; i<(999-n); i++){//for3
    if (arr[i] < arr[i+1]){
    vr=arr[i];
    arr[i]= arr[i+1];
    arr[i+1]=vr;
    }//if
    }//for3
    }//for2
    n=1;
    i=0;
    while(n<10){// while поиск 10-го
    if (arr[i]>arr[i+1]) n+=1;
    if (n==10) printf("\n %d", arr[i+1]);
    i++;
    }//while
    printf("\n");
    return(0);
    }

    ОтветитьУдалить
  19. Задание №3
    #include
    int main()
    {
    int rus[20];
    int math[20];
    int fiz[20];
    int f,b;
    int i=0,j=0,k=0,ii,jj,kk;
    do{
    do{
    scanf("%d",&f);
    }
    while(f<0||f>3);
    if(f==1||f==2||f==3){
    switch(f){
    case 1:scanf("%d",&rus[i]);i++;ii=i;break;
    case 2:scanf("%d",&math[j]);j++;jj=j;break;
    case 3:scanf("%d",&fiz[k]);k++;kk=k;break;
    }
    }
    }
    while(f==1||f==2||f==3);
    int srus=0,smath=0,sfiz=0,k2rus=0,k2math=0,k2fiz=0,k5rus=0,k5math=0,k5fiz=0;
    printf("rus: ");
    for(i=0;i<ii;i++){
    printf("%d ",rus[i]);
    srus+=rus[i];
    if(rus[i]==2)
    k2rus++;
    if(rus[i]==5)
    k5rus++;
    }printf("\nmath: ");
    for(j=0;j<jj;j++){
    printf("%d ",math[j]);
    smath+=math[j];
    if(math[j]==2)
    k2math++;
    if(math[j]==5)
    k5math++;
    }printf("\nfiz: ");
    for(k=0;k<kk;k++){
    printf("%d ",fiz[k]);
    sfiz+=fiz[k];
    if(fiz[k]==2)
    k2fiz++;
    if(fiz[k]==5)
    k5fiz++;
    }
    float srbrus,srbmath,srbfiz,srbobsh;
    int k5obsh;
    srbrus=(float)srus/(ii);printf("\nsrednii bal po ruskomy yaziky - %f kolichestvo 2-ek po ruskomy yaziky - %d\n",srbrus,k2rus);
    srbmath=(float)smath/(jj);printf("srednii bal po matematike - %f kolichestvo 2-ek po matematike - %d\n",srbmath,k2math);
    srbfiz=(float)sfiz/(kk);printf("srednii bal po fizike - %f kolichestvo 2-ek po fizike - %d\n",srbfiz,k2fiz);
    srbobsh=(float)(srus+smath+sfiz)/(ii+jj+kk);printf("obshii srednii bal - %f\n",srbobsh);
    k5obsh=k5rus+k5math+k5fiz;printf("obshee kolichestvo 5-ok - %d\n",k5obsh);
    return(0);
    }

    ОтветитьУдалить
  20. Сколько уже перечитал уроков - молодец, спасибо за огромный труд. Я бы поленился столько излагать :)

    ОтветитьУдалить
  21. masive.c:5:7: error: ‘for’ loop initial declarations are only allowed in C99 mode
    for (int i=0; i<=7; i++){
    masive.c:5:7: note: use option -std=c99 or -std=gnu99 to compile your code

    у меня например ошибку выдает ^, пришлось привести код к виду:
    int main(){
    int ochenka[8], i;
    for (i=0; i<=7; i++){

    ОтветитьУдалить
  22. Задание 3
    #include "stdio.h"

    int main(){

    int rus[20], math[20], fiz[20];
    int c;
    int r, m, f, i;//количество оценок по языкам
    float rr, mm, ff;//сумма оценок
    float rsred = 0;
    float msred = 0;
    float fsred = 0;
    rr = mm = ff = 0;
    r = m = f = 0;

    printf("i pristupim k pros4etu vashih rezultatov:\n kakoi predmet budet pervim?\n 1 - rus\n 2 - math\n 3 - fiz\n ");
    scanf_s("%d", &c, 1);
    if (c == 0){
    printf("vi ne vveli ni odnoi ocenki. poprobuite snova\n");
    scanf_s("%d", &c, 1);
    }
    while(c != 0){

    if (c != 1 && c != 2 && c != 3){
    printf("vi vveli ne sushestvuyshii nomer, vvedite nomer predmeta po-novoi\n ");
    scanf_s("%d", &c, 1);
    }
    if (c == 1)
    while( c == 1)
    {
    printf(" subject RUS and %d mark is: ", r + 1);
    scanf_s(" %d", &rus[r], 1);
    if( rus[r] > 5 || rus[r] < 1){
    printf("takoi ocenki ne bivaet! ocenka ne zas4itana.\n vvedite nomer predmeta 1, 2, 3?");
    r--;
    }

    scanf_s("%d", &c, 1);
    r++;
    }
    if (c == 2)
    while( c == 2)
    {
    printf(" subject MATH and %d mark is: ", m + 1);
    scanf_s(" %d", &math[m], 1);
    if( math[m] > 5 || math[m] < 1){
    printf("takoi ocenki ne bivaet! ocenka ne zas4itana.\n vvedite nomer predmeta 1, 2, 3?");
    m--;
    }
    scanf_s("%d", &c, 1);
    m++;
    }
    if (c == 3)
    while( c == 3)
    {
    printf(" subject FIZ and %d mark is: ", f + 1);
    scanf_s(" %d", &fiz[f], 1);
    if( fiz[f] > 5 || fiz[f] < 1){
    printf("takoi ocenki ne bivaet! ocenka ne zas4itana.\n vvedite nomer predmeta 1, 2, 3?");
    f--;
    }
    scanf_s("%d", &c, 1);
    f++;
    }
    }

    if (c == 0)
    {
    printf("RUS :");
    for( i = 0; i < r; i++)
    {
    printf("%10d", rus[i]);
    rr += rus[i];
    rsred = rr/r;
    }
    printf("\npo RUS srednii bal = %f\n\n", rsred);

    printf("MATH :");
    for( i = 0; i < m; i++)
    {
    printf("%10d", math[i]);
    mm += math[i];
    msred = mm/m;
    }
    printf("\npo MATH srednii bal = %f\n\n", msred);

    printf("FIZ :");
    for( i = 0; i < f; i++)
    {
    printf("%10d", fiz[i]);
    ff += fiz[i];
    fsred = ff/f;
    }
    printf("\npo FIZ srednii bal = %f\n\n", fsred);
    }
    return(0);
    }

    ОтветитьУдалить
  23. Помогите пожалуйста разобраться с листингом 11.2.
    Начинаю думать так: 1. дан массив А, состоящий из 10 элементов.
    2. for (int i=0; i<=9; i++)
    A[i]=9-i;
    после этого получается, что элементы А следующие 9 8 7 6 5 4 3 2 1 0.
    3. for (int i=0; i<=4; i++){
    k = A[i];
    A[i] = A[9-i];
    A[9-i] = k;
    здесь получается, что К присваиваем значение 0-го элемента массива или
    раз к=0, то A[0] становиться равным 0 и тогда и A[9] = 0 (A[i] = A[9-i])
    И КАК БЫТЬ-ТО???

    ОтветитьУдалить
    Ответы
    1. #include
      int main(){
      int A[10], k=0; //Объявляем массив размерностью 10 элементов.
      for (int i=0; i<=9; i++) //Начинаем формировать массив:
      A[i]=9-i; //A[0]=9-0=9, A[1]=9-1=8 и т.д. Массив принимает вид: 9 8 7 6 5 4 3 2 1 0.
      for (int i=0; i<=4; i++){
      k = A[i]; //k=A[0]=9 - присваивается значение 0-го элемента массива т.е значение 9.
      1) A[i] = A[9-i]; //A[0]=A[9-0] - 0-му элементу присваивается значение 9-го т.е A[0]=0.
      2) A[9-i] = k; //A[9-0]=9 - 9-му элементу присваивается значение k т.е A[9]=9.
      Таким образом, первая строка - берем элементы массива A[0...4] и присваиваем значения 0...4.
      вторая строка - берем элементы массива A[9...5] и присваиваем значения 9...5.
      Массив принимает вид: 0 1 2 3 4 5 6 7 8 9.

      Удалить
    2. Спасибо Иван, что помогаете мне отвечать на вопросы других учеников.

      Удалить
  24. Задание 2
    #include
    #include
    int main(){
    int A[30],x,k=0;
    printf("Vvedite celoe chislo\n");
    scanf("%d", &x);
    for(int i=0; i<=29; i++){
    A[i]=i;}
    for (int i=0; A[i]<abs(x); i++){
    k++;}
    printf("Kolychestvo elementov massiva po moduly men'she chisla %d ravno %d ", x,k);
    return(0);
    }

    ОтветитьУдалить
  25. Задан целочисленный массив из N элементов. N<=30. Пользователь задает некоторое целое число. Необходимо посчитать, количество элементов массива меньших по модулю этого числа
    #include
    int main()
    {
    int M[30],a,k=0,i;
    for(i=0;i<30;i++)
    M[i]=i;
    printf("Vvedite chislo ");
    scanf("%d",&a);
    for(i=0;i<30;i++)
    if(abs(M[i])<a) k=k+1;
    printf("%d",k);
    return 0;
    }

    ОтветитьУдалить
  26. Этот комментарий был удален автором.

    ОтветитьУдалить
  27. Этот комментарий был удален автором.

    ОтветитьУдалить
  28. #include


    void main (){
    int rus=-1, mat=-1, fiz=-1, nomer_pedmet, ocenka_rus[rus], ocenka_mat[mat], ocenka_fiz[fiz];
    printf("Меню выбора предмете для выстовлении оценок:\nЧтобы выбрать русский язык нажмите - 1\nЧтобы выбрать математику нажмите - 2\nЧтобы выбрать физику нажмите - 3\nЧтобы закончить набор нажмите - 4\n");
    do{
    printf("Место для ввода=");
    scanf("%d", &nomer_pedmet);
    switch(nomer_pedmet){
    case 1:
    rus=rus+1; printf("Оценка:"); scanf ("%d", &ocenka_rus[rus]); break;
    case 2:
    mat=mat+1; printf("Оценка:"); scanf ("%d", &ocenka_mat[mat]); break;
    case 3:
    fiz=fiz+1; printf("Оценка:"); scanf ("%d", &ocenka_fiz[fiz]); break;
    default:
    if(nomer_pedmet<1 || nomer_pedmet>4){
    printf("Ошибка: Неверно нажата кнопка\n");
    }/*if*/ break;
    }/*switf*/
    }/*do_while*/
    while(nomer_pedmet!=4);
    int i;
    printf("rus");
    if(rus!=-1){
    for(i=0; i<=rus; i++){
    printf(" %d", ocenka_rus[i]);
    }/*for*/
    }/*if*/
    printf("\n");
    printf("mat");
    if(rus!=-1){
    for(i=0; i<=mat; i++){
    printf(" %d", ocenka_mat[i]);
    }/*for*/
    }/*if*/
    printf("\n");
    printf("fiz");
    if(rus!=-1){
    for(i=0; i<=fiz; i++){
    printf(" %d", ocenka_fiz[i]);
    }/*for*/
    }/*if*/
    printf("\n");
    }

    ОтветитьУдалить
  29. второе, для 10 значного массива, 30 лень с клавиатуры вводить было

    int main(){
    int n, i, j=0, A[10];
    printf("\n vvedite massiv cherez probel \n");
    for (i = 0; i < 10; i++) {
    scanf_s("%i", &A[i]);
    }
    printf("\n vvedite chislo n \n");
    scanf_s("%i", &n);

    for (i = 0; i <= 9; i++) {
    if (n > abs(A[i])) {
    j = j++;
    }
    }

    if (j>0)
    printf("\n znacheni men'she n v massive : %i \n", j);
    else
    printf("\n net znachenii v massive men'she n \n");
    return(0);
    }

    ОтветитьУдалить
    Ответы
    1. Работает. Но исполнение мне не нравится.
      Лучше бы конечно предупредить пользователя, какой размерности массива мы вводим. А то я могу и 40 чисел ввести, но сработает только для первых 10 элементов, а в качестве n выберется 11 введенное число.

      Удалить
  30. здраствуйте

    попробую кратко спросить

    Листенинг 11.2
    for (int i=0; i<=4; i++){
    k = A[i];
    A[i] = A[9-i];
    A[9-i] = k;

    здесь значение A[i] "переворачивается? т.е. сперва что то присваевается к, потом А[i],потом А[i]?в какой последовательности происходит присвоение? то есть из первой строчки можно понять, что значение к присвоено место в массиве 0 в первом цикле?

    извините за несобранность(

    ОтветитьУдалить
    Ответы
    1. Ответить кратко не смогу. Давайте вот такую аналогию попробуем.
      Представим, что у нас есть десять одинаковых ящиков. Поставим их друг за другом и пронумеруем начиная с самого левого. Нумеровать будем с нуля.
      получим
      |0| |1| |2| |3| |4| |5| |6| |7| |8| |9|

      Теперь эти ящики (все вместе) будем называть кодовым словом массив A. Этот массив имеет 10 элементов (по количеству ящиков в нем).
      И пусть в стороне у нас есть еще один ящик. Этот ящик стоит отдельно. Будем называть его кодовым словом переменная k.

      Пусть мы в каждый ящик положили по одному числу. В ящик с номером нуль, положим число 9. В ящик с номером 1 число 8, в ящик с номером два - 7 и так далее. В итоге получим такую картинку.

      |0| |1| |2| |3| |4| |5| |6| |7| |8| |9|
      |9| |8| |7| |6| |5| |4| |3| |2| |1| |0|
      Сверху номер ящика, а снизу число которое там лежит.


      |k|
      | |
      В ящике k пока ничего нет, он пустой.

      Выполним кусочек кода, который вы просите разобрать.
      1 шаг.
      i=0; Запоминаем это. Будем считать, что это наш начальник, который дает нам указания. Сейчас он сказал, что i=0. Хорошо.
      2 шаг.
      k = A[i];
      А[i] - означает число, которое лежит в массиве A в ящике с номером i.
      ВСя же строчка означает, посмотри, что лежит в A[i] и положи такое же число в ящик k. Так как нам сказали, что i равняется 0, то мы должны посмотреть я ящик c номером нуль. Смотрим. Там у нас лежит число 9. Хорошо. Кладем в ящик k число 9. Теперь картинка такая.
      |0| |1| |2| |3| |4| |5| |6| |7| |8| |9|
      |9| |8| |7| |6| |5| |4| |3| |2| |1| |0|

      |k|
      |9|

      3 шаг.
      A[i] = A[9-i];
      посмотреть число в ящике с номером 9-i и положить такое же число в ящик c номером i. Как мы помним i у нас равно нулю. тогда 9-i =9 смотрим, что лежит в 9 ящике. Там у нас лежит число нуль. Хорошо, теперь кладем это число в ящик с номером нуль. Там уже лежит число девять, но нам на это наплевать, мы его выкидываем и кладем туда нуль. Получается следующая картина.
      |0| |1| |2| |3| |4| |5| |6| |7| |8| |9|
      |0| |8| |7| |6| |5| |4| |3| |2| |1| |0|

      |k|
      |9|

      4 шаг.
      A[9-i] = k;
      Посмотреть что лежит в ящике k и положить такое же число в ящике с номером 9-i = 9, т.е. в девятый ящик. В ящике k лежит число 9. Хорошо, кладем такое же число в ящик с номером девять. Получаем такую картинку.

      |0| |1| |2| |3| |4| |5| |6| |7| |8| |9|
      |9| |8| |7| |6| |5| |4| |3| |2| |1| |0|

      |k|
      |9|

      На этом первая итерация цикла закончена. идем в начало (к начальнику) Он проверяет, i<=4? Да, меньше. Тогда он нам говорит, что теперь i=1; Иди снова выполняй свою работу. и т.д.
      Но обратим внимание, на картинку, как она изменилась за один проход цикла.
      До:
      |0| |1| |2| |3| |4| |5| |6| |7| |8| |9|
      |9| |8| |7| |6| |5| |4| |3| |2| |1| |0|

      |k|
      | |

      После:
      |0| |1| |2| |3| |4| |5| |6| |7| |8| |9|
      |9| |8| |7| |6| |5| |4| |3| |2| |1| |0|

      |k|
      |9|

      Видите, числа в первом и последнем ящиках поменялись местами. Для обмена используется дополнительный ящик k.

      Теперь понятно, как это работает?

      Удалить
    2. гениально, все понял, спасибо!!!

      Удалить
  31. День добрый!
    мой вариант 3 задания: http://pastebin.ru/qRZxuTsK
    средний бал по всем предметам почему то криво считает

    ОтветитьУдалить
    Ответы
    1. Почему вы решили, что она коряво считает?)

      Удалить
    2. мой косяк, сейчас начал писать почему не верно считает и понял что сам не так считал ))) на работе лучше не оформлять работы )))

      Удалить
  32. 2е задание , вводить 15 чисел было ленька, подсмотрев, сделал так
    int main (void)
    {

    int masiv[15],a,k=0;
    srand(time(NULL));
    printf("Vvedite celoe chislo:");
    scanf ("%d", &a);

    for (int i=0; i<=14; i++){
    masiv[i]=rand();
    printf (" %d\n", masiv[i]);
    }
    for ( int i=0; masiv[i]<abs(a); i++){
    k++;
    }
    printf ("kolichestvo elementov massiva men'shux po modylyu chisla %d = %d\n", a,k);
    return (0);
    }

    ОтветитьУдалить
    Ответы
    1. Добрый день, Дмитрий.

      Оформите программу в виде функции, которой передается указатель на целочисленный массив arr и целое число N. Функция возвращает то, что требуется в задании. Т.е. количество элементов массива, меньших N.

      Удалить
    2. Если я правильно понял задачу, то вот. Завис я правда на указателе-его объявление, как его вызывать в функцию и т.д. Гугл конечно помогал как мог, ну то что я по вашим урокам еще не проходил, дается сложно)
      и Кстати в своем 1м варианте исполнения нашел ошибку, в этом уже исправил.
      int LessThanNumberCount (int*,int);
      int main (void)
      {
      int Myarr[21],N=17,result;
      int *arr = &Myarr[0];

      result = LessThanNumberCount(&(*arr),N);
      printf ("kolichestvo elementov massiva men'shux po modylyu = %d", result);
      return (0);
      }

      int LessThanNumberCount (int *arr, int N)
      {
      int k=0;
      for ( int i=0; i<N; i++){
      if (*arr<abs(N)){
      k++;
      printf ("%d", *arr);// смотрю что там за мусор.
      (*arr)++;
      }
      }
      return (k);
      }

      Удалить
    3. 0. Каюсь, дал задание на опережение.
      1. От вас требуется только сама функция, без основной программы.
      2. Работать с указателем на массив нужно следующим образом:
      Обычно мы обращаемся к i-му элементу массива так arr[i], но если у нас arr указатель на массив, то обращение к i-му элементу выглядит так *(arr+i).
      Оставьте пока эту программу, потом как пройдете 18 урок, сделайте её так, как нужно.
      Успехов!)

      Удалить
    4. Хорошо, а пока вот решение 3го задания
      int main (void)
      {
      int a,b;//Вводимые данные
      int k=0;//счетчик ввода оценок
      int r=0, m=0, f=0;// ячейки массивов
      float s_r=0, s_m=0, s_f=0, s_V;// переменные для хранения среднего балла
      int r_2=0, m_2=0, f_2=0;// переменные счетчик для 2ек
      int r_5=0, m_5=0, f_5=0, V_5;// счетчик для 5рок
      int rus[20], math[20], fiz[20];
      printf ("1-русский язык,2-математика и 3-физика.\nVvedi 4erez probel predmet i ocenky\n");
      do {
      scanf ("%d %d", &a,&b);
      switch (a){
      case 1: rus[r]=b; r++; break;
      case 2: math[m]=b; m++; break;
      case 3: fiz[f]=b; f++; break;
      }
      k++;
      }
      while ((a!=0)&&(k!=59));
      printf ("rus: ");
      for (int i=0; i<r; i++){
      printf ("%d ", rus[i]);
      if (rus[i]==2)
      r_2++;
      if (rus[i]==5)
      r_5++;
      s_r+=rus[i];
      }

      printf ("\nmath: ");
      for (int i=0; i<m; i++){
      printf ("%d ", math[i]);
      if (math[i]==2)
      m_2++;
      if (math[i]==5)
      m_5++;
      s_m+=math[i];

      }
      printf ("\nfiz: ");
      for (int i=0; i<f; i++){
      printf ("%d ", fiz[i]);
      if (fiz[i]==2)
      f_2++;
      if (fiz[i]==5)
      f_5++;
      s_f+=fiz[i];
      }
      printf("\n\tRus: Srednuj ball %.2f, kolichestvo dvoek %d\n", s_r/r, r_2);
      printf("\tMath: Srednuj ball %.2f, kolichestvo dvoek %d\n", s_m/m, m_2);
      printf("\tFiz: Srednuj ball %.2f, kolichestvo dvoek %d\n", s_f/f, f_2);
      s_V = ((s_r/r)+(s_m/m)+(s_f/f))/3;
      V_5 = r_5+m_5+f_5;
      printf ("\t\tObshij srednij ball po vsem predmetam = %.2f\n", s_V);
      printf ("\t\tObshee kolichestvo pyaterok - %d\n", V_5);
      return (0);
      }

      Удалить
  33. // Задание 2
    #include "stdio.h
    #include "math.h"
    #include "iostream"

    int main ()
    {
    int massiv [30];


    for (int i=0;i<=30;i++)
    {
    printf("Element %d=", i+1);
    std::cin>> massiv [i];
    if (massiv [i] == 0)
    {
    for (i; i<=30;i++)
    {
    massiv[i]=100000000;
    }// удаляю не заполеные значения, надеюсь модуль будет ниже)
    break;// остоновка процесса счёта, оказываеться не только в свиче работает
    }// значения массива
    }//for I

    double modul;
    printf("Vvedite chislo, po modulu etogo chisla men'shie elementu poschitautsa\n");
    std::cin>> modul;
    modul=fabs(modul);// по модулю всё таки
    int koll=0;

    for (int i=0; i<=30; i++)
    {
    if (massiv[i] < modul)
    {
    koll=koll+1;
    }
    }//for II, счётчик значений

    printf("Vsego chisel = %d\n", koll);

    int A;
    for (int i=0;i<=5;i++)
    {
    do
    {
    printf("Kakoe znachenie massiva otobrazit\?\n");
    std::cin>> A;
    }while (A>30);
    printf("%d\n",massiv[A-1]);// проверка значений, вот тут то я на iostream и прешел)
    }
    return(0);
    }// всё работает убита куча времени

    ОтветитьУдалить
    Ответы
    1. Я смотрю вы планомерно продвигаетесь вперед. Поздравляю. ))

      Негоже использовать в одной программе средства ввода и вывода из различных языков. Перефразирую известную комедию "cin не нужен!"

      Удалить
    2. стараюсь, однако работа 9ч в сутки не даёт заниматься полноценно по 10ч в день(

      Удалить
  34. #include
    #include
    #include
    #include



    int main()
    {
    setlocale (LC_ALL,"russian");

    const int max=20;
    int m,r,p,countr=0,countm=0,countp=0;
    int math[max],russ[max],phy[max];
    int a,five=0,twor=0,twom=0,twop=0;
    float midr=0,midp=0,midm=0,mid_all=0;

    do
    {
    do
    {
    printf ("1-Руссикий язык\n2-Математика\n3-Физика\n0-закончить ввод оценок\nВыберите предмет:");
    scanf_s("%i",&a);
    }
    while(a>3);

    switch(a)
    {

    case 1:
    while(countr<max)
    {
    printf("Введите оценку:");
    scanf_s("%i",&russ[countr]);
    if(russ[countr]==0)
    break;
    countr++;
    }
    break;

    case 2:
    while(countm<max)
    {
    printf("Введите оценку:");
    scanf_s("%i",&math[countm]);
    if(math[countm]==0)
    break;
    countm++;
    }
    break;

    case 3:
    while(countp<max)
    {
    printf("Введите оценку:");
    scanf_s("%i",&phy[countp]);
    if(phy[countp]==0)
    break;
    countp++;
    }
    break;
    }
    }
    while(a!=0);
    printf("\n");

    printf("rus: ");
    for (int j=0;j<countr;j++)
    {
    printf("%i ",russ[j]);
    if(russ[j]==2)
    twor++;
    if(russ[j]==5)
    five++;
    midr=(midr+russ[j]);
    }
    printf("Средний балл по русскому языку: %.1f количество двоек:%i\n",midr/countr,twor);

    printf("math:");
    for (int j=0;j<countm;j++)
    {
    printf("%i ",math[j]);
    if(math[j]==2)
    twom++;
    if(math[j]==5)
    five++;
    midm=(midm+math[j]);
    }
    printf("Средний балл по матемитике: %.1f количество двоек:%i\n",midm/countm,twom);

    printf("phy:");
    for (int j=0;j<countp;j++)
    {
    printf("%i ",phy[j]);
    if(phy[j]==2)
    twop++;
    if(phy[j]==5)
    five++;
    midp=(midp+phy[j]);
    }
    printf("Средний балл по физике: %.1f количество двоек:%i\n",midp/countm,twop);
    printf("Средний балл по всем предметам: %.1f\n",mid_all=(midr+midm+midp)/(countr+countm+countp));
    printf("Количество пятерок по всем предметам:%i",five);
    _getch();
    return 0;
    }

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.