Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2009, 19:14   #1
patriarch
Пользователь
 
Регистрация: 24.03.2009
Сообщений: 62
По умолчанию Задачи на графы и строки

Помогите пожалуйста с 2 задачами.
Цитата:
1) Формулы и программы.
Задана обратная польская запись (например, "1 2 +" для выражения "1 + 2", "X 3 Y
* +" для "X + 3 * Y", "X 3 + Y *" для "( X + 3 ) * Y") некоторого простого
выражения, не содержащего вхождений идентификаторов. Вычислить значение этого
выражения.
вот мое решение...оно работает но не совсем так как надо...например на выражение
1 1 1 1 1 1 1 1 1 + + + + + + + + или на 1 2 - 1 0 * + оно выдает ошибку...Выделен кусок кода где препод сказал ошибка.Но возможно есть ещё какие-нибудь ошибки помогите пожалуйста.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void turn (char s[])
{
	int i=strlen(s)-1,j;
	char c;

	for(j=0;j<i/2+1;j++)
	{
		c=s[j];
		s[j]=s[i-j];
		s[i-j]=c;
	}
}

void insert(char s1[],char s2[],int n)
{
	int i,l1=strlen(s1),l2=strlen(s2);

	for(i=l1+n;i>l1-1;i--)
	{
		s1[i]=s1[i-n];
		s1[i-n]=' ';
	}

	for(i=0;i<l2;i++)
		s1[i+n]=s2[i];
}

int schet(char s[])
{
	int i=0,l=strlen(s),j=0,b=0,res;
	char s1[255],s2[255];
	
	while(((s[i]<'0')||(s[i]>'9')||(s[i]==' '))&&(i<l))
		i++;
	if(i!=l)
		while((s[i]>='0')&&s[i]<='9')
			s1[j++]=s[i++];
	
	s1[i]='\0';
	res=atoi(s1);
	
	while((s[i]!='-')&&(s[i]!='+')&&(s[i]!='*')&&(s[i]!='/')&&(i<l))
		i++;
	if(i!=l)
	{
		j=i-1;
		while(s[j]==' ')
			j--;
		while((s[j]>='0')&&(s[j]<='9')&&(j>-1))
		{
			s1[b++]=s[j];
			s[j--]=' ';
		}
		s1[b]='\0';
		
		b=0;
		while(s[j]==' ')
			j--;
		
		while((s[j]>='0')&&(s[j]<='9')&&(j>-1))
		{
			s2[b++]=s[j];
			s[j--]=' ';
		}
		s2[b]='\0';
	
		turn(s1);
		turn(s2);
		

		if(s[i]=='-')
			res=atoi(s2)-atoi(s1);
		if(s[i]=='+')
			res=atoi(s2)+atoi(s1);
		if(s[i]=='*')
			res=atoi(s2)*atoi(s1);
		if(s[i]=='/')
			res=atoi(s2)/atoi(s1);
		s[i]=' ';

		itoa(res,s1,10);
		insert(s,s1,i);
		res=schet(s);
		return(res);
	}
	return(res);
}

void main()
{
	char str[2048];
	int res=0;

	printf("Vvedite svirajenie\n");

	gets(str);
	res=schet(str);

	printf("%i\n",res);

}
Цитата:
2) Графы и системы дорог.
Для заданного натурального числа n > 4 построить граф (без петель и без кратных
рёбер) с n вершинами, в котором степень каждой вершины равна 4 (Степень вершины
равна числу рёбер, инцидентных ей).
Вот мой код но преподаватель сказал что граф неориентирован и в каждой строке должно быть по 4 единицы и матрица должна быть симметрична...

Код:
#include "stdio.h"
int m[100][100];
int size;

void f()
{
	for (int x=0; x<size; x++)
	{
		if (x==0) 
		{
			m[0][size-1]=1;
			m[0][1]=1;
			m[size-2][size-1]=1
		}
		else if (x==size-1)
		{
			m[1][0]=1;
			m[size-1][0]=1;
			m[size-1][size-2]=1;
		}
		else
		{
			m[x][x+1]=1;
			m[x][x-1]=1;
		}
	}
}

void g()
{
	for (int x=0; x<size; x++)
	{
		for (int y=0; y<size; y++) printf("%d ", m[x][y]);
		printf("\n");
	}
}
void main()
{
	scanf("%d", &size);
	if (size<=4)
	{
		printf("Error\n");
	}
	else
	{
		f();
		g();
	}

}

Последний раз редактировалось patriarch; 24.03.2009 в 19:48.
patriarch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Free Pascal задачи на строки andrey2 Помощь студентам 9 25.12.2011 16:31
Паскаль. Задачи. (Графика, БД, строки) Aferist Помощь студентам 16 19.02.2010 17:48
Задачи на символы и строки Alabay Паскаль, Turbo Pascal, PascalABC.NET 3 11.01.2009 21:30
Паскаль, 2 задачи на строки, 1 на процедуру Qfast Помощь студентам 15 25.12.2008 21:58
2 задачи на строки NEMO1991 Помощь студентам 2 20.12.2008 21:46