Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/46: Рейтинг темы: голосов - 46, средняя оценка - 4.93
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767

Метод северо-западного угла

10.04.2011, 20:35. Показов 9881. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
надо реализовать данный метод.
http://www.reshmat.ru/example_transport_4.html
Вот ссылка на пример по которому делал код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
 
bool check(int *ar)
{
    int sum=0;
    for(int i=0;i<4;i++)
     sum+=ar[i];
    if (sum==0)
       return true;
    return false;
}
 
int main()
{
    //запасы
    int a[]={70,80,110};
    //потребители
    int b[]={50,70,60,80};
    int m=3,n=4;
    //издержки
    int mat[4][5]={{14,16,13,7},
                     {15,11,9,8},
                     {12,17,18,16}};
    //матрица результата
    int matres[4][5]={{0,0,0,0},
                       {0,0,0,0},
                       {0,0,0,0}};
    
    int i=0,j=0;
    bool res;                  
    do
    {
        res=false;//проверка на нулевые элементы массива
        if (a[i]>b[j])//запасов больше чем надо
        {
            matres[i][j]=b[j];//потребность удовлетворена
            a[i]-=b[j];//осталось на складе
            if (i!=n-1)//оставшиеся элементы в столце обнулим
             for(int k=i+1;k<m;k++)
              matres[k][j]=0;
          j++;//следующий заказчик
        }
        else if (a[i]<b[j])//потребителю не хватит
        {
            matres[i][j]=a[j];//отдадим сколько сможем
            b[j]-=a[i];//сколько еще надо
            if (j!=n-1)//все элементы строки далее обнулим
             for(int k=j+1;k<n;k++)
               matres[i][k]=0;
           i++;//следующий поставщик
        }
        else goto l;//иначе отправим на проверку обнуления
         l:res=check(b);//проверка на обнуление
    }while(!res);
    cout<<"Полученный путь"<<endl;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
         cout<<matres[i][j]<<" ";
         cout<<endl;
    }
    double sum=0;//цена пути
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        sum+=matres[i][j]*mat[i][j];
    }
    cout<<"REs---"<<sum;
}
программа зацикливается.вроде логически все верно.в чем дело?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2011, 20:35
Ответы с готовыми решениями:

Транспортная задача: метод северо-западного угла
Здесь уже была похожая тема, но там так и нет ответа. Программа делает только одну итерацию. //libraries #include &lt;stdafx.h&gt; ...

Транспортная задача методом северо западного угла
Имеются три пункта отправления А1, А2, А3 однородного груза и пять пунктов В1, В2, В3, В4, В5 его назначения. На пунктах А1, А2, А3 груз...

Метод северо-западного угла!
Можете помочь с методом северо западного угла! Задача состоит в том что я сделал алгоритм для метода минимального элемента, но хочу...

8
32 / 34 / 3
Регистрация: 27.12.2009
Сообщений: 106
10.04.2011, 20:47
C++
1
2
         else goto l;//иначе отправим на проверку обнуления
         l:res=check(b);//проверка на обнуление
не вижу смысла создавать метку, чтобы перейти на след. строку.
причины зацикливания не нашел. советую выполнить программу в пошаговом режиме
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
10.04.2011, 20:52  [ТС]
Цитата Сообщение от ailia Посмотреть сообщение
C++
1
2
         else goto l;//иначе отправим на проверку обнуления
         l:res=check(b);//проверка на обнуление
не вижу смысла создавать метку, чтобы перейти на след. строку.
надо было чтобы иначе выполнялась проверка, но и после if чтобы выполнялась проверка
0
32 / 34 / 3
Регистрация: 27.12.2009
Сообщений: 106
10.04.2011, 20:55
Цитата Сообщение от Artishok Посмотреть сообщение
надо было чтобы иначе выполнялась проверка, но и после if чтобы выполнялась проверка
у вас goto стоит только в одном месте поэтому после if'а ничего не проверяется
ой, извиняюсь, все верно
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
12.04.2011, 17:17  [ТС]
все исправил.все работает
1
2 / 2 / 0
Регистрация: 10.04.2014
Сообщений: 19
10.04.2014, 18:39
а в чем ошибка ? а то у меня такое же задание и я не могу найти ошибку
1
1 / 1 / 1
Регистрация: 08.04.2012
Сообщений: 53
05.04.2015, 11:04
Подскажите, пожалуйста, а есть исходник такой, чтобы не зацикливался? Просто мне для курсовой по методу потенциалов нужен опорный план.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
05.04.2015, 12:49
Запись
C++
1
int matres[4][5]
означает "массив из четырёх элементов, каждый из которых, в свою очередь, является массивом из пяти элементов типа int. То есть, по-любому должно быть так:
C++
1
2
3
4
5
    int matres[4][5]={  {0,0,0,0,0},
                        {0,0,0,0,0},
                        {0,0,0,0,0},
                        {0,0,0,0,0}
                     };
Добавлено через 2 минуты
Строки 52-53 с goto и меткой совершенно избыточны - там достаточно простого else.

Добавлено через 3 минуты
В функции check() лучше сделать передачу указателя на начало массива и целочисленной переменной (либо целочисленной константы) - в качестве размера массива. Да и ветвление с ифом там тоже избыточно. Достаточно сделать так:
C++
1
2
3
4
5
6
7
8
bool check(int * ar, int arSize)
{
    int sum = 0;
    for(int i = 0; i < arSize; ++i)
     sum += ar[i];
    
    return sum==0;    // если sum равна 0, то вернётся true, в противном случае вернётся false
}
Добавлено через 5 минут
Название функции check - неудачно. Гораздо лучше было назвать её array_is_empty() или как-нибудь ещё в таком же духе.

Добавлено через 5 минут
Названия массивов одиночными буквами и рядом с ними туча комментариев - не самый лучший приём. Гораздо лучше было бы назвать сами массивы говорящими именами. То есть, вместо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    //запасы
    int a[]={70,80,110};
    //потребители
    int b[]={50,70,60,80};
    int m=3,n=4;
    //издержки
    int mat[4][5]={{14,16,13,7},
                     {15,11,9,8},
                     {12,17,18,16}};
    //матрица результата
    int matres[4][5]={{0,0,0,0},
                       {0,0,0,0},
                       {0,0,0,0}};
лучше:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    int resources[] = {70,80,110};
 
    int consumers[] = {50,70,60,80};
    
    int m = 3, n = 4; // что есть m и n ???
 
    int outgoings[4][5]={{14,16,13,7},
                     {15,11,9,8},
                     {12,17,18,16}};
 
    int result[4][5]={{0,0,0,0},
                       {0,0,0,0},
                       {0,0,0,0}};
Добавлено через 4 минуты
Манера лепить всё в кучу - ужасна. Код становиться менее читаемым. Вам что, пробелов жалко?
0
0 / 0 / 0
Регистрация: 09.05.2017
Сообщений: 2
09.05.2017, 14:26
дело в том, что не обнуляется массив потребителей, и результат в 53 строке всегда будет false.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.05.2017, 14:26
Помогаю со студенческими работами здесь

Метод северо-западного угла
Здравствуйте! Помогите пожалуйста в написании кода программы по расчету транспортной задачи методом северо западного угла, уже неделю...

Метод северо-западного угла, транспортная ЗЛП
попыталась выполнить решение, но вечно возникает ошибка. подскажите в чем она. в программе StringGrid9 это измененный массив, массив...

Транспортная задача.Метод северо-западного угла
Всем привет!! люди если не сложно помогите пожалуйста написать программу для курсовой, ничего не могу найти в интернете!тема курсовой:...

Транспортная задача. Метод северо-западного угла и метод минимального элемента.
Метод северо-западного угла и метод минимального элемента. Задание: Найти опорный план следующих транспортных задач по методу...

Транспортная задача: метод северо-западного угла + метод оптимизации (потенциалов)
есть у кого-нибудь исходники на программу решения злп метод с-з угла + метод оптимизации(потенциалов)?помогите пожалуйста


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru