Вход

Решение задач на C\C++

Научись общаться с машиной и научи других. Все вопросы связанные с программированием и разработкой программ.

Модератор: AxeL

Сообщение Очередной Гость 12 января 2010 в 01:08

выводит 32767 0 32767 32767 1 1
0

Сообщение Гость 12 января 2010 в 01:12

За ранее изините что достаю((((
6 8 1 // Здесь первая цифра количество вершин , а что обозначает 8 и 1
1 4 // Если я правильно понял то это пары вершин соединенных?
1 5
2 3
2 5
3 4
3 5
3 6
5 6

выводит 32767 0 32767 32767 1 1 // как понять этот результат, он првильный? :roll:
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
12 января 2010 в 01:12

на выходе по идее должно быть что то типа
[code:1]1 4 5 3 6 2[/code:1]
где цифры в парах (4.5) и (3,6) могут быть поменяны местами.
0

Сообщение Гость 12 января 2010 в 01:19

Все разобрался, 6- кол во вершин, 8- кол-дуг, 1- соединены все эти вершины)))
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
12 января 2010 в 01:22

6 8 1 // Здесь первая цифра количество вершин , а что обозначает 8 и 1
1 4 // Если я правильно понял то это пары вершин соединенных?
1 5
2 3
2 5
3 4
3 5
3 6
5 6

6 8 1 это 6 вершин 8 дуг и обход стартует из 1й вершины.
а далее пары вершин да.
выводит 32767 0 32767 32767 1 1 // как понять этот результат, он првильный

ну в какой то мере видимо правильный, но не для задачи обхода графа в ширину (:

добавлено спустя 1 минуту:

там в реализации программы все что связано с массивом label вобще не нужно.
0

Сообщение Очередной Гость 12 января 2010 в 01:27

Спасибо хоть подразобрался)
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
12 января 2010 в 01:32

[code:1]#include <iostream.h>
#include <conio.h>
#include <fstream.h>
int i,j,k,p,cup;
int Start,N,M;
main(){

int *FIFO;
int **Graf;
int *visited;

ifstream input("input.txt");
input>>N>>M>>Start;

FIFO=new int [N];
Graf=new int *[N];
visited = new int*[N];

for (i=0;i<N;i++){
Graf[i]=new int[N];
visited[i]=0;
}

for (k=0;k<M;k++){
input>>i>>j;
Graf[i][j]=1;
FIFO[k]=0;
}

p=0;
k=1;
FIFO[p]=Start;
visited[Start]=1;


while (p!=k){
cup=FIFO[p];
visited[cup]=1;
cout << cup << " ";
p++;
for (i=0;i<N;i++)
if ((Graf[cup][i]==1)&&(!visited[i])){
FIFO[k]=i;
k++;
}
}

getch();
return 0;
}
[/code:1]
оппробуй мб заработает.

добавлено спустя 45 секунд:

ой не. не так.
исправил.
0

Сообщение Очередной Гость 12 января 2010 в 01:50

С теми же данными входными попробовал
Ошибку пишет [C++ Error] Unit1.cpp(17): E2034 Cannot convert 'int * *' to 'int *'

Вот строчка: visited = new int*[N];
0

Сообщение Гость 12 января 2010 в 02:00

visited = new int*[N]; // убрал звездочку но в результате только три вершины 1 4 5
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
12 января 2010 в 02:57

[code:1]#include <iostream.h>
#include <conio.h>
#include <fstream.h>
#include <stdio.h>
int i,j,k,p,cup;
int Start,N,M;
main(){

int *FIFO;
int **Graf;
int *visited;

freopen("input.txt","r",stdin);
cin>>N>>M>>Start;
Start--;

FIFO=new int [N];
Graf=new int *[N];
visited = new int[N];

for (i=0;i<N;i++){
Graf[i]=new int[N];
for(j=0;j<N;j++) Graf[i][j]=0;
visited[i]=0;
FIFO[i]=0;
}

for (k=0;k<M;k++){
cin>>i>>j;
Graf[i-1][j-1]=1;
Graf[j-1][i-1]=1;
}

p=0;
k=1;
FIFO[p]=Start;
visited[Start]=1;


while (p!=k){
cup=FIFO[p];
cout << cup +1 << " ";
p++;
for (i=0;i<N;i++)
if ((Graf[cup][i])&&(!visited[i])){
FIFO[k]=i;
visited[i]=1;
k++;
}
}

return 0;
}[/code:1]
выводит 1 4 5 3 2 6 что вроде тоже правильно.
0

Сообщение MikU 13 января 2010 в 15:56

Привет всем :)
Никто не занимался созданием простого 3d редактора в Builder С++ ???? :roll:
0

Сообщение Очередной Гость 13 января 2010 в 15:58

teran,

Спасибо, все работает))))))))))))
0

Сообщение Гость 15 января 2010 в 13:37

что такое previous и current в этой функции?
[code:1]
// функция очистки памяти
void freemem (bookSTR current)
{
bookSTR previous;
while (current!=NULL)
{
previous=current;
current=current->next;
free (previous);
}
}[/code:1][/quote]
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
15 января 2010 в 13:56

обычно смысл переменных вытекает из их названий. так что воспользуйтесь словарем previous и current (2.2)
0

Сообщение виталь 15 января 2010 в 15:17

подскажите, что значат строки
bookSTR start=NULL;
start= viewFile ();
bookSTR current=start;
и
current=current->next;

[code:1]

void runFile ()
{
bookSTR start=NULL;
start= viewFile ();
bookSTR current=start;

int i=0,a;
char *str[20];
char *temp;

printf(Rus("\nВведите год издания: "));
scanf("%d",&a);

///// конец сортировки
while(current!=NULL)
{ // выводим его на экран
//strcpy(current->Avtor,str[i]);
str[i]=current->Avtor;
i++;
current=current->next;
}
int n=i;
// используем сортировку пузырьком сортировка по автору
for (int t=0;t<n-1;t++)
{
for (int j=0; j<n-t-1; j++)
{
if (strcmp(str[j],str[j+1])>0)
{
temp=str[j];
str[j]=str[j+1];
str[j+1]=temp;
}
}
}
puts(Rus("\n|N \t автор\t\t название \t\tгод \tизд-во \tкол-во страниц|"));

for (t=0;t<n;t++)
{
current=start;
while(current!=NULL)
{ // выводим его на экран
if ((a<current->year)&& (strcmp(str[t],current->Avtor)==0))
{
printf("\n%4d%10s%30s%10d%10s%10d%",current->regNomer, current->Avtor, current->Name,current->year, current->Izd, current->kolstr);
}
current=current->next;
}
}

freemem (start);
}[/code:1]
0

Сообщение виталь 15 января 2010 в 15:45

чем здесь заменить операции из си++ (current=current->next)на оперции Си
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
15 января 2010 в 16:55

[code:1]bookSTR start=NULL;[/code:1]
объявление переменной с именем start типа bookSTR и инициализация ее значением NULL;
[code:1]start= viewFile ();[/code:1]
вызов функции viewFile которая очеивидно возвращает структуру типа bookSTR, результат присваивается в переменную start
[code:1]bookSTR current=start;
[/code:1]
объявление структуры current типа bookSTR и инициализация значением переменной start.

[code:1]current=current->next; [/code:1]
очевидно стуктура типа bookSTR являет собой некоторый линеный список. и имеет поле next которое указывает на следующий элемент списка. таким образом данная запись реализует переход от текущего к следующему элементу списка.

[code:1]current=current->next[/code:1]
доступ к полям структур вроде как через точку осуществляется в Си.
0

Сообщение виталь 15 января 2010 в 19:25

а что значит вот эта функция.
bool isEmpty(bookSTR current, bookSTR newPtr)
{
while (current!=NULL)
{
if (current->regNomer==newPtr->regNomer&&(!strcmp(current->Avtor,newPtr->Avtor)))
return false;
current=current->next;
}
return true;
}
я так понимаю, что это логическая функция, которая возвращает 1 если истина, и ноль если ложь.
а для чего она используется?
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
15 января 2010 в 20:16

ну если быть точным, то возвращает она не 1 или 0 а булевое значение т.е собствтвенно true/false;

используется она для проверки есть ли новая книжка newPtr в списке начинащегося с current записи. если есть то возвращает false если нет то true;

т.е видимо допустим мы хотим добавить в список новую книжку(?) и должны проверить чтобы не было дублика та. то есть просмотреть весь список на предмет наличия книжки с таким номером и автором. если книжка есть тогда возвращаем false - нельзя добавлять. иначе true = можно.

только вот какое то название у функции не корректное. по идее называться тогда она бы должна bookExists() ну или т.п
хотя мб конечно я не прав в своем предположении отноистельно того что делает эта функция.
кстати если прав, то перед вызовом функции должно быть присваиваение current = start
0

Сообщение Гость 17 января 2010 в 02:38


доступ к полям структур вроде как через точку осуществляется в Си.

через точку если идет обращение напрямую к структуре, и через стрелочку если по указателю
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
17 января 2010 в 13:41

Гость писал(а):

доступ к полям структур вроде как через точку осуществляется в Си.

через точку если идет обращение напрямую к структуре, и через стрелочку если по указателю

точно точно.
т.е что типа
[code:1]struct testStruct{
int value;
}

testStruct a, *b;
....
a.value = 1;
b->value = 2;
[/code:1]
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
15 февраля 2010 в 16:56

Помогите:

Создать программу, которая содержит массив структур. Этот массив может содержать не более 10 элементов. Каждый элемент массива содержит строку, в которой может содержаться до 10 символов, целое число и массив вещественных чисел, который содержит не более 10 элементов.
Элементы массива структур вводятся с клавиатуры. Указанное выше целое число должно равняться реальному, введенному количеству элементов вещественного массива.
После того, как ввод элементов массива структур закончен, программа должна для каждого элемента массива структур найти и поместить в текстовый файл сумму элементов его вещественного массива.


Расскажите, как вообще этот массив структур сделать? Как в программе описать, что должна вводится строка, число и массив.
0
Ветеран

СообщениеВетеран ***DEMON*** ***DEMON*** 0
Оставил 4045 сообщений с 21 сен 2007
ФР: 294
WWW
15 февраля 2010 в 18:13

DisKom, я могу тебе лекцию по программированию скинуть в формате PowerPoint, разберешся сам?
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
15 февраля 2010 в 18:28

***DEMON***, скинь сюда, попробую разобраться
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
15 февраля 2010 в 18:31

какое то такое
[code:1]#include <iostream.h>

struct Node {
char str[10];
int value ;
float fArray[10];
};

Node data[10];
FILE *out=NULL;

int main()
{
for(int i=0;i<10;i++){
cout << "input line: " ;
cin >> data[i].str;

cout << "float elements count: ";
cin >> data[i].value;

for(int j=0;j<data[i].value;j++){
cout << "input number: ";
cin >> data[i].fArray[j];
}
}

out = fopen("output.txt","w");
for(int i=0; i<10;i++){
float sum =0 ;
for (int j=0; j < data[i].value; j++) {
sum+=data[i].fArray[j];
}
fprintf(out,"%f\n",sum);
}
fclose(out);

return 0;
}[/code:1]
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
4 марта 2010 в 19:27

teran, немного переделал программу под нужды препода. Теперь небольшая проблема возникла.

[code:1]
for (i=0; i < 10; i++)
{
gets(data[i].str); // вводим строку с пробелами
scanf("%d", &data[i].value);

for (j=0, sum=0; j < data[i].value; j++)
{
scanf("%lg", &data[i].fArray[j]);
sum+=data[i].fArray[j];
}
fprintf(out,"%lg\n", sum);
}[/code:1]
Когда первый раз ввожу строку, а потом количество элементов в массиве и сам массив - всё супер. При всех последующих вводах, не могу сделать тоже самое. Точнее: могу ввести строчку, но тут же программа просит ввести новую. Пробовал не вводить строку, а сразу ввести количество элементов массива и сам массив - работает.

В чем может быть ошибка?

добавлено спустя 55 минут:

Всё, разобрался, символ перевода строки при вводе массива, решение простое - добавление getchar();
0

Сообщение Iwblm 8 марта 2010 в 16:15

Уважаемые, несколько страниц назад просили стрелочные часы с тремя стрелками. Либо я пропустил программу, либо подскажие, пожалуйста, код.
0

Сообщение Iwblm 8 марта 2010 в 16:57

Да, добавлю, желательно под Visual Studio и с комментариями=)
0
Гуру

СообщениеГуру Portvein Portvein 0
Оставил 931 сообщений с 13 дек 2006
ФР: 26787
10 марта 2010 в 12:07

Подскажите кто-нибудь, как прочитать такую бороду из файла в массив double:
[code:1] 0.048390034423210
0.019995073275641
-0.022468816931359
0.790910191424377
0.805784191386960
0.041000470239669
-0.019553708075546
0.773225910924561
0.823339202869870
[/code:1]

почему-то такой код только для float работает:
[code:1]fscanf(input,"%LF", &x);
[/code:1]
0

Сообщение Гость 10 марта 2010 в 12:26

"%ld"
0
Гуру

СообщениеГуру Portvein Portvein 0
Оставил 931 сообщений с 13 дек 2006
ФР: 26787
10 марта 2010 в 12:34

%ld это long int, а мне бы double :D
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
10 марта 2010 в 12:35

там разницы то случаем нет между %LF и lf ?

большое F вобще че то в документации отсутствует, маленькое l для даблов, а большое L для лонгдаблов.
0

Сообщение Гость 10 марта 2010 в 12:56

[code:1]while(!feof(file))
{
double z;
fscanf(file,"%lf",&z);
printf("%.15f\r\n",z);
}[/code:1]
0
Гуру

СообщениеГуру Portvein Portvein 0
Оставил 931 сообщений с 13 дек 2006
ФР: 26787
10 марта 2010 в 12:57

Всем спасибо!
Как всегда, человеческий фактор :oops: ребилдить надо после правки кода :-D :-D :-D
правильный вариант:
[code:1]fscanf(input,"%lf", &x); [/code:1] зыж странно у Кернигана и Ричи везде большие буквы :D
0

Сообщение Очередной гость 19 марта 2010 в 22:27

И снова здравствуйте!))))
Кто может поделиться полезными ссылочками или исходниками для С++ Builder 6.0 для следующих заданий:
1. Алгоритм Фода-Фаркенсона (Нахождение всех путей автомате)
2. Алгоритм нахождения наибольшего паросочетания в двудольном графе
За ранее спасибо)))))))
0

Сообщение Гость-гость- 2 апреля 2010 в 20:43

Помогите пожалуйста перевести этот код с языка С на С++

// Матрица c - пропускные способности ребер
// f - собственно сюда будет считаться поток
// cf - вспомогательная матрица, в которой походу будет посчитана
// разность c - f
// cut - массив для запоминания посещенных вершин
// (в конце концов после работы алгоритма из него будет
// получен минимальный разрез)
// p - массив предков. (p[u] - вершина, из которой мы попали в
// вершину u)


int c[maxn][maxn], f[maxn][maxn], cf[maxn][maxn];
int cut[maxn], p[maxn];
int n;

int bfs(int s, int t)
{
memset(cut, 0, sizeof(cut));
queue <int> q;

q.push(s);

while (!q.empty())
{
int u = q.front(); q.pop();
for (int i = 0; i <= n; i++)
if (cf[u][i] > 0 && !cut[i])
{
q.push(i);
cut[i] = 1;
p[i] = u;
}
}

return cut[t];
}

int maxflow(int s, int t)
{
memset(f, 0, sizeof(f));
for (int i = 0; i <= n; i++)
for (int j = 0; j <= n; j++)
cf[i][j] = c[i][j];

while (bfs(s, t))
{
int u = t, cmin = inf;
while (u != s)
{
if (cf[p[u]][u] < cmin)
cmin = cf[p[u]][u];
u = p[u];
}
u = t;
while (u != s)
{
f[p[u]][u] += cmin;
f[u][p[u]] -= cmin;
cf[p[u]][u] = c[p[u]][u] - f[p[u]][u];
cf[u][p[u]] = c[u][p[u]] - f[u][p[u]];
u = p[u];
}
}
int flow = 0;
for (int i = 0; i <= n; i++)
flow += f[i][t];
return flow;
}
0
Продвинутый

СообщениеПродвинутый Eledven Eledven 0
Оставил 492 сообщений с 05 мар 2006
ФР: 370
4 апреля 2010 в 14:50

Гость-гость-, он и так написан на С++
0

Сообщение Гость-гость- 4 апреля 2010 в 22:45

Вот скопировал код в UNIT консольного листа, и при запуске ошибка указывающая на первую строчку
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
#include <stdio.h>
#include <clx.h>
#pragma hdrstop

//---------------------------------------------------------------------------
int c[maxn][maxn], f[maxn][maxn], cf[maxn][maxn]; - на эту

[C++ Error] Unit1.cpp(7): E2451 Undefined symbol 'maxn'
[C++ Error] Unit1.cpp(14): E2451 Undefined symbol 'queue'
[C++ Error] Unit1.cpp(14): E2188 Expression syntax
[C++ Error] Unit1.cpp(16): E2451 Undefined symbol 'q'
[C++ Error] Unit1.cpp(42): E2451 Undefined symbol 'inf'
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
4 апреля 2010 в 23:01

Гость-гость-, и при чем тут с++ ? если у вас константа maxn не определена то тут хоть чем компилируй ничего не скомпилируется.
0
Продвинутый

СообщениеПродвинутый aggression aggression 0
Оставил 430 сообщений с 16 мар 2008
ФР: 12
5 апреля 2010 в 16:24


Кто может поделиться полезными ссылочками или исходниками для С++ Builder 6.0 для следующих заданий:
1. Алгоритм Фода-Фаркенсона (Нахождение всех путей автомате)

могу поделиться сведениями, что алгоритм на самом деле называется алгоритмом Форда-Фолкерсона. Поможет в гуглинге.
0

Сообщение Гость-гость- 10 апреля 2010 в 22:09

Привет всем, помогите пожалуйста нашел реализацию алгоритма Форда-Фолкерсона, при вводе данных вылетает программа, никаких ошибок не пишет, в чем может быть проблема???


#include <memory.h>
#include <stdio.h>

const int MAX_VERTICES = 40;

int NUM_VERTICES; // число вершин в графе
const int INFINITY = 10000; // условное число обозначающее бесконечность

// f - массив садержащий текушее значение потока
// f[i][j] - поток текущий от вершины i к j
int f[MAX_VERTICES][MAX_VERTICES];
// с - массив содержащий вместимоти ребер,
// т.е. c[i][j] - максимальная величину потока способная течь по ребру (i,j)
int c[MAX_VERTICES][MAX_VERTICES];

// набор вспомогательных переменных используемых функцией FindPath - обхода в ширину
// Flow - значение потока чарез данную вершину на данном шаге поиска
int Flow[MAX_VERTICES];
// Link используется для нахождения собственно пути
// Link[i] хранит номер предыдущей вешины на пути i -> исток
int Link[MAX_VERTICES];
int Queue[MAX_VERTICES]; // очередь
int QP, QC; // QP - указатель начала очереди и QC - число эл-тов в очереди

// поск пути по которому возможно пустить поток алгоритмом обхода графа в ширину
// функция ищет путь из истока в сток по которому еще можно пустить поток,
// считая вместимость ребера (i,j) равной c[i][j] - f[i][j],
// т.е. после каждой итерации(одна итерация - один поик пути) уменьшаем вместимости ребер,
// на величину пущеного потока
int FindPath(int source, int target) // source - исток, target - сток
{
QP = 0; QC = 1; Queue[0] = source;
Link[target] = -1; // особая метка для стока
int i;
int CurVertex;
memset(Flow, 0, sizeof(int)*NUM_VERTICES); // в начале из всех вершин кроме истока течет 0
Flow[source] = INFINITY; // а из истока может вытечь сколько угодно
while (Link[target] == -1 && QP < QC)
{
// смотрим какие вершины могут быть достигнуты из начала очереди
CurVertex = Queue[QP];
for (i=0; i<NUM_VERTICES; i++)
// проверяем можем ли мы пустить поток по ребру (CurVertex,i):
if ((c[CurVertex][i] - f[CurVertex][i])>0 && Flow[i] == 0)
{
// если можем, то добавляем i в конец очереди
Queue[QC] = i; QC++;
Link[i] = CurVertex; // указываем, что в i добрались из CurVertex
// и находим значение потока текущее через вершину i
if (c[CurVertex][i]-f[CurVertex][i] < Flow[CurVertex])
Flow[i] = c[CurVertex][i];
else
Flow[i] = Flow[CurVertex];
}
QP++;// прерходим к следующей в очереди вершине
}
// закончив поиск пути
if (Link[target] == -1) return 0; // мы или не находим путь и выходим
// или находим:
// тогда Flow[target] будет равен потоку который "дотек" по данному пути из истока в сток
// тогда изменяем значения массива f для данного пути на величину Flow[target]
CurVertex = target;
while (CurVertex != source) // путь из стока в исток мы восстанавливаем с помощбю массива Link
{
f[Link[CurVertex]][CurVertex] +=Flow[target];
CurVertex = Link[CurVertex];
}
return Flow[target]; // Возвращаем значение потока которое мы еще смогли "пустить" по графу
}

// основная функция поиска максимального потока
int MaxFlow(int source, int target) // source - исток, target - сток
{
// инициализируем переменные:
memset(f, 0, sizeof(int)*MAX_VERTICES*MAX_VERTICES); // по графу ничего не течет
int MaxFlow = 0; // начальное значение потока
int AddFlow;
do
{
// каждую итерацию ищем какй-либо простой путь из истока в сток
// и какой еще поток мажет быть пущен по этому пути
AddFlow = FindPath(source, target);
MaxFlow += AddFlow;
} while (AddFlow >0);// повторяем цикл пока поток увеличивается
return MaxFlow;
}

int main()
{
int source, target;
scanf("%d", &NUM_VERTICES);
scanf("%d %d", &source, &target);
int i, j;
for (i=0; i<NUM_VERTICES; i++)
for (j=0; j<NUM_VERTICES; j++)
scanf("%d",&c[i][j]);

printf("%d", MaxFlow(source, target));
return 0;
}
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
10 апреля 2010 в 22:58

Гость-гость-, вы уж как нить определитесь в каком именно месте ввода данных оно вылетает.
1.
[code:1]scanf("%d", &NUM_VERTICES); [/code:1]
2.
[code:1]scanf("%d %d", &source, &target); [/code:1]
3.
[code:1]int i, j;
for (i=0; i<NUM_VERTICES; i++)
for (j=0; j<NUM_VERTICES; j++)
scanf("%d",&c[i][j]); [/code:1]
в 3м случае на 3.а первая итерация. 3б последняя итерация, или 3в середина цикла.


и оформляйте исходный код с тегом [code].
0

Сообщение Гость-гость- 10 апреля 2010 в 23:54

Ввожу вот тестовые данные следующим образом
6
0 5
0 16 0 0 13 0
0 0 12 0 6 0
0 0 0 0 9 20
0 0 7 0 0 4
0 0 0 14 0 0
0 0 0 0 0 0
Результат: должен быть 23, а она вылетает.
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6638 сообщений с 23 янв 2004
ФР: 146213
11 апреля 2010 в 00:23

Гость-гость-, ну давайте определимся. написать программу вы сами не в состоянии. нашли какой то код. код не работает. вы ошибку сами пытаетесь найти или нет?
если да, то я думаю вы знакомы должны быть с приемами отладки, в частности с пошаговым выполнением программ, и тогда думаю можете все таки определиться где вылетает, либо на этапе ввода как вы изначально написали, либо при решении (что следует вроде как из последнего поста).

если же вы простите нашли чей то код, а теперь хотите чтобы вам кто то еще и ошибку в нем нашел, то уж простите. не слишком ли все просто все хотите?
0

Сообщение Гость-гость- 11 апреля 2010 в 21:43

просто я в теории графов не силен, вот и все(
0

Сообщение Гость 25 апреля 2010 в 00:22

Нашел вот код проги, нахождение максимального паросочетания в двудольном графе, помогите разобраться что написать в входном файле input.txt ??? (программа не моя)
[code:1]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

const int MAX = 251;

vector<int> G2B(MAX, 0);
vector< vector<int> > G(MAX);
vector<int> C(MAX, 0);
int k;

int dfs(int b)
{
if (C[b] != k)
{
C[b] = k;
for (int i = 0; i < G[b].size(); i++)
{
if (G2B[G[b][i]] == 0 || dfs(G2B[G[b][i]]))
{
G2B[G[b][i]] = b;
return 1;
}
}
}
return 0;
}

int main()
{
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);

int n, m;
cin >> n >> m;

for (int i = 1; i <= n; i++)
{
while(true)
{
int a = -1;
cin >> a;
if (a == 0) break;
G[a].push_back(i);
}
}

int res;
for (k = 1, res = 0; k <= m; k++)
res += dfs(k);

cout << res << endl;
for (int i = 1; i <= n; i++)
{
if (G2B[i] != 0)
cout << i << " " << G2B[i] << endl;
}

return 0;
}
[/code:1]
0

Сообщение Гость 28 апреля 2010 в 18:44

Гость, быстрее разобраться и с теорией графов и языком C, чем искать лёгких путей, чтобы за тебя все сделали.
0

Сообщение Мир 18 мая 2010 в 14:31

Народ запара ваще )) помогите решить задачу...дано вещественное число X и целое число N>0 найти значение вырожения 1+X+X^2/(N!)+...+X^N/(N!) на C++
0

Сообщение Гость 19 мая 2010 в 19:34

Народ запара ваще )) помогите решить задачу...дано вещественное число X и целое число N>0 найти значение вырожения 1+X+X^2/(N!)+...+X^N/(N!) на C++

может 1+X+(X^2)/2+(X^3)/(3!)+...+(X^N)/(N!) ?
если да то вот код

[code:1]#include<stdio.h>

int main()
{
double x;
int N;
int fact = 1;
double result = 1;

scanf("%lf %d", &x, &N);

for(int i = 1; i <= N; i++)
{
fact *= i;
result += x/fact;
x *= x;
}

printf("%lf", result);

return 0
}[/code:1]
0
Почти как админ

СообщениеПочти как админ Di2bl0s Di2bl0s 0
Оставил 2388 сообщений с 14 июн 2007
ФР: 10017
11 июня 2010 в 17:41

Тему про С# не нашёл, поэтому напишу здесь. Нужно сделать программку, чтобы выдавала последовательность чисел, вплоть до введенного :) Короче ввожу 12 выдаёт 2*4*6*8*10*12. С четными работает нормально, но с нечетными ничего не выходит, что только не делал - виснет. Должно быть, например 7 - 1*3*5*7

Кто помочь сможет? Вот код:
[code:1]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace lab3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
label1.Text = "";
}

// генерация строки
private void button1_Click(object sender, EventArgs e)
{
string s = textBox1.Text;
uint i;
if (!UInt32.TryParse(s, out i))
{
label1.Text = "Некорректный ввод";
return;
}
//int i = Int32.Parse(s);
uint j = i;
string result;
if (i == 0)
{
label1.Text = "Некорректный ввод";
return;
}
while (i > 0)
{
i -= 2;
}
i += 2;
result = i.ToString();
for (uint k = i + 2; k <= j; k += 2)
{
result = result + "*" + k.ToString();
}
label1.Text = result;
}

}
}
[/code:1]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
0



Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3