ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #891  
Старый 13.12.2008, 22:26
Аватар для scrat
scrat
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме:
5812656

Репутация: 1540


Отправить сообщение для scrat с помощью ICQ
По умолчанию

Если кому-нибудь когда-нибудь понадобится построение ПОЛИЗ(польской инверсной записи - парсинг выражений). То вот вам моя его реализация на 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;
        }
 
Ответить с цитированием

  #892  
Старый 13.12.2008, 22:51
Аватар для criz
criz
Постоянный
Регистрация: 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..
 
Ответить с цитированием

  #893  
Старый 13.12.2008, 23:24
Аватар для izlesa
izlesa
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме:
414311

Репутация: 110
Отправить сообщение для izlesa с помощью ICQ
По умолчанию

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..
 
Ответить с цитированием

  #894  
Старый 14.12.2008, 12:10
Аватар для HencH_MaN
HencH_MaN
Новичок
Регистрация: 08.02.2008
Сообщений: 19
Провел на форуме:
63941

Репутация: 0
По умолчанию

Спасибо,izlesa,помог студенту =)
 
Ответить с цитированием

  #895  
Старый 14.12.2008, 14:01
Аватар для akwaNOX
akwaNOX
Новичок
Регистрация: 03.02.2005
Сообщений: 5
Провел на форуме:
48301

Репутация: 0
По умолчанию

подкиньте плиз, исходник простой программы(любой) написанной на FLTK/FLUID
 
Ответить с цитированием

  #896  
Старый 14.12.2008, 17:30
Аватар для Stern
Stern
Познающий
Регистрация: 13.03.2007
Сообщений: 75
Провел на форуме:
268754

Репутация: 13
По умолчанию

Люди помогитее плиииз с http://forum.antichat.ru/showpost.php?p=969281&postcount=823

надо на с++ время в обрез((( осталось
 
Ответить с цитированием

  #897  
Старый 14.12.2008, 19:15
Аватар для jawbreaker
jawbreaker
Участник форума
Регистрация: 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 0a.size(); i++)
    {
        
sum += a[i];
    }
    return 
sum / (a.size() + .0); // делим сумму всех чисел на размер массива
}

void ShowArray(const vector <int> & a// функция для вывода массива на экран
{
    
cout << "Array: ";
    for (
int i 0a.size(); i++)
    {
        
cout << "a[i]:" << a[i] << "\n";
    }
}

int main()
{
    
cout << "Fill random (y/n)?\n";
    
char ch;
    
cin >> ch;
    
vector <inta(SIZE);
    if (
ch == 'y')
    {
        
srand(32000);
        for (
int i 0SIZEi++)
        {
            
//srand(100);
            
a[i] = rand() % 100;
        }
    }
    else
    if(
ch == 'n')
    {
        for (
int i 0SIZEi++)
        {
            
cin >> a[i];
        }
    }
    
ShowArray(a);
    
int N;
    
cout << "Enter number!\n";
    
cin >> N;
    if((
SIZE) && (>= 0))
    {
        
a[N] = get_ave(a);
    }
    
ShowArray(a);
    
cin.get();
    
sort(a.begin(), a.end());
    
ShowArray(a); // выводим отсортированный массив
    
cin.get();
    return 
0;

 
Ответить с цитированием

  #898  
Старый 14.12.2008, 19:45
Аватар для SAGib
SAGib
Новичок
Регистрация: 23.09.2008
Сообщений: 4
Провел на форуме:
51700

Репутация: 0
По умолчанию

Народ,подскажите по такой трабле:
Составить блок схему котрая выводит на экран сумму двух чисел,равную числу от 1 до 9 введеному с клавиатуры
например 6=5+1, 9=4+5... и так от 1 до 9

З.Ы. заранее благодарен

Последний раз редактировалось SAGib; 14.12.2008 в 20:12..
 
Ответить с цитированием

  #899  
Старый 14.12.2008, 23:40
Аватар для lisa99
lisa99
Постоянный
Регистрация: 15.07.2008
Сообщений: 444
Провел на форуме:
1417964

Репутация: 665
По умолчанию

Цитата:
Сообщение от SAGib  
Народ,подскажите по такой трабле:
Составить блок схему котрая выводит на экран сумму двух чисел,равную числу от 1 до 9 введеному с клавиатуры
например 6=5+1, 9=4+5... и так от 1 до 9
непонятно сформ. условие.
уточни
 
Ответить с цитированием

  #900  
Старый 15.12.2008, 00:34
Аватар для SAGib
SAGib
Новичок
Регистрация: 23.09.2008
Сообщений: 4
Провел на форуме:
51700

Репутация: 0
По умолчанию

Цитата:
Сообщение от lisa99  
непонятно сформ. условие.
уточни
Как я понял нужно приложение работающее в консоли,которое при вводе числа от 1 до 9ти выводит сумму этого числа в 2х цифрах т.е. при вводе 6 будет выводится числа 5+1 либо 2+4 и так далее...
З.Ы. Точнее сказать немогу т.к. меня попросили помоч и я в с++ нешарю

Последний раз редактировалось SAGib; 15.12.2008 в 00:38..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сюда выкладываем все проги для фрикринга мобильников, которых знаем! nigger Сотовый фрикинг 5 11.04.2009 11:15
Американским студентам запретили пользоваться Skype KPOT_f!nd Мировые новости 1 28.09.2006 03:47
Любителям квестов сюда!! FoX's Болталка 10 25.01.2005 20:42



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ