Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/26: Рейтинг темы: голосов - 26, средняя оценка - 4.50
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90

Группировка случайных символов согласно ASCii

17.12.2011, 20:27. Показов 5705. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Строка задается в
коде программы в виде случайной последовательности букв и цифр. Пользоваться дополнительными
массивами нельзя.

Замечание
Сортировка в данной задаче неприменима ввиду ее трудоемкости. Нужно
использовать группировку элементов массива.

то что удалось написать:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>                      
#include <stdlib.h>
#include <time.h>
 
    
    char mas()
        
{  
     switch( rand ()  % 3 )
  {
   case 0:
      return rand() % 25 + 'a';
   case 1:
      return rand() % 25 + 'A';
   case 2:
      return rand() % 10 + '0';
  }
}
    int main() 
{
    int i;
    char arr [6];
    srand( time(0) );
    
    for( i = 0; i < 6; i++ ){
 
        arr [i] = mas();
        putchar (arr[i]);
 }
    return 0;
осталось сгруппировать буквы и цифры в массиве...несколько дней уже думаю. пробывал if.while do не выходит. Народ если есть идеи или советы по поводу программы делитесь. Я готов побороться еще но пока в тупике-требуется подкрепление.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2011, 20:27
Ответы с готовыми решениями:

Как использовать charsToTrim с ASCII кодом? или как удалить множество символов из строки используя код ASCII
Как использовать charsToTrim с ASCII кодом? или как удалить множество символов из строки используя код ASCII

Вывод на экран таблицы ASCII символов в рамке из символов псевдографики
Возникла проблема. Есть код:я сделал чтобы он выводил ascii символы 16х16(видеобуффере),но у меня не получается заключить его в рамку как...

Вывод на экран таблицы ASCII символов в рамке из символов псевдографики
Нужно написать программу для вывода таблицы ASCII с рамкой без использования констант для рисования. Разбираюсь плохо, но надеюсь на вашу...

28
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
25.12.2011, 13:54  [ТС]
Студворк — интернет-сервис помощи студентам
у меня вопрос как избавится от мусора? без избавления от символа?
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
25.12.2011, 14:00
Цитата Сообщение от VN Посмотреть сообщение
/* для уборки муссора но тогда убирается и один символ*/
Иногда? На выходе всегда будет N - 1 элементов, потому, что в последний вы заносите '\0'. Причем заносите на каждой итерации цикла. Как вариант увеличить на 1 размер массива.

Добавлено через 1 минуту
Ну и цикл поправить соответственно

Добавлено через 52 секунды
Или посимвольно выводить
1
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
25.12.2011, 14:03  [ТС]
"Как вариант увеличить на 1 размер массива."

нет это тоже не решение.

А что касается того что это не решение задачи...дело в том что преподаваетель дважды обьяснял нам как решать эту задачу...и говорил что генерация случайных символов происходит должна с двух сторон пока не встретятся после чего должен происходить обмен....что ж по пробую сделать так что бы сначачала заполнялся массив полностью а потом уже происходил обмен...а не изначально

да цикл поправил:
....}
arr[N-1] = '\0';

"Или посимвольно выводить"

это решение
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
25.12.2011, 15:40
Цитата Сообщение от VN Посмотреть сообщение
...она делается гораздо проще чем вы здесь описали
вам давали примеры решения, а не решение. И вполне достойные. Как организовать строку это уже ваше дело, хотите - считывайте из файла, хотите - из stdin, хотите - генерируйте случайным образом
Цитата Сообщение от VN Посмотреть сообщение
...и говорил что генерация случайных символов происходит должна с двух сторон пока не встретятся после чего должен происходить обмен
это как раз то что реализовано в моем примере, только на примере литерала, а не случайной генерации. имхо, то что вы показали не есть решение. Ваша основная задача сводится к тому чтобы найти и обменять символы, а не к тому чтобы сгенерировать их случайным образом. Рандомная строка - это второстепенная задача.

Добавлено через 3 минуты
З.Ы. то что вы называется мусором в стандарте описано как управляющий символ завершения массива чаров ( проще говоря конец строки ). Без этого "мусора" не долго споймать выход программы за пределы отведенной для нее области памяти (segmentation fault), если не осознавать четко что именно ты делаешь.
0
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
27.12.2011, 11:34  [ТС]
Отцы! оцените!

У меня два варианта:
первый
фишка в том что группировка происходит еще при формировании массива.Сравниваются два символа буква улетает вначало цифра вконец:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
# define N 10
int main()
{
 
 
int i=0,j=N,s=0,w; char  arr[N],temp; 
 
    srand(time(NULL)|clock());
    while (i<j){
 
     arr[i]=(rand()%2)?rand() % 10 + '0':rand() % 26 + 'a';                                                                                                                          
     if(arr[i]>='a'&&arr[i]<='z')                   
               i++;
     else{ 
      temp=arr[i];arr[j-1]=temp;
       j--;
    }
    }
                  for(w=0;w<N;w++)
                        putchar(arr[w]);
     
            return 0;
}
второй вариант эфолюция первого(но первый мне нравится больше):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
# define N 10
int main()
{
 
 
int i=0,j=N,s=0; char  arr[N],temp; 
   srand(time(NULL)|clock());     
    while (s<N){ /*генерация случайного массива*/
     s++;
     
                 arr[s]=(rand()%2)?rand() % 10 + '0':rand() % 26 + 'a';
    
    }
     while(i<j){ /*его группировка*/
     if(arr[i]>='a'&&arr[i]<='z')  
                i++;
     else{ 
       temp=arr[i];arr[i]=arr[j-1];arr[j-1]=temp;
         j--;
     }
      
   }
          for(int w=0;w<N;w++)
                          putchar(arr[w]);
     
            return 0;
}
не знаю какой из вариантов считать более правильным по мне так первый... если по тому как в задаче получается вроде как второй. Но в любом случае программа проще чем казалась на первый взгляд.

З.ы.Я вообще начинаю считать что код должен быть макисмально простым и понятным.
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2011, 11:49
Цитата Сообщение от VN Посмотреть сообщение
Я вообще начинаю считать что код должен быть макисмально простым и понятным.
Поправьте табуляцию и продолжайте так считать.
У вас оба варианта обладают одним свойством: они нарушают последовательность.
Bash
1
2
3
soon@bt:~/Desktop$ ./main
f420156v6e
fve6651024
Я уже говорил, если не важно, как будут располагаться элементы в "отсортированном" массиве - это одно, а если важно, то ваш код не подходит. Ни один.
0
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
27.12.2011, 11:52  [ТС]
обнаружен косячок ...во втором варианте

while (s<N) /*генерация случайного массива*/
{
arr[s]=(rand()%2)?rand() % 10 + '0':rand() % 26 + 'a';
s++;
} так нормально

Добавлено через 2 минуты
Да название темы я придумал не правильно....препод и говорил что не важно как будут распологаться символы ..их не надо сортировать согласно ASCII.
Так что извините что в заблуждение вас ввел
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
27.12.2011, 13:56
Цитата Сообщение от VN Посмотреть сообщение
C
1
2
3
4
         else{ 
           temp=arr[i];arr[i]=arr[j-1];arr[j-1]=temp;
             j--;
         }
C
1
2
else
    arr[ j-- ] = arr[ i ];
1
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
27.12.2011, 14:21  [ТС]
C
1
2
else
    arr[ j-- ] = arr[ i ];
ругается на стэк... и говорит что arr corrupted
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.12.2011, 14:21

Вывод на экран таблицы ASCII символов в рамке из символов псевдографики
Помогите пожалуйста

Почему множество ASCII символов образует алфавит, состоящий именно из 256 символов?
Почему множество ASCII-символов образует алфавит, состоящий именно из 256 символов? Сколько вопросов надо задать, чтобы отгадать один из...

Cоздать символьный массив из случайных букв таблицы ASCII
Кто знает как создать символьный массив из букв используя таблицу ASCII с 65-90 и 97-122,рандомно, чтобы буквы были и большие и...

Таблица ASCII символов
Идея этой программки возникла, когда я судорожно вспоминал код символа из досовской псевдографики, помоему, для черточки для таблиц. Может...

Таблица ASCII символов
подскажите, выводится таблица в символом квадрата  что не так в коде var i: Integer; begin StringGrid1.RowCount := 257; ...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru