Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массивы в СИ, массивы  
:(
    Опции темы
Инна90
Дата 5.1.2011, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 5.1.2011

Репутация: нет
Всего: нет



Ребят, помогите пожалуйста решить задачу

(Заполнить два массива, размером 40 и 30 элементов, соответственно,
случайными целыми числами в диапазоне от –50 до 50. Из полученных двух
массивов создайте два массива отдельно, один из которых содержит числа от –
10 до 10, а другой – от 20 до 50. Проведите сортировку полученных массивов
по возрастанию. Для контроля результата сделайте распечатку массивов, в том
числе исходного.) 

P.S1. нужно всю прогу написать через функции,а с этим делом у меня ни как:

P.S2. Сортировка надо 3 способами:
Пример:
Код
void SortPuz (int v[][S], int k[])
{
    int i,q, m, tmp;
    for (q=0;q<K;q++) {
    for (i=1;i<=k[q]-1;i++)
    for (m=k[q]; m>i; m--) {
    if (v[q][m-1]<v[q][m-2]) // сравнение с предыдущим
    { // Обмен местами с предыдущим элементом
        tmp = v[q][m-1];
        v[q][m-1] = v[q][m-2];
        v[q][m-2] = tmp;
    }} }
}


void SortVkl (int d[][S], int k[])
{
    int i,j,q,m, tmp;
    for(q=0;q<=K;q++) {
    for(j=k[q];j>=0;j--) d[q][j+1]=d[q][j];
    for (i=2; i<=k[q]; i++)
    {
    m=i;
    d[q][0]=d[q][i]; // Установка барьера
    while (d[q][m]<d[q][m-1]) // включение
    { // Обмен с предыдущим элементом местами
        tmp = d[q][m]; d[q][m] = d[q][m-1]; d[q][m-1]= tmp;
        m--; // включение идет к началу массива
    };
    };
    for(j=0;j<=k[q];j++) d[q][j]=d[q][j+1];
    }
}

void SortPoi (int d[][S], int k[])
{
    int i,j,q,m,u, min;
    for(q=0;q<=K;q++) {
    for(j=k[q];j>=0;j--) d[q][j+1]=d[q][j];
    for (i=1;i<=k[q]-1;i++)
    {
    m=i; min=d[q][i];
    for (u=i+1;u<=k[q]; u++)
    {
    if (d[q][u]<min)
    {min=d[q][u]; m=u; }
    }
    d[q][m]=d[q][i]; d[q][i]=min;
    }
for(j=0;j<=k[q];j++) d[q][j]=d[q][j+1];
}



Примерный алгоритм:

сначала один заполняется массив 40 элементов...потом другой массив 30 элементов.....=>они сливаются в один двумерный массив=>идет отбор чисел от -10 до 10 и от 20 до 50(2 отдельных массива)=>сортировка(сортируются тоже 2 массива)

Модератор: Не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 6.1.2011, 11:05
PM MAIL   Вверх
Estranged
Дата 6.1.2011, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.8.2010

Репутация: нет
Всего: 3



Бюро добрый услуг в http://forum.vingrad.ru/Vingrad-help-center.html
PM MAIL   Вверх
bsa
Дата 6.1.2011, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Инна90 @  6.1.2011,  00:05 Найти цитируемый пост)
нужно всю прогу написать через функции,а с этим делом у меня ни как

Напиши сначала без функций, затем выдели в коде самодостаточные части и оформи в виде отдельных процедур. Хотя, логичней это делать сначала. Я бы тебе порекомендовал написать еще 2 функции: заполнение массива случайными числами от -50 до +50 (делается с использованием rand() умноженного на разность между верхним и нижним пределами увеличенную на 1 (иначе не будет никогда значения +50) и деленного на константу RAND_MAX, приведенную к типу double, и добавлением значения нижнего предела) и выделение из одного массива в другой чисел в заданных пределах.
PM   Вверх
Инна90
Дата 6.1.2011, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 5.1.2011

Репутация: нет
Всего: нет



Вот программа:
Код

#include <stdio.h>
#include <stdlib.h>
#define S 10
#define K 7
#define N1 40
#define N2 30

void Title();
void Zapsi (int q []);
void Zap (int *x, int y);
void Ob (int a [],int s[][S], int q);
void Vib (int s[][S] , int q[][S], int t, int m, int p, int r[]);
void SortPuz (int v[][S], int k[]);
void SortVkl (int d[][S], int k[]);
void SortPoi (int d[][S], int k[]);
void Out (int c[][S], int m[]);
void Outa (int c[], int m);

int main ()
{
    int a [N1];
    int b [N2];
    int s [K][S];
    int s10 [K][S];
    int s50 [K][S];
    int s10i[K];
    int s50i[K];
    int si [K];
    Zapsi(si);
    Title ();
    Zap (a, N1);
        puts("mas raz");
        Outa(a,N1);
    Zap (b, N2);
        puts("mas dva");
        Outa(b,N2);
    Ob(a,s,N1);
    Ob(b,s,N2);
        puts("4isla use");
        Out (s, si);
    Vib(s,s10,K,-10,10,s10i);
    Vib(s,s50,K,20,50,s50i);
    SortPuz(s10,s10i);
    SortPoi(s50,s50i);
    SortVkl(s,si);
    puts("4isla ot -10 do 10");
    Out (s10, s10i);
    puts("4isla ot 20 do 50");
    Out (s50, s50i);
    puts("4isla use");
    Out (s, si);
    return 0;
}

void Title ()
{
    puts ("Programma prednazna4ena dlia opredelenia poriadka sledovaniia kodov simvolov");
    puts ("v vvedenom massive slov, razmesenia slov s razli4aushimisia poriadkom");
    puts ("v raznie massivi i sortirovki polu4ennih massivov\n");
}

void Outa (int c[], int m)
{
    int i;
    for(i=0;i<m;i++) printf("%d,",c[i]);
    printf ("\n");
}

void Out (int c[][S], int m[])
{
     int i,j;
     for (i=0;i<K;i++) {for (j=0;j<m[i];j++) printf ("%d ", c[i][j]);
     printf ("\n");}

}
void Zapsi (int q [])
{
    int i;
    for (i=0;i<K;i++) q[i]=S;
}

void Zap (int *x, int y)
{
    int i;
    for (i=0;i<=y;i++) x[i]=-50+rand()%100;
}

void Ob (int a [],int s[][S], int q)
{
   static int i=0;
   int l=0,j,t;
   for (t=0;t<q/S;t++) {for (j=0;j<S;j++) {s[i][j]=a[l]; ++l;} i++;}
}

void Vib (int s[][S] , int q[][S], int t, int m, int p, int r[])
{
    int i,j,l=0;
    for(i=0;i<t;i++)
    {
    l=0;
    for(j=0;j<S;j++)
    if ((s[i][j]>m)&&(s[i][j]<p))
    {q[i][l]=s[i][j]; l++;}; r[i]=l;
    }
}

void SortPuz (int v[][S], int k[])
{
    int i,q, m, tmp;
    for (q=0;q<K;q++) {
    for (i=1;i<=k[q]-1;i++)
    for (m=k[q]; m>i; m--) {
    if (v[q][m-1]<v[q][m-2])
    {
        tmp = v[q][m-1];
        v[q][m-1] = v[q][m-2];
        v[q][m-2] = tmp;
    }} }
}


void SortVkl (int d[][S], int k[])
{
    int i,q,m, tmp;
    for(q=0;q<K;q++) {
    for (i=1; i<k[q]; i++)
    {
    m=i;
    while (d[q][m]<d[q][m-1]&&m!=0)
    {
        tmp = d[q][m]; d[q][m] = d[q][m-1]; d[q][m-1]= tmp;
        m--;
    };
    };
    }
}

void SortPoi (int d[][S], int k[])
{
    int i,q,m,u, min;
    for(q=0;q<=K;q++) {
    for (i=0;i<k[q]-1;i++)
    {
    m=i; min=d[q][i];
    for (u=i;u<k[q]; u++)
    {
    if (d[q][u]<min)
    {min=d[q][u]; m=u; }
    }
    d[q][m]=d[q][i]; d[q][i]=min;
    }
}
}



но при запуске выходит ошибка : 123.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства. и кнопка(Отправить --Не отправлять.....как при ошибки в enternet explorer вобщем ) ..помогите...что не верно?  может у когото и работает.....можете выложить скрин? :-(..
PM MAIL   Вверх
log584
Дата 6.1.2011, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 2.1.2010

Репутация: нет
Всего: нет



Цитата(Инна90 @ 6.1.2011,  20:29)
Вот программа:
Код

#include <stdio.h>
#include <stdlib.h>
#define S 10
#define K 7
#define N1 40
#define N2 30

void Title();
void Zapsi (int q []);
void Zap (int *x, int y);
void Ob (int a [],int s[][S], int q);
void Vib (int s[][S] , int q[][S], int t, int m, int p, int r[]);
void SortPuz (int v[][S], int k[]);
void SortVkl (int d[][S], int k[]);
void SortPoi (int d[][S], int k[]);
void Out (int c[][S], int m[]);
void Outa (int c[], int m);

int main ()
{
    int a [N1];
    int b [N2];
    int s [K][S];
    int s10 [K][S];
    int s50 [K][S];
    int s10i[K];
    int s50i[K];
    int si [K];
    Zapsi(si);
    Title ();
    Zap (a, N1);
        puts("mas raz");
        Outa(a,N1);
    Zap (b, N2);
        puts("mas dva");
        Outa(b,N2);
    Ob(a,s,N1);
    Ob(b,s,N2);
        puts("4isla use");
        Out (s, si);
    Vib(s,s10,K,-10,10,s10i);
    Vib(s,s50,K,20,50,s50i);
    SortPuz(s10,s10i);
    SortPoi(s50,s50i);
    SortVkl(s,si);
    puts("4isla ot -10 do 10");
    Out (s10, s10i);
    puts("4isla ot 20 do 50");
    Out (s50, s50i);
    puts("4isla use");
    Out (s, si);
    return 0;
}

void Title ()
{
    puts ("Programma prednazna4ena dlia opredelenia poriadka sledovaniia kodov simvolov");
    puts ("v vvedenom massive slov, razmesenia slov s razli4aushimisia poriadkom");
    puts ("v raznie massivi i sortirovki polu4ennih massivov\n");
}

void Outa (int c[], int m)
{
    int i;
    for(i=0;i<m;i++) printf("%d,",c[i]);
    printf ("\n");
}

void Out (int c[][S], int m[])
{
     int i,j;
     for (i=0;i<K;i++) {for (j=0;j<m[i];j++) printf ("%d ", c[i][j]);
     printf ("\n");}

}
void Zapsi (int q [])
{
    int i;
    for (i=0;i<K;i++) q[i]=S;
}

void Zap (int *x, int y)
{
    int i;
    for (i=0;i<=y;i++) x[i]=-50+rand()%100;
}

void Ob (int a [],int s[][S], int q)
{
   static int i=0;
   int l=0,j,t;
   for (t=0;t<q/S;t++) {for (j=0;j<S;j++) {s[i][j]=a[l]; ++l;} i++;}
}

void Vib (int s[][S] , int q[][S], int t, int m, int p, int r[])
{
    int i,j,l=0;
    for(i=0;i<t;i++)
    {
    l=0;
    for(j=0;j<S;j++)
    if ((s[i][j]>m)&&(s[i][j]<p))
    {q[i][l]=s[i][j]; l++;}; r[i]=l;
    }
}

void SortPuz (int v[][S], int k[])
{
    int i,q, m, tmp;
    for (q=0;q<K;q++) {
    for (i=1;i<=k[q]-1;i++)
    for (m=k[q]; m>i; m--) {
    if (v[q][m-1]<v[q][m-2])
    {
        tmp = v[q][m-1];
        v[q][m-1] = v[q][m-2];
        v[q][m-2] = tmp;
    }} }
}


void SortVkl (int d[][S], int k[])
{
    int i,q,m, tmp;
    for(q=0;q<K;q++) {
    for (i=1; i<k[q]; i++)
    {
    m=i;
    while (d[q][m]<d[q][m-1]&&m!=0)
    {
        tmp = d[q][m]; d[q][m] = d[q][m-1]; d[q][m-1]= tmp;
        m--;
    };
    };
    }
}

void SortPoi (int d[][S], int k[])
{
    int i,q,m,u, min;
    for(q=0;q<=K;q++) {
    for (i=0;i<k[q]-1;i++)
    {
    m=i; min=d[q][i];
    for (u=i;u<k[q]; u++)
    {
    if (d[q][u]<min)
    {min=d[q][u]; m=u; }
    }
    d[q][m]=d[q][i]; d[q][i]=min;
    }
}
}



но при запуске выходит ошибка : 123.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства. и кнопка(Отправить --Не отправлять.....как при ошибки в enternet explorer вобщем ) ..помогите...что не верно?  может у когото и работает.....можете выложить скрин? :-(..

Ты думаешь серьезно, что вот в этой твоей билиберде кому - то будет действительно радостно разбираться? Если действительно хочешь разобраться с примером, то не посчитай за труд, опиши всю задачу конкретно. Чем конкретнее - тем лучше для тебя. С уважением, команда телепатов...
PM MAIL   Вверх
sergioK
Дата 6.1.2011, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(Инна90 @ 6.1.2011,  20:29)
Вот программа:
Код

#include <stdio.h>
#include <stdlib.h>
#define S 10
#define K 7
#define N1 40
#define N2 30

void Title();
void Zapsi (int q []);
void Zap (int *x, int y);
void Ob (int a [],int s[][S], int q);
void Vib (int s[][S] , int q[][S], int t, int m, int p, int r[]);
void SortPuz (int v[][S], int k[]);
void SortVkl (int d[][S], int k[]);
void SortPoi (int d[][S], int k[]);
void Out (int c[][S], int m[]);
void Outa (int c[], int m);

int main ()
{
    int a [N1];
    int b [N2];
    int s [K][S];
    int s10 [K][S];
    int s50 [K][S];
    int s10i[K];
    int s50i[K];
    int si [K];
    Zapsi(si);
    Title ();
    Zap (a, N1);
        puts("mas raz");
        Outa(a,N1);
    Zap (b, N2);
        puts("mas dva");
        Outa(b,N2);
    Ob(a,s,N1);
    Ob(b,s,N2);
        puts("4isla use");
        Out (s, si);
    Vib(s,s10,K,-10,10,s10i);
    Vib(s,s50,K,20,50,s50i);
    SortPuz(s10,s10i);
    SortPoi(s50,s50i);
    SortVkl(s,si);
    puts("4isla ot -10 do 10");
    Out (s10, s10i);
    puts("4isla ot 20 do 50");
    Out (s50, s50i);
    puts("4isla use");
    Out (s, si);
    return 0;
}

void Title ()
{
    puts ("Programma prednazna4ena dlia opredelenia poriadka sledovaniia kodov simvolov");
    puts ("v vvedenom massive slov, razmesenia slov s razli4aushimisia poriadkom");
    puts ("v raznie massivi i sortirovki polu4ennih massivov\n");
}

void Outa (int c[], int m)
{
    int i;
    for(i=0;i<m;i++) printf("%d,",c[i]);
    printf ("\n");
}

void Out (int c[][S], int m[])
{
     int i,j;
     for (i=0;i<K;i++) {for (j=0;j<m[i];j++) printf ("%d ", c[i][j]);
     printf ("\n");}

}
void Zapsi (int q [])
{
    int i;
    for (i=0;i<K;i++) q[i]=S;
}

void Zap (int *x, int y)
{
    int i;
    for (i=0;i<=y;i++) x[i]=-50+rand()%100;
}

void Ob (int a [],int s[][S], int q)
{
   static int i=0;
   int l=0,j,t;
   for (t=0;t<q/S;t++) {for (j=0;j<S;j++) {s[i][j]=a[l]; ++l;} i++;}
}

void Vib (int s[][S] , int q[][S], int t, int m, int p, int r[])
{
    int i,j,l=0;
    for(i=0;i<t;i++)
    {
    l=0;
    for(j=0;j<S;j++)
    if ((s[i][j]>m)&&(s[i][j]<p))
    {q[i][l]=s[i][j]; l++;}; r[i]=l;
    }
}

void SortPuz (int v[][S], int k[])
{
    int i,q, m, tmp;
    for (q=0;q<K;q++) {
    for (i=1;i<=k[q]-1;i++)
    for (m=k[q]; m>i; m--) {
    if (v[q][m-1]<v[q][m-2])
    {
        tmp = v[q][m-1];
        v[q][m-1] = v[q][m-2];
        v[q][m-2] = tmp;
    }} }
}


void SortVkl (int d[][S], int k[])
{
    int i,q,m, tmp;
    for(q=0;q<K;q++) {
    for (i=1; i<k[q]; i++)
    {
    m=i;
    while (d[q][m]<d[q][m-1]&&m!=0)
    {
        tmp = d[q][m]; d[q][m] = d[q][m-1]; d[q][m-1]= tmp;
        m--;
    };
    };
    }
}

void SortPoi (int d[][S], int k[])
{
    int i,q,m,u, min;
    for(q=0;q<=K;q++) {
    for (i=0;i<k[q]-1;i++)
    {
    m=i; min=d[q][i];
    for (u=i;u<k[q]; u++)
    {
    if (d[q][u]<min)
    {min=d[q][u]; m=u; }
    }
    d[q][m]=d[q][i]; d[q][i]=min;
    }
}
}



но при запуске выходит ошибка : 123.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства. и кнопка(Отправить --Не отправлять.....как при ошибки в enternet explorer вобщем ) ..помогите...что не верно?  может у когото и работает.....можете выложить скрин? :-(..

у меня работает и как .C и как .Cpp

может среда не настроена ? тогда компилируй в command line
если не помогает , ставь вывод на печать  смотри , или дебагером в IDE смотри,
разбираться в твоем коде одно удовольсвие  smile  smile 


PM MAIL   Вверх
Инна90
Дата 6.1.2011, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 5.1.2011

Репутация: нет
Всего: нет



в CodeBlocks писала ....и главное тока  у меня не работает=/
уже и переустанавливала прогу..безрезультатно....а так спасибо..хоть обрадовали что работает=)
PM MAIL   Вверх
baldina
Дата 6.1.2011, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(Инна90 @  6.1.2011,  23:42 Найти цитируемый пост)
спасибо..хоть обрадовали что работает=)

одна из ступеней Дзен в программировании - умение заклинать отдельно взятую программу на отдельно взятом компьютере  smile

Добавлено через 5 минут и 53 секунды
Цитата

 int a [N1];

Цитата

Zap (a, N1);

Цитата

void Zap (int *x, int y)
{
    int i;
    for (i=0;i<=y;i++) x[i]=-50+rand()%100;
}

во всех похожих местах должно быть
Код

i<y

иначе выход за границу массива. т.к. в массиве
int A[N1];
индексация от 0 до N1-1
PM MAIL   Вверх
sergioK
Дата 7.1.2011, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(Инна90 @ 6.1.2011,  23:42)
в CodeBlocks писала ....и главное тока  у меня не работает=/
уже и переустанавливала прогу..безрезультатно....а так спасибо..хоть обрадовали что работает=)

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

PM MAIL   Вверх
миг
Дата 10.1.2011, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 15.9.2008

Репутация: нет
Всего: 1



Цитата(Инна90 @ 6.1.2011,  23:42)
в CodeBlocks писала ....и главное тока  у меня не работает=/
уже и переустанавливала прогу..безрезультатно....а так спасибо..хоть обрадовали что работает=)

может где то ссылаетесь на несуществующую ячейку массива?

а вы точно уверены что в функции void SortPoi (int d[][S], int k[])

вот эта строчка for(q=0;q<=K;q++){  не должна записываться вот так  for(q=0;q<K;q++) {

Это сообщение отредактировал(а) миг - 10.1.2011, 22:37
--------------------
Oaks may fall when reeds stand the storm.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0959 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.