Форум программистов, компьютерный форум CyberForum.ru

как сделать чтение из файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа со строками http://www.cyberforum.ru/cpp-beginners/thread411974.html
Помогите написать программу на С++. Тема:Работа со строками Условие: В S1 отсортировать по возрастанию группы символов по n. Длина S1 кратна n.
C++ разработать алгоритм обработки строки символов разработать алгоритм обработки строки символов которая может содержать буквы английского алфавита, цифры, знаки припинания, пробелы, знаки арифметических операций и скобки. Строку ввести с клавиатуры. Необходимо найти количество вхождений заданного символа в строке. Результат вывести на экран. помогите пожалуйста срочно очень нужно!!! http://www.cyberforum.ru/cpp-beginners/thread411969.html
C++ Работа с функцией
Описать функцию smooth(A,n), заменяющую каждый элемент вещественного массива A размера n на его среднее арифметическое со своими соседями (сглаживание массива). Массив A - входной и выходной параметр, n - входной параметр. С помощью этой функции выполнить пятикратное сглаживание данного массива A размера n, выводя на экран результаты каждого сглаживания.
C++ Гармонический анализ массива
Добрый день помогите написать программу на языке Си выполняющую следующую задачу Осуществить гармонический анализ входного одномерного массива вещественных чисел. Гармонический анализ это ряд Фурье! То есть нужна программа для вычисления ряда Фурье.
C++ Нахождение суммы элементов http://www.cyberforum.ru/cpp-beginners/thread411952.html
Нахождение суммы элементов в каждой строке массива
C++ в массиве одинаковые элементы Проверка наличия в массиве одинаковых элементов подробнее

Показать сообщение отдельно
Stas12
0 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 102

как сделать чтение из файла - C++

19.12.2011, 21:24. Просмотров 680. Ответов 5
Метки (Все метки)

алгоритм дейкстры, нужно чтобы пользователь не забивал количество вершин, веса, и количество ребер, а программа читала это все с файла TXT например вот таким образом организованным

6 8 0 5 //количество вершин, количество ребер, стартовая вершина, конечная вершина соответственно
0 1 2
0 4 3
1 2 1
1 3 4
1 4 3
1 5 7
2 5 2
3 4 3

вот сама программа

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <iostream>
#include <conio.h>
#include <windows.h>
#include<iomanip>
using namespace std;
        
char NEWT[256];
char*RUS(char*TEXT) {
CharToOemA(TEXT,NEWT);
return NEWT;}
 
int v;
int main()
{       int i,j;
   int infinity=1000;                     // Бесконечность
                                                                                  // Количество вершин в графе
   int VES[100][100];                                             // Матрица весов графа
 
   int x[100];                                                    //Массив, содержащий единицы и нули для каждой вершины,
                                                                                  // x[i]=0 - еще не найден кратчайший путь в i-ю вершину,
                                                                                  // x[i]=1 - кратчайший путь в i-ю вершину уже найден
   
   int DlinaPuti[100];                                    //t[i] - длина кратчайшего пути от вершины s в i
 
   int PredVertex[100];                                   //h[i] - вершина, предшествующая i-й вершине
                                                                                  //на кратчайшем пути
   int VERTEX;
   int p;                         
cout<<RUS("Ввести количество вершин в графе ")<<endl;
cin>>VERTEX;p= VERTEX;                                    //Число вершин в графе
cout<<RUS("Заполните матрицу весов графа ")<<endl;      // Матрица весов графа
cout<<setw(4);
for (i=0;i<VERTEX;i++)
cout<<RUS("|x")<<i+1;
cout<<endl;
 
for(i=0;i<VERTEX;i++)
{cout<<RUS("X")<<i+1<<'|';
for(j=0;j<VERTEX;j++)
cin>>VES[i][j];}
 
                                                                                // Будем искать путь из вершины s в вершину g по циклу
   int start;                                           // Номер исходной вершины
   int end;                                             // Номер конечной вершины
N: cout<<RUS("Введите стартовую вершину: ");    // Номер может изменяться от 0 до p-1
   cin>>start;
   if (start>(p-1) && start<0) {cout<<RUS("Нет такой вершины повторите ввод...")<<endl; goto N; } // на случай неверных данных
   start=start-1;                                               //так как массив начинается с 0 отнимаем от вводимой цифры 1
   for (int prosto=0;prosto<VERTEX;prosto++)
   {end=prosto;                                                 //цикл прогоняет алгоритм Флойда p-ое количество раз преврашая его в алгоритм Дейкстры  
   if (end==start) continue;                    //исключаем просчет растояния между одной и той же точкой
   else
   {
 
                                                                                 // Инициализируем начальные значения массивов
   int u;                                                                // Счетчик вершин
   for (u=0;u<p;u++)
   {
       DlinaPuti[u]=infinity;                                    //Сначала все кратчайшие пути из s в i 
                                                                                 //равны бесконечности
      x[u]=0;                                                    // и нет кратчайшего пути ни для одной вершины
   }
   PredVertex[start]=0;                                         // s - начало пути, поэтому этой вершине ничего не предшествует
   DlinaPuti[start]=0;                                          // Кратчайший путь из s в s равен 0
   x[start]=1;                                                          // Для вершины s найден кратчайший путь
   v=start;                                                                     // Делаем s текущей вершиной
   
   while(1)
   {
                                                                                // Перебираем все вершины, смежные v, и ищем для них кратчайший путь
      for(u=0;u<p;u++)
      {
         if(VES[v][u]==0)continue;              // Вершины u и v несмежные
         if(x[u]==0 && DlinaPuti[u]>DlinaPuti[v]+VES[v][u]) //Если для вершины 'u' еще не 
                                                                                //найден кратчайший путь
                                                                // и новый путь в 'u' короче чем 
                                                                                //старый, то
         {
            DlinaPuti[u]=DlinaPuti[v]+VES[v][u];                        //запоминаем более короткую длину пути в
                                                                                //массив t[и]
           PredVertex[u]=v;                                             //запоминаем, что v->u часть кратчайшего 
                                                                                //пути из s->u
         }
      }
 
                                                                                 // Ищем из всех длин некратчайших путей самый короткий
      int w=infinity;                                   // Для поиска самого короткого пути
      v=-1;                                                             // В конце поиска v - вершина, в которую будет 
                                                                                // найден новый кратчайший путь. Она станет 
                                                                                // текущей вершиной
      for(u=0;u<p;u++)                                  // Перебираем все вершины.
      {
         if(x[u]==0 && DlinaPuti[u]<w)                   // Если для вершины не найден кратчайший 
                                                                                 // путь и если длина пути в вершину 'u' меньше
                                                                                 // уже найденной, то
         {
            v=u;                                                 // текущей вершиной становится 'u'-я вершина
            w= DlinaPuti[u];
         }
      }
      if(v==-1)
      {
         cout<<RUS("Нет пути из вершины ")<<start+1;cout<<RUS(" в вершину ")<<end+1<<"."<<endl;
         break;
      }
      if(v==end)                                                        // Найден кратчайший путь,
      {                                                             // выводим его
         cout<<RUS("Кратчайший путь из вершины ")<<start+1;cout<<RUS(" в вершину ")<<end+1<<":";
           u=end;
           while(u!=start)
         {
            cout<<" "<<u+1;
            u=PredVertex[u];
         }
         cout<<" "<<start+1<<RUS(". Длина пути - ")<< DlinaPuti[end];cout<<endl;
           break;
      }
      x[v]=1;
   }}}
   
return 0;}
 Комментарий модератора 
Используйте теги форматирования кода!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru