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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2007, 23:34   #1
D@rk_Spirit
 
Аватар для D@rk_Spirit
 
Регистрация: 25.12.2007
Сообщений: 4
Вопрос Задачи на массивы и указатели в СИ

Вот задачки:
1. Одномерный массив
Дана последовательность из N целых 16тиразрядных чисел. Выполнить циклический сдвиг элементов на k<16 разрядов. Распечатать результат, уменьшить k на 1, повторить. Повторять процедуру, пока k > 0. Пример сдвига на 8 разрядов: входная последовательность: 0xAABB 0хCCDD 0хEEFF 0x1122; результат: 0хBBCC 0xDDEE 0xFF11 0x22AA.
2. Многомерный массив:
Дана функция 3х переменных f(x,y,z) = ex*log(1+y)/z. Построить 3хмерную
дискретную таблицу, содержащую значения функции на отрезках: x[0,20], y[0,30], z[10,60]. Шаг по каждой оси – 1. Найти максимальное и минимальное значение функции для каждого фиксированного x и абсолютное максимальное значение в заданной области.
3. Указатель:
При выполнении заданий учитывать следующие требования и ограничения:
1. Размер любой входной строки не более 512 символов;
2. Необходимо проверять что формат входной строки соответствует формату
определенному в задании;
3. Для работы со строками нельзя использовать библиотечные функции. Используются
самостоятельно разработанные подпрограммы, оперирующие со строками на уровне
массива символов.
4. Функция main не должна содержать никакой обработки строк. Весь функционал по
обработке текста выносится в подпрограммы (ввод,вывод, модификация строк).
Вот сама задача: На вход подается предложение, содержащее английские слова и конструкции перечисления,
разделенные пробелами. Конструкция перечисления имеет следующий вид: <object>: <entity1>, <entity2>,.....<entityN>;
Пример: cars: Toyota Corolla, Nissan Sunny, Mersedes SLK, Opel Corsa, Toyota Crown;
Найти в предложении все конструкции перечисления и отсортировать в них сущности (<entityi>) по алфавиту. есть небольшие наброски, но проги работают либо неправильно либо не работают вообще, если могут чем то помочь - выложу. Не оставьте задачки без внимания!
СИБГУТИ ВМ-76 - вечный студент
D@rk_Spirit вне форума Ответить с цитированием
Старый 29.12.2007, 07:58   #2
D@rk_Spirit
 
Аватар для D@rk_Spirit
 
Регистрация: 25.12.2007
Сообщений: 4
По умолчанию Исходнички.

Вот решения этих задач уже полностью, но нужна еще помощь в доделывании задачи 2. нахождение абсалютного максимума.
1.

Код:
#include <stdio.h>
int main ()
{
int k,N,n;
int bits;
int sbits;
printf("Введите кол-во чисел:");
scanf("%d",&N);
unsigned int mas[N];
if(N<=0)
{
printf("Kol-vo 4isel ne zadanno.\n");
return 0;
}
printf("Введите кол-во разрядов:");
scanf("%d",&k);
if(k<=0||16<=k)
{
printf("Kol-vo razriadov ne zadano ili zadano ne verno\n");
return 0;
}
for(n=0;n<=(N-1);n++)
{
printf("Введите %d элемент массива:",n);
scanf("%X",&mas[n]);
}
for(;k>0;k--)
{   
    printf("\nk=%d\n",k);
    bits = mas[0]>>(16-k);
    mas[0] = mas[0]<<k;
	for(n=1;n<=(N-1);n++)	
	{  
	    sbits = mas[n]>>(16-k);
	    mas[n] = mas[n]<<k;
	    mas[n-1]|= sbits;
	    printf("\n\t%X\n",mas[n-1] & 0xFFFF);
    		if(n==(N-1))
		{
		mas[n]|= bits;
		printf("\n\t%X\n",mas[n] & 0xFFFF);
		}						
	}
}
return 0;
}
Модератор: Используйте тег <CODE> !!!
СИБГУТИ ВМ-76 - вечный студент

Последний раз редактировалось merax; 29.12.2007 в 08:51.
D@rk_Spirit вне форума Ответить с цитированием
Старый 29.12.2007, 07:59   #3
D@rk_Spirit
 
Аватар для D@rk_Spirit
 
Регистрация: 25.12.2007
Сообщений: 4
По умолчанию Вот 2 для доработки.

Код:
#include <stdio.h>
#include <math.h>
#define e 2.7
int main ()
{
float mas[3][4][5];
float f;
int x,y,z;
printf("Дискретная таблица,содержащие значение функции на отрезках X[0;2],Y[0;3],Z[1;4]!\n\n");
for(x=0;x<3;x++)
  {
    for(y=0;y<4;y++)
	{
	    for(z=1;z<5;z++)
		{
		    f=(pow(e,x))*(log(1+y))/z;
		    mas[x][y][z]=f;
		    printf("%f  ",f);
		}
	}
  }
printf("\n\nТаблица готова!\n");
return 0;
}
Модератор: Используйте тег <CODE> !!!
СИБГУТИ ВМ-76 - вечный студент

Последний раз редактировалось merax; 29.12.2007 в 08:51.
D@rk_Spirit вне форума Ответить с цитированием
Старый 29.12.2007, 08:01   #4
D@rk_Spirit
 
Аватар для D@rk_Spirit
 
Регистрация: 25.12.2007
Сообщений: 4
По умолчанию А вот 3 с указателями.

Код:
#include <stdio.h>


void input_str(char s[])
{
	int i = 0;
        do {
	        s[i++] = getchar();
	} while ((s[i-1] != EOF) && (s[i-1] != '\n'));    
	s[i-1] = '\0';
}

char *strpos(char str[], const char word[]) {
	int i = 0, j = 0;
	char *pos = NULL;
	while (str[i] != '\0') {
		if (str[i] == word[j]) {
			if (j == 0)
				pos = &str[i];
			j++;
		} else {
			pos = NULL;
			j = 0;
		}
		if (word[j] == '\0')
			break;
		i++;
	}
	return pos;
}

char *strsep(char *str[]) {
	if (*str == NULL) return NULL;
	char *token = *str;
	char *pos = strpos(*str, ", ");
	if (pos == NULL)
		*str = NULL;
	else {
		*pos = '\0';
		*str = pos + 2;
	}
	return token;
}

int strlen(char s[]) {
	int i = 0;
	while(s[i] != '\0') i++;
	return i;
}

void strcopy(char out[], char in[])
{
    int i = -1;
    do {
        i++;
        out[i] = in[i];
    } while (in[i] != '\0');
}
int constr_len(char s[])
{
    int i=0;
    while ((s[i] != '\0') && (s[i] != ';'))
        i++;
    return i;
}

int strcmp(char s1[], char s2[])
{
    int i = 0;
    while ((s1[i] != '\0') && (s2[i] != '\0')) {
        if (s1[i] > s2[i])
            return 1;
        else if (s1[i] < s2[i])
            return -1;
        else if ((s1[i] == '\0') && (s2[i] == '\0'))
            return 0;
        i++;
    }
    return -2;
}

void sort(char str[])
{
    char *constrs = strpos(str, ":"),
        entities[10][30], *entity, *tmp;
    char tmp_sort[512];
    int len, len2, i, j, count;
    while (constrs != NULL)
    {
        printf("-> %s\n", constrs);
        constrs+=2;
        tmp = constrs;
        len = constr_len(constrs);
        constrs[len] = '\0';
        entity = strsep(&constrs);
        count = 0;
        while (entity != NULL) {
            strcopy(entities[count++], entity);
            entity = strsep(&constrs);
        }
        for (i = 0; i < count; i++)
            for (j = count - 1; j > i; j--)
                if (strcmp(entities[j-1], entities[j]) > 0) {
                    strcopy(tmp_sort, entities[j-1]);
                    strcopy(entities[j-1], entities[j]);
                    strcopy(entities[j], tmp_sort);
                }
        for (i = 0; i < count; i++) {
            len2 = strlen(entities[i]);
            strcopy(tmp, entities[i]);
            tmp[len2] = ',';
            tmp[len2+1] = ' ';
            tmp = tmp + len2+2;
        }
        *(tmp-2) = ';';
        constrs = tmp;
        constrs = strpos(constrs, ":");
    }
}

int main()
{
    char str[512];
    printf("Введите предложение:\n");
    input_str(str);
    sort(str);
    printf("%s\n", str);
    return 0;
}
Модератор: Используйте тег <CODE> !!!
СИБГУТИ ВМ-76 - вечный студент

Последний раз редактировалось merax; 29.12.2007 в 08:52.
D@rk_Spirit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Две задачи на массивы. Nadi Помощь студентам 4 25.04.2011 16:58
Паскаль. Задачи на массивы pr1mat Паскаль, Turbo Pascal, PascalABC.NET 6 26.05.2008 15:04
Pascal задачи на массивы SweetOpium Помощь студентам 9 08.05.2008 20:40
Задачи на двумерные массивы Exact Паскаль, Turbo Pascal, PascalABC.NET 6 06.12.2007 12:50