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

Задачи на графы и строки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
patriarch
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 17
24.03.2009, 17:24     Задачи на графы и строки #1
Поомгите пожалуйста с 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 + + + + + + + + оно выдает ошибку...Выделен кусок кода где препод сказал ошибка.Но возможно есть ещё какие-нибудь ошибки помогите пожалуйста.
Код
#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)
[B]{
	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];
}[/B]

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();
	}

}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2009, 17:24     Задачи на графы и строки
Посмотрите здесь:

графы C++
Графы C++
Графы C++
Графы C++
Задачи на строки не умею реализовывать C++
Задачи на графы C++
C++ Графы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.03.2009, 17:47     Задачи на графы и строки #2
Код
void insert(char s1[],char s2[],int n)
что делает функция ?
patriarch
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 17
24.03.2009, 17:55  [ТС]     Задачи на графы и строки #3
Цитата Сообщение от accept Посмотреть сообщение
Код
void insert(char s1[],char s2[],int n)
что делает функция ?
Ну вообще по замыслу вставляет одну строку в другую начиная с п-го символа
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.03.2009, 19:48     Задачи на графы и строки #4
Код
    for (i = l1+l2; i >= l1; i--)
        s1[i] = s1[i-l2];
Код
    for (i = 0; i < l2; i++)
        s1[i+n] = s2[i];
patriarch
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 17
24.03.2009, 20:16  [ТС]     Задачи на графы и строки #5
accept,
то есть вся функция будет выглядеть так?
Код
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;
	}
}
у меня и так он эти выражения не считает
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.03.2009, 01:12     Задачи на графы и строки #6
C
1
2
3
4
5
6
7
8
9
10
11
/* insert:  вставляет в строку s1 строку s2,
            начиная с позиции n, где n = 1,2,3... */
void insert(char s1[], const char *s2, int n)
{
    int i, l1 = strlen(s1), l2 = strlen(s2);
 
    for (i = l1+l2; i > l1; i--)
        s1[i] = s1[i-l2];
    for (i = 0; i < l2; i++)
        s1[i+n-1] = s2[i];
}
Вложения
Тип файла: zip insert_n_index.zip (532 байт, 19 просмотров)
patriarch
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 17
25.03.2009, 20:29  [ТС]     Задачи на графы и строки #7
спасибо,конечно но это тоже не работает...возможно ошибка не в той функции?или не только в ней...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2009, 21:44     Задачи на графы и строки
Еще ссылки по теме:

C++ Задача на строки и задачи на создание рекурсивной функции
C++ Задачи на строки
графы C++
Прокоминтируйте строки задачи C++
задачи на строки в C++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.03.2009, 21:44     Задачи на графы и строки #8
заменил itoa, так как её нет в стандарте
Вложения
Тип файла: zip calc.zip (856 байт, 28 просмотров)
Yandex
Объявления
25.03.2009, 21:44     Задачи на графы и строки
Ответ Создать тему
Опции темы

Текущее время: 21:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru