Массив

Тема в разделе "C/C++/C#", создана пользователем RayPeace, 12 апр 2012.

Статус темы:
Закрыта.
  1. RayPeace

    RayPeace Гость

    Прошу помощи в решении данной задачи:
    Из массива а(50,50) в массив d(2500) переписать все элементы массива а, модуль которых меньше 1. Результат вывести на экран.
    заранее благодарю за помощь.

    исправьте пожалуйста что не так...


    Код (C++):
     #include<stdio.h>
    #include <math.h>
    #include <conio.h>
    void main()
    {
    float a[50][50], d[2500];
    int i, j, k;
    for (i=0; i<50; i++)
    for (j=0; j<50; j++)
    if (abs(a[i][j])<1)
    {
    d[j+50*i]=a[i][j];
    }
    d[j+50*i]=d[k];
    printf( "%g", d[k]);

    getch();
    }
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    ты же нигде не заполняешь массив указателей a!

    вот мой вариант
    Код (C++):
    //
    #include <iostream>
    using namespace std;
    void main()
    {
    float a[50][50], d[2500];
    for (int k=0,i=0; i<50; i++)
    for (int j=0; j<50; j++)
    {
    float num=rand()%100;//вот получение случайной
    num/=100;                //дробной части числа
    a[i][j]=num+rand()%3;//сами случайные числа-элементы массива a,исправь если надо другие значения
    if(abs(a[i][j])<1)
    {
    d[k]=a[i][j];
    cout<<d[k]<<" ";
    k++;
    }
    }
    }
    //
     
  3. RayPeace

    RayPeace Гость

    Whatka
    спасибо вам большое, жаль не могу поставить плюса в репутацию.
    можно еще вопрос, не могли бы посмотреть блок схему алгоритм к этой программе, подправить что не так...
    [​IMG]
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    стрелки ставятся только снизу вверх и справа налево.
    С циклами явно что-то не так нарисовал, у блока цикла должно быть 2 выхода - когда условие цикла истинно, и когда ложно(у вас только 1 выход).
    Не понятно что выполняет блок num/100. Возможно угадаю, вы хотели написать "num := num / 100", а может я и неправ. В других блоках такая же лабуда.

    Да и вцелом, мне что-то не нравится.

    Для построение блок-схемы есть специальные программы, рисовать в paint не обязательно )
     
  5. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    честно говоря блок схемы не так пишутся
    во первых k=0 перед циклом
    во вторых в блок схеме не надо писать заполнение матрицы случайными числами
    и мне кажется в блок схемах
    у if - надо 2 ветвления
    а операторы цикла не пишутся
     
  6. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    поясни?
     
  7. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    например
    a=0;
    for(i=0;i<n;i++)
    a++
    как я знаю заменяются
    на :huh: чтобы схему тут не рисовать
    Код (C++):
    //
    i=0;
    a=0;
    metka:
    if(i<n)
    {
    i++;
    a++;
    goto metka;
    }
    else
    {....}
    //
    ну я думаю ты понял
     
  8. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Я понял )
    Глянь в ГОСТах блок "подготовка", его используют для отображения циклов (и именное его пытался использовать ТС).
    В другом ГОСТе(вроде бы более новом) найдешь блоки "начало цикла" и "конец цикла"
     
  9. RayPeace

    RayPeace Гость

    подправил блок схему, посмотрите пожалуйста, что еще не правильно.
    [​IMG]
     
  10. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Я уже писал:
    Блок "терминатор" выглядит как прямоугольник со скругленными краями, а не как овал.
    Что делает блок К+1 не понятно. У операции "+" нет побочного эффекта...подозреваю, что надо написать К:=К+1
     
  11. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    прикрепил. Я бы не смог прикопаться.
     

    Вложения:

  12. RayPeace

    RayPeace Гость

    r04
    спасибо большое вам:)
     
  13. RayPeace

    RayPeace Гость

    Снова здравствуйте!
    мне необходимо переделать эту же программу но с использованием 3 функций, а конкретнее это функции:
    1) ввод массива а
    2) формирование массива d
    3) вывод d
    я переделал с использованием функции ввода массива а и вывода d, не знаю как написать функцию формирования массива d, помогите пожалуйста.
    мой код этой программы с использованием 2 функций

    Код (C++):
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #include <stdlib.h
    void input(float a[][50], int n, int m)//функция ввода массива а
    { int i, j;
    for ( i=0; i<n; i++)
    for (int j=0; j<m; j++ )
    {
    float num=rand()%100;
    num/=100;
    a[i][j]=num+rand()%1;
    }
    }


    void out( float b[2500], int n )//функция вывода массива d
    { int i, j;
    for (i=0; i<n; i++)
    printf (" b(%d)=%g\n ",i , b[i]);
    }


    void main(void)
    { int n, m, i, j;
    float a[50][50], b[2500];
    input(a, n, m);
    for( i=0; i<n; i++)
    for( j=0; j<m; j++)
    if(abs(a[i][j])<1)
    {
    b[i]=a[i][j];
    out(b, n);
    }
    getch();

    }
     
  14. RayPeace

    RayPeace Гость

    подскажите пожалуйста как сделать функцию формирования массива b, и как из функции массив передавать?
     
  15. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    массив не надо передавать из функции
     
  16. RayPeace

    RayPeace Гость

    Код (C++):
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <iostream>
    void input(float a[50][50], int n, int m)//функция ввода массива а
    { int i, j;
    for ( i=0; i<n; i++)
    for (int j=0; j<m; j++ )
    {printf ("vvedite znachenie a(%d,%d)= ",i , j);
    scanf("%g", &a[i][j]);
    } }


    void out( float b[2500], int n )//функция вывода массива d
    { int i;
    for (i=0; i<n; i++)
    printf (" b(%d)=%g\n ",i , b[i]);
    }


    int mod(int a[][50], b[2500])//функция формирования массива d
    { int n, m, i, j, k=0;
    for( i=0; i<n; i++)
    for( j=0; j<m; j++)
    if(abs(a[i][j])<1)
    {
    b[k]=a[i][j];
    k++;
    }    return k;
    }

    void main(void)
    { int n, m, i, j, k;
    float a[50][50], b[2500];

    printf("vvedite kolo stolb m=");
    scanf("%d", &m);
    printf("vvedite kolo strok n=");
    scanf("%d", &n);
    input(a, n, m);
    k=mod(a, b);
    out(b,k);
    getch();
    }
    }
    посмотрите пожалуйста, не могу понять что не так, не запускается прога, выдает ошибку:
    E2303 Type name expected
    E2190 unexpected }
    и не могли бы проверить правильно ли сделал функции. Заранее большое спасибо.
     
  17. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Код (C++):
    //
    #include <conio.h>
    #include <iostream>
    using namespace std;
    void input(float a[50][50], int n, int m)//функция ввода массива а
    { int i, j;
    for ( i=0; i<n; i++)
    for (int j=0; j<m; j++ )
    {printf ("vvedite znachenie a(%d,%d)= ",i , j);
    scanf("%g", &a[i][j]);
    } }


    void out( float b[2500], int n )//функция вывода массива d
    { int i;
    for (i=0; i<n; i++)
    printf (" b(%d)=%g\n ",i , b[i]);
    }


    int mod(float a[][50], float b[2500],int n,int m)//функция формирования массива d
    { int i, j, k=0;
    for( i=0; i<n; i++)
    for( j=0; j<m; j++)
    if(abs(a[i][j])<1)
    {
    b[k]=a[i][j];
    k++;
    }    return k;
    }

    void main(void)
    { int n, m, i, j, k;
    float a[50][50], b[2500];

    printf("vvedite kolo stolb m=");
    scanf("%d", &m);
    printf("vvedite kolo strok n=");
    scanf("%d", &n);
    input(a, n, m);
    k=mod(a, b,n,m);
    out(b,k);
    getch();
    }
    //
     
  18. RayPeace

    RayPeace Гость

    Whatka спасибо большое, какой раз уже меня выручаете:huh:
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей