Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

13.12.2008, 22:26
|
|
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме: 5812656
Репутация:
1540
|
|
Если кому-нибудь когда-нибудь понадобится построение ПОЛИЗ(польской инверсной записи - парсинг выражений). То вот вам моя его реализация на c#:
Код:
public void Parse(string text)
{
Stack<char> stack = new Stack<char>(); //рабочкий стек
string ret = ""; //собственно сам полиз
for (int i = 0; i < text.Length; i++)
{
if (text[i] == '(') stack.Push('(');
if (char.IsLetter(text[i]) || char.IsDigit(text[i])) ret += text[i];
if (text[i] == '-'||text[i]=='*'||text[i]=='/'||text[i]=='+')
{
while (stack.Count!=0 && stack.Peek() != '(') // выталкиваем все с большим приоритетом
{
char a = stack.Pop(); //вынимаем...
if (GetOperationPriory(text[i]) < GetOperationPriory(a)) ret += a;
}
stack.Push(text[i]);
}
if (text[i] == ')')
{
while(stack.Count!=0&&stack.Peek()!=')')
{
char k = stack.Pop();
if (k != ')'&&k!='(') ret += k;
}
}
}
if (stack.Count != 0)
{
while (stack.Count != 0)
{
if (stack.Peek() != '(') ret += stack.Pop();
else stack.Pop();
}
}
label2.Text = ret;
}
private int GetOperationPriory(char sym) //приоритет операций
{
if (sym == '+') return 1;
if (sym == '-') return 2;
if (sym == '*') return 3;
if (sym == '/') return 4;
else return 0;
}
|
|
|

13.12.2008, 22:51
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
2 HencH_MaN, прогу не компилил, но вроде это
for (p=0;p<m;p++)
{
cout<<"b["<<p<<"]="<<b[p];
}
выводит одну строку из массива, попробуй добавить еще один цикл.
Последний раз редактировалось criz; 14.12.2008 в 00:08..
|
|
|

13.12.2008, 23:24
|
|
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме: 414311
Репутация:
110
|
|
2HencH_MaN
Башка не рабатает, так что вот тебе немножечко моего говнокода;
На что стоит обратить внимания:
1. Нет никакой обработки случаев когда malloc возвращает нулевые указатели вместо валидных. Это фигово, но мне влом.
2. В задании нет указания на то, что надо обменивать элементы - первый с минимальным, последний с максимальным. Так что я сделал затирание максимальным и минимальным значением последнего и первого элемента строки.
3. Костыли в виде инициализации iMax, iMin максимально и минимально возможными значениями для int сделаны по причине нулевой мотивации облагораживать код и вводить дополнительные if. Так, что если хочешь сделать не машиннозависимый код, то вперёд ^____^
Код:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int iRowsSize, iColsSize, iMin, iMax;
int i, j;
int **pCol;
int *pRow;
iRowsSize = iColsSize = 0;
iMax = 0x80000000;
iMin = 0x7FFFFFFF;
printf("Input number of rows : ");
scanf("%d", &iRowsSize);
printf("Input number of columns :");
scanf("%d", &iColsSize);
pCol = (int **)malloc(iColsSize * sizeof(int **));
for(i = 0; i < iColsSize; i++)
{
pRow = (int *)malloc(iRowsSize * sizeof(int));
pCol[i] = pRow;
for(j = 0; j < iRowsSize; j++)
{
printf("Input [%d][%d] element : ", i, j);
scanf("%d", &pCol[i][j]);
}
}
for(i = 0; i < iColsSize; i++)
{
for(j = 0; j < iRowsSize; j++)
{
iMax = (pCol[i][j] > iMax) ? pCol[i][j] : iMax;
iMin = (pCol[i][j] < iMin) ? pCol[i][j] : iMin;
}
pCol[i][0] = iMin;
pCol[i][iRowsSize - 1] = iMax;
iMax = 0x80000000;
iMin = 0x7FFFFFFF;
}
for(i = 0; i < iColsSize; i++)
{
for(j = 0; j < iRowsSize; j++)
{
printf("[%d][%d] element : %d ", i, j, pCol[i][j]);
}
free(pCol[i]);
printf("\n");
}
free(pCol);
return 0;
}
Последний раз редактировалось izlesa; 14.12.2008 в 00:26..
|
|
|

14.12.2008, 12:10
|
|
Новичок
Регистрация: 08.02.2008
Сообщений: 19
Провел на форуме: 63941
Репутация:
0
|
|
Спасибо,izlesa,помог студенту =)
|
|
|

14.12.2008, 14:01
|
|
Новичок
Регистрация: 03.02.2005
Сообщений: 5
Провел на форуме: 48301
Репутация:
0
|
|
подкиньте плиз, исходник простой программы(любой) написанной на FLTK/FLUID
|
|
|

14.12.2008, 17:30
|
|
Познающий
Регистрация: 13.03.2007
Сообщений: 75
Провел на форуме: 268754
Репутация:
13
|
|
Люди помогитее плиииз с http://forum.antichat.ru/showpost.php?p=969281&postcount=823
надо на с++  время в обрез((( осталось
|
|
|

14.12.2008, 19:15
|
|
Участник форума
Регистрация: 07.07.2008
Сообщений: 161
Провел на форуме: 1027635
Репутация:
234
|
|
Stern
вот тебе первое задание с комментариями а как делать остальные это уже твоя забота
PHP код:
#include <vector>
#include <iostream>
#include <algorithm>
#include <cstdio>
#define SIZE 10
using namespace std;
double get_ave(const vector <int> & a) // функция считающее среднее значение числа
{
int sum = 0;
for (int i = 0; i < a.size(); i++)
{
sum += a[i];
}
return sum / (a.size() + .0); // делим сумму всех чисел на размер массива
}
void ShowArray(const vector <int> & a) // функция для вывода массива на экран
{
cout << "Array: ";
for (int i = 0; i < a.size(); i++)
{
cout << "a[i]:" << a[i] << "\n";
}
}
int main()
{
cout << "Fill random (y/n)?\n";
char ch;
cin >> ch;
vector <int> a(SIZE);
if (ch == 'y')
{
srand(32000);
for (int i = 0; i < SIZE; i++)
{
//srand(100);
a[i] = rand() % 100;
}
}
else
if(ch == 'n')
{
for (int i = 0; i < SIZE; i++)
{
cin >> a[i];
}
}
ShowArray(a);
int N;
cout << "Enter number!\n";
cin >> N;
if((N < SIZE) && (N >= 0))
{
a[N] = get_ave(a);
}
ShowArray(a);
cin.get();
sort(a.begin(), a.end());
ShowArray(a); // выводим отсортированный массив
cin.get();
return 0;
}
|
|
|

14.12.2008, 19:45
|
|
Новичок
Регистрация: 23.09.2008
Сообщений: 4
Провел на форуме: 51700
Репутация:
0
|
|
Народ,подскажите по такой трабле:
Составить блок схему котрая выводит на экран сумму двух чисел,равную числу от 1 до 9 введеному с клавиатуры
например 6=5+1, 9=4+5... и так от 1 до 9
З.Ы. заранее благодарен 
Последний раз редактировалось SAGib; 14.12.2008 в 20:12..
|
|
|

14.12.2008, 23:40
|
|
Постоянный
Регистрация: 15.07.2008
Сообщений: 444
Провел на форуме: 1417964
Репутация:
665
|
|
Сообщение от SAGib
Народ,подскажите по такой трабле:
Составить блок схему котрая выводит на экран сумму двух чисел,равную числу от 1 до 9 введеному с клавиатуры
например 6=5+1, 9=4+5... и так от 1 до 9
непонятно сформ. условие.
уточни
|
|
|

15.12.2008, 00:34
|
|
Новичок
Регистрация: 23.09.2008
Сообщений: 4
Провел на форуме: 51700
Репутация:
0
|
|
Сообщение от lisa99
непонятно сформ. условие.
уточни
Как я понял нужно приложение работающее в консоли,которое при вводе числа от 1 до 9ти выводит сумму этого числа в 2х цифрах т.е. при вводе 6 будет выводится числа 5+1 либо 2+4 и так далее...
З.Ы. Точнее сказать немогу т.к. меня попросили помоч и я в с++ нешарю
Последний раз редактировалось SAGib; 15.12.2008 в 00:38..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|