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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2010, 22:33   #31
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

%5s - считать только 5 символов, а не до пробела
13 - возврат каретки, 10 - перевод строки, когда энтер жмакаешь, то эти символы записываются
netrino вне форума Ответить с цитированием
Старый 05.01.2010, 13:27   #32
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

и снова я))
Начал искать уникальные элементы(те которые не повторяются),программа компилируется,но не печатает.
То что над main'ом:
Код:
void  sort_array_uni(void* array, int array_type, int k)
void  print_array_uni(void* array,int array_type,int k);
Сам main:
Код:
int main(int argc,char *argv[]){

  for (i=0;i<argc;i++)

 else   if(strcmp(argv[i],"-u")==0)//получение уникальных значений с применением опции -u

    sort_array_uni(array,array_type,array_len);//получение уникальных значений
   print_array_uni(array,array_type,array_len);
}
Подпрограмма нахождения уникальных чисел,искал я способом составления матрицы размерности NxN в каждой строчке,которой находится вводимый массив,дальше я проверял в каждой строчке на равенство одного элемента с остальными,если они были равны то ставил 0,если не равны то ставил 1,потом приравнял все элементы диагонали к 1,т.к. они равны, и находил строчку в которой все 1.
Вот оно неработающее чудо))
Код:
void sort_chars_uni(char*array,int n)
{
    char  array_uni[n][n];
    char temp;
    int i,j,k,r;
      for ( i=0;i<n;i++){
        for (j=0;j<n;j++)
         array_uni[j][i]=array[i];
         }
         for(j=0;j<n;j++)
         for(i=0;i<n;i++)
         if (i==j){
             temp=array_uni[i][j];
             array_uni[i][j]=array_uni[i][1];
             array_uni[i][1]=temp;
         }
         for (i=0;i<n;i++)
         for (j=0;j<n;j++)
         if (array[i]=array[j+1]){
             array_uni[i][j]=0;
         }else{
             array_uni[i][j]=1;
         }
         for (i=0;i<n;i++)
         if(i==j){
             array_uni[i][j]=1;
         }
         for(i=0;i<n;i++)
         for(j=0;j<n;j++)
         if(array_uni[i][j]==0){
             r=0;
         }else{
             k=k+1;
             array[k]=i;
         }
}
Понимаю,что неправильно в этом месте:
Код:
for(i=0;i<n;i++)
         for(j=0;j<n;j++)
         if(array_uni[i][j]==0){
             r=0;
         }else{
             k=k+1;
             array[k]=i;
         }
}
Код:
void  sort_array_uni(void* array, int array_type, int k)
{
    switch(array_type){
        case ALPHA:
         sort_chars_uni((char*)array,k);
         break;
   
    }
    return;
}
Ну и печать:
Код:
void  print_array_uni(void* array,int array_type,int k)
{
    int i;

    switch(array_type) {
        case ALPHA:
        for(i=0;i<k;i++)
        printf("%c ", ((char*)array)[i]);
    break;
    }
    return;
}
Кажется,что я тут еще намудрил с передачей то n то k..

Последний раз редактировалось Serjuk; 05.01.2010 в 13:39.
Serjuk вне форума Ответить с цитированием
Старый 05.01.2010, 17:01   #33
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

И еще неправильно наверное это то что я (array_len и n ) заменяю на к ?
Serjuk вне форума Ответить с цитированием
Старый 05.01.2010, 18:27   #34
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Может правильней будет так?
Код:
void sort_chars_uni(char*array,int n)
{
char array_unik[k];    
char  array_uni[n][n];
    
    int i,j,k,r;
      for ( i=0;i<n;i++){
        for (j=0;j<n;j++)
         array_uni[j][i]=array[i];
         }
         
      
         for (i=0;i<n;i++)
         for (j=0;j<n;j++)
         if (array[i]=array[j+1]){
             array_uni[i][j]=0;
         }else{
             array_uni[i][j]=1;
         }
         for (i=0;i<n;i++)
         if(i==j){
             array_uni[i][j]=1;
         }
         for(i=0;i<n;i++)
         for(j=0;j<n;j++)
         if(array_uni[i][j]==0){
            i=i+1;
         }else{
           j=j+1;
             if (j=n){
k=k+1;
array_unik[k]=i;
}
         }
}
Serjuk вне форума Ответить с цитированием
Старый 05.01.2010, 18:49   #35
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

блин печатает тоже самое,что и вводил,т.е. вводя "sadd" вместо "s a" выводит "sadd".Уважаемый,netrino,помоги те))
Serjuk вне форума Ответить с цитированием
Старый 05.01.2010, 20:23   #36
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

не понимаю почему не работает,уже все попробовал,ну не хочет и все..
Пожалуйста помогите.
Serjuk вне форума Ответить с цитированием
Старый 05.01.2010, 20:33   #37
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
int find_uni_chars(char* array, int n)
{
	char* temporary = (char*)malloc(n * sizeof(char));

	int i, j, k;
	int count;

	for( i = 0, k = 0; i < n; i++ ) {
		count = 0;
		for( j = 0; j < n; j++ )
			if(array[i] == array[j])
				count++;
		if(count == 1) {
			temporary[k] = array[i];
			k++;
		}
	}

	memcpy(array, temporary, k * sizeof(char));
	free(temporary);

	return k;
}
вот можно так сделать, переделаете потом под свои нужды.
Только нужно учитывать, что размер массива меняется, для этого и возвращается k(новый размер массива) и соответственно именно его и нужно передавать в ф-цию распечатки массива
netrino вне форума Ответить с цитированием
Старый 05.01.2010, 20:54   #38
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

т.е.
Код:
void  sort_array_uni(void* array, int array_type, int n)
{
    switch(array_type){
        case ALPHA:
         find_uni_chars((char*)array,n); 
         break;
   
    }
    return;
}
функция распечатки:
Код:
void  print_array_uni(void* array,int array_type,int k)
{
    int i;

    switch(array_type) {
        case ALPHA:
        for(i=0;i<k;i++)
        printf("%c ", ((char*)array)[i]);
    break;
    }
    return;
}
то что над маином:
Код:
void  sort_array_uni(void* array, int array_type, int n)
void  print_array_uni(void* array,int array_type,int k);
Сам маин:
Код:
int main(int argc,char *argv[]){

  for (i=0;i<argc;i++)
...
 else   if(strcmp(argv[i],"-u")==0)//получение уникальных значений с применением опции -u

    sort_array_uni(array,array_type,array_len);//получение уникальных значений
   print_array_uni(array,array_type,array_len);
}
  if(argc>1 && argv[argc-1][0] != '-')
     output = fopen(argv[argc-1], "w");
    if(output==0)
    output=stdout;
....
Теперь набирая sadd она мне его 3 раза повторяет -"s a d d s a d d sadd"
Serjuk вне форума Ответить с цитированием
Старый 05.01.2010, 21:09   #39
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Не нужна отдельная процедура распечатки, используйте всё ту же.
Если использовать ту функцию, которую я привёл в качестве примера, то вызов её может выглядеть так
Код:
  for (i=0;i<argc;i++)
...
 else   if(strcmp(argv[i],"-u")==0)//получение уникальных значений с применением опции -u

    array_len = sort_array_uni(array,array_type,array_len);//получение уникальных значений
print_array(output_stream, array, array_type, array_len); // оставляем как было

...
int  sort_array_uni(void* array, int array_type, int n)
{
    int new_len = 0;
    switch(array_type){
        case ALPHA:
         new_len = find_uni_chars((char*)array,n); 
         break;
   
    }
    return new_len;
}
как-то так
netrino вне форума Ответить с цитированием
Старый 05.01.2010, 21:21   #40
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

компилируется , запускается через командную строку - вбиваю массив жму ентер чтобы оно мне выдало уникальные элементы :выдает ошибку - типо приложение будет закрыто с отправлением отчета)
Serjuk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать массив от переменной длины без mAlloc? TwiX Общие вопросы C/C++ 5 27.10.2009 16:50
функция для подсчета количества символов в строке типа std::string a Артэс Общие вопросы C/C++ 3 06.07.2009 17:43
считать данные из переменной типа String 1o1man Помощь студентам 13 17.04.2009 22:34
Выравнивание высоты таблицы для разного разрешения Svetix HTML и CSS 10 03.04.2009 17:00
Определение типа переменной Игорь007 Общие вопросы C/C++ 7 10.01.2009 13:01