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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реализация программы с использованием указателей 
V
    Опции темы
Rofar
  Дата 30.10.2009, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

вот код исходной программы, каторая проверяет является ли матрица магическим квадратом, т.е. такой, в которой суммы элементов во всех строках, столбцах и диагоналях одинаковы и введёные в матрицу числа неповторяются...
Код
#include<stdio.h>
#include<conio.h>
main()
{
    int i,j,a[10][10],b[10],razm,k,m,sum1=0,sum2=0,sum3=0,sum4=0;

    printf ("Vvedite razmernost' matritci: ");
    scanf ("%d",&razm);
    m=razm*(razm*razm+1)/2;  //magicheskaya constanta

  //vvod matritci
    printf ("\nVvedite elementy matritci:\n\n");
    for (i=0; i<razm; i++)
       for (j=0; j<razm; j++) {
          printf ("a[%d][%d]=",i+1,j+1);
          scanf ("%d",&a[i][j]);
       }

   //vivod matritci
    printf ("\nIshodnaya matritsa");
    for (i=0; i<razm; i++) {
       puts("");
       for (j=0; j<razm; j++) {
          printf ("%d\t",a[i][j]);
       }
    }
    printf ("\n\nMagicheskaya constanta - %d\n\n",m);

    k=0;
    for (i=0; i<razm; i++) {
       for (j=0; j<razm; j++) {
          sum1 = sum1 + a[i][j];    //symma chisel strok
          sum2 = sum2 + a[j][i];    //symma chisel stolbcov
          b[k] = sum1;
          b[k+1] = sum2;
       }
       sum1=0; sum2=0; k=k+2;
    }

    for (i=0; i<razm; i++)
       for (j=0; j<razm; j++){
       if (i==j)
           sum3 = sum3 + a[i][j];                    //symma chisel levoi diagonali
       if ( (razm-1-i) == j)
           sum4 = sum4 + a[i][j];
    }  //symma chisel pravoi diagonali

    b[k]=sum3;
    k++;
    b[k]=sum4;
    for(i=0; i<k+1; i++)
       if (b[i] != m) {
          printf("\nDannaya matritca ne yavlyaetca magicheskim kvadratom");
          break;
       } else {
          printf("\nDannaya matritca yavlyaetca magicheskim kvadratom");
          break;
       }
    getch();
}


Это сообщение отредактировал(а) bsa - 30.10.2009, 16:04
PM MAIL   Вверх
andrew_121
Дата 30.10.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Rofar, Код ужасен. Разбираться в нем нет желания.
Напиши ка ты лучше задание.

Это сообщение отредактировал(а) andrew_121 - 30.10.2009, 13:48


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Rofar
Дата 30.10.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да я знаю( я ещё тока учусь... статью bsa о оформление кода ещё не читал(
Задание такое --> Дана целая квадратная матрица n-го порядка. Определить, является ли она магическим квадратом, т.е. такой, в которой суммы элементов во всех строках, столбцах и диагоналях одинаковы и введёные в матрицу числа неповторяются.
PM MAIL   Вверх
mes
Дата 30.10.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Rofar @  30.10.2009,  12:53 Найти цитируемый пост)
в которой суммы элементов во всех строках, столбцах и диагоналях одинаковы и введёные в матрицу числа неповторяются. 

во всех столбцах и во всех строках, или в каждом столбце и в каждой строке ?
диагoнали только главные ?






--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 30.10.2009, 14:27 (ссылка)   | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Rofar, Начни с этого:
Код

#include <vector>
#include <algorithm>
#include <functional>

int main(int argc, const char** argv) {
    int n = 4;
    std::vector<std::vector<int> > matrix(n);
    
    std::for_each(matrix.begin(), matrix.end(),
                        std::bind2nd(std::mem_fun_ref(&std::vector<int>::resize), matrix.size())
    );

    /** функтор для строк */
    /** функтор для столбцов*/
    /** функтор для диагоналей*/
    
    return 0;
}




--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Rofar
Дата 30.10.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(mes @ 30.10.2009,  14:20)
Цитата(Rofar @  30.10.2009,  12:53 Найти цитируемый пост)
в которой суммы элементов во всех строках, столбцах и диагоналях одинаковы и введёные в матрицу числа неповторяются. 

во всех столбцах и во всех строках, или в каждом столбце и в каждой строке ?
диагoнали только главные ?

угу... ты прав, диагонали только главные и сумма эллементов в каждом столбце и в каждой строке...
PM MAIL   Вверх
mes
Дата 30.10.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(andrew_121 @  30.10.2009,  13:27 Найти цитируемый пост)
Rofar, Начни с этого:

Ага хороший совет для новичка, который во-первых предупредил :

Цитата(Rofar @  30.10.2009,  11:47 Найти цитируемый пост)
а то у меня программа с двумерным массивом, а разбирали мы только одномерные массивы(((

a во вторых нет никакой надобности в динамическом массиве.. вполне достаточно (имхо требовательно) использовать статический.

а в третьих где у тс вообще C++ увидели ?! 


Это сообщение отредактировал(а) mes - 30.10.2009, 14:59


--------------------
PM MAIL WWW   Вверх
Rofar
Дата 30.10.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(andrew_121 @ 30.10.2009,  14:27)
Rofar, Начни с этого:
Код

#include <vector>
#include <algorithm>
#include <functional>

int main(int argc, const char** argv) {
    int n = 4;
    std::vector<std::vector<int> > matrix(n);
    
    std::for_each(matrix.begin(), matrix.end(),
                        std::bind2nd(std::mem_fun_ref(&std::vector<int>::resize), matrix.size())
    );

    /** функтор для строк */
    /** функтор для столбцов*/
    /** функтор для диагоналей*/
    
    return 0;
}


Извини andrew_121 но я ничего не понял smile ((( у меня это только 9 лаба, я практически вообще зелёный( так что нужно чтот попроще...
типа этого только для двумерного массива
Код

int *mas,n;
printf ("Vvedite razmernost' massiva: ");
scanf ("%d",&n);
mas=(int*);
malloc(n*sizeof(int))
   for(int i=0;i<n;i++)
   {
    *mas=random(n+i);
     mas++:
   }

нужно как я понимаю в моём искодном коде всеголишь поменять обычный массив на динамический и обращение к эллементам масиива сделать не через a[i][j] а через *mas...
PM MAIL   Вверх
zim22
Дата 30.10.2009, 14:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



вот это:
Цитата(andrew_121 @  30.10.2009,  13:27 Найти цитируемый пост)

Код

std::for_each(matrix.begin(), matrix.end(),                        
  std::bind2nd(std::mem_fun_ref(&std::vector<int>::resize), matrix.size())


эквивалентно этому:
Код

std::vector<std::vector<int> > matrix(n, std::vector<int>(n));

имхо, так проще



--------------------
PM MAIL   Вверх
Rofar
Дата 30.10.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(zim22 @ 30.10.2009,  14:50)
имхо, так проще

Я С++ ещё не начал изучать, да и  на С нетак уж давно работаю((  так что для меня это ничего не упрощает smile  smile 
PM MAIL   Вверх
mes
Дата 30.10.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Rofar @  30.10.2009,  13:42 Найти цитируемый пост)
нужно как я понимаю в моём искодном коде всеголишь поменять обычный массив на динамический и обращение к эллементам масиива сделать не через a[i][j] а через *mas... 

зачем усложнять себе жизнь когда :
Цитата(Rofar @  30.10.2009,  13:42 Найти цитируемый пост)
у меня это только 9 лаба, я практически вообще зелёный( так что нужно чтот попроще...


В чем проблема то ? 


--------------------
PM MAIL WWW   Вверх
Rofar
Дата 30.10.2009, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я эту прогу (каторую привёл в посте №1) делал на 4 лабе (Тема: Разработка и отладка программ с использованием массивов.), а в условии 9 лабы (Тема: Разработка и отладка алгоритмов и программ с использованием указателей) указано --> Задания с лабораторной работы №4 с использованием адресной арифметики и динамического распределения памяти. Так что хочешь не хочешь, а задание нужно делать(
PM MAIL   Вверх
mes
Дата 30.10.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Rofar @  30.10.2009,  14:08 Найти цитируемый пост)
Я эту прогу (каторую привёл в посте №1) делал на 4 лабе (Тема: Разработка и отладка программ с использованием массивов.), а в условии 9 лабы (Тема: Разработка и отладка алгоритмов и программ с использованием указателей) указано --> Задания с лабораторной работы №4 с использованием адресной арифметики и динамического распределения памяти. Так что хочешь не хочешь, а задание нужно делать( 

Ну надо было с самого начала так объяснить... Тогда 
Цитата(Rofar @  30.10.2009,  13:42 Найти цитируемый пост)
нужно как я понимаю в моём искодном коде всеголишь поменять обычный массив на динамический и обращение к эллементам масиива сделать не через a[i][j] а через *mas... 




--------------------
PM MAIL WWW   Вверх
xvr
Дата 30.10.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Rofar @ 30.10.2009,  15:08)
Я эту прогу (каторую привёл в посте №1) делал на 4 лабе (Тема: Разработка и отладка программ с использованием массивов.), а в условии 9 лабы (Тема: Разработка и отладка алгоритмов и программ с использованием указателей) указано --> Задания с лабораторной работы №4 с использованием адресной арифметики и динамического распределения памяти. 

О! С этого и надо было начинать.
Видимо надо массив a[10][10] из 4й лабы заменить на динамический 2х мерный. Как то так
Код

main()
{int i,j,**a,b[10],razm,k,m,sum1=0,sum2=0,sum3=0,sum4=0;
    printf ("Vvedite razmernost' matritci: ");
    scanf ("%d",&razm);

   a=malloc(sizeof(int*)*razm);
   for(i=0;i<razm;++i)
    a[i]=malloc(sizeof(int)*razm);

а дальше все как было раньше

PM MAIL   Вверх
Rofar
Дата 30.10.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(xvr @ 30.10.2009,  15:37)
Видимо надо массив a[10][10] из 4й лабы заменить на динамический 2х мерный. Как то так
Код

main()
{int i,j,**a,b[10],razm,k,m,sum1=0,sum2=0,sum3=0,sum4=0;
    printf ("Vvedite razmernost' matritci: ");
    scanf ("%d",&razm);

   a=malloc(sizeof(int*)*razm);
   for(i=0;i<razm;++i)
    a[i]=malloc(sizeof(int)*razm);

а дальше все как было раньше

хз хз( чёт не компилится( ругается практически на всё(
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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