Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Одномерный массив - разминка для мозгов 
V
    Опции темы
Gtar
Дата 14.1.2008, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.1.2008

Репутация: нет
Всего: нет



Есть следующая задачка:
"Используйте одномерный массив для решения. Считать 100 чисел, каждый из которых между 1 и 10 включительно(подразумевается использование только int). После считывания каждого числа, вывести его на экран только если он не повторяет уже считанное и показанное число. Используйте наименьший возможный массив для решения."

Есть решение, но не уверен что оно оптимальное... Возможно ли использование массива меньше 10-ти элементов?? (естественно не используя 10 int )
Код

int arr[10]={0,0,0,0,0,0,0,0,0,0};
int num=0,i=0,j=0,k=0;
bool key;
  /* считывание 100-та чисел */
 for(i=0;i<100;i++)
 {
  cout<<"Enter number #"<<i+1<<" ";                 
   cin>>num;
   key=false;
   j=0;

   /* проверка былоли уже такое число*/
   while(j<10 && key==false)
       if (arr[j]==num)
           key=true; 
       else
           j++;

   /* если не было */
   if (key==false)
      {
        cout<<num<<endl;
        arr[k]=num;
        k++;
      }
}

PM MAIL   Вверх
Daevaorn
Дата 14.1.2008, 21:03 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Размер меньше не нужен, а вот алгоритм изменить стоит. Зачем вложенная итерация?
Код

#define COUNT 100

int main()
{
    int arr[10]={0,0,0,0,0,0,0,0,0,0};
    int num=0,
        i=0;

    for(i=0;i<COUNT;i++)
    {
        cout<<"Enter number #"<<i+1<<" "; 
        cin>>num;
        
        if( num > 0 && num < 11 )
            if( arr[ num - 1] != 1 )
            {
                cout << num << endl;
                arr[ num - 1 ]  = 1;
            }
    }
}


Это сообщение отредактировал(а) Daevaorn - 14.1.2008, 21:10
PM MAIL WWW   Вверх
Gtar
Дата 15.1.2008, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.1.2008

Репутация: нет
Всего: нет



Действительно, так намного элегантнее. Спасибо smile 


Это сообщение отредактировал(а) Gtar - 17.1.2008, 01:42
PM MAIL   Вверх
codelord
Дата 17.1.2008, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



Код

#include <iostream>
#include <set>
const int COUNT = 100;
using namespace std;
 int main( )
{
 set< int > values;
 for( int i = 0; i < COUNT; ++i ) {
  int val;
  cin >> val;
  if( val < 1 || val > 10 ) continue;
  if( values.find( val ) != values.end() ) {
    cout << "old value" << endl;
   }
   else values.insert( val );
 }
}


Код

#include <iostream>
const int COUNT = 100;
using namespace std;
 int main( )
{
 bool m[10] = {false};
 for( int i = 0; i < COUNT; ++i ) {
      int val;
      cin >> val;
      if( val < 1 || val > 10 ) continue;
      if( m[--val] ) cout << "old value" << endl;
      m[val] = true;
 }
 return 0;
}


Это сообщение отредактировал(а) codelord - 17.1.2008, 23:12


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
susanin
Дата 18.1.2008, 03:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 7



Gtar, рискну предположить, что вы читаете книгу Дейтелов " как программировать на с++"..=) просто недавно сам делал такую же задачу... и реализовал ее следующим образом..
Код

int main()
{
    setlocale(LC_ALL,"rus");
    const int size=10;
    int Array[size]={0};
    int i=0;
    for(i=1;i<size;i++)
    {
        cin>>Array[i];
            if(search(Array,Array[i],i-1)==false)
                cout<<Array[i]<<endl;
    }
    return 0;
}
bool search(int Array[],int key, int size)
{
    int count=0;
    for(int i=0;i<=size;i++)
    {
    if(Array[i]==key)
            count++;
    }
    return count!=0;
}


PM MAIL   Вверх
Gtar
Дата 18.1.2008, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.1.2008

Репутация: нет
Всего: нет



Цитата(susanin @  18.1.2008,  03:15 Найти цитируемый пост)
у предположить, что вы читаете книгу Дейтелов " как программировать на с++"..=) просто недавно сам делал такую же задачу... и реализовал ее следующим образом..


И не только её =) ... еще Nell Dale "Programming and Problem Solving with C++" ну и  референсы от Шилдта.
Вообще то я книги по С++ стал читать только месяц назад, так что  думаю что еще будет много вопросов в этом разделе, надеюсь что не совсем нубовских.
Решение работающее, но вот наиболее изящно imho все же использовать bool в этом случае, по примеру от codelord.
Есть еще вариант использовать биты "массива" из только одного элемента как ключи ( по типу bool). Только это будет больше задача для асма,  а для меня  на плюсах это пока  ранновато, может через пару недель  smile 


Это сообщение отредактировал(а) Gtar - 18.1.2008, 08:41
PM MAIL   Вверх
susanin
Дата 18.1.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 7



Gtar, я посмотрел примеры которые дал codelord. мне кажется у негго сделано не совсем то что требовалос...как я понял по заданию требовалось, чтобы пользователь вводил число, и если это число не повторяет ранее введенные числа, то это число выводится на экран, в противном случае ничего не происходит... у codelord же сделано, что если число повторяет какое то из ранее введенных  чисел, то просто выводится сообщение что это число старое...но на экран кроме этого больше ничего не выводится...это сугубо мое мнение...обидеть никого не хотел если что..=)
PM MAIL   Вверх
codelord
Дата 18.1.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



Цитата(susanin @  18.1.2008,  09:37 Найти цитируемый пост)
Gtar, я посмотрел примеры которые дал codelord. мне кажется у негго сделано не совсем то что требовалос...как я понял по заданию требовалось, чтобы пользователь вводил число, и если это число не повторяет ранее введенные числа, то это число выводится на экран, в противном случае ничего не происходит... у codelord же сделано, что если число повторяет какое то из ранее введенных  чисел, то просто выводится сообщение что это число старое...но на экран кроме этого больше ничего не выводится...это сугубо мое мнение...обидеть никого не хотел если что..=) 

ну обидел   smile 
вместо old value подставить val или val+1 ( в зависимости от примера ) не очень сложно?   smile 



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Gtar
Дата 23.1.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.1.2008

Репутация: нет
Всего: нет



Цитата(susanin @ 18.1.2008,  13:37)
Gtar, я посмотрел примеры которые дал codelord. мне кажется у негго сделано не совсем то что требовалос...как я понял по заданию требовалось, чтобы пользователь вводил число, и если это число не повторяет ранее введенные числа, то это число выводится на экран, в противном случае ничего не происходит... у codelord же сделано, что если число повторяет какое то из ранее введенных  чисел, то просто выводится сообщение что это число старое...но на экран кроме этого больше ничего не выводится...это сугубо мое мнение...обидеть никого не хотел если что..=)

Алгоритм есть сила! А код чуть чуть подправить можно есть что =)
Думаю что тема закрыта, всем спасибо  smile 
PM MAIL   Вверх
jonie
Дата 23.1.2008, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Код

setlocale(LC_ALL,"rus");
жесть, иногда всеже стоит читать доки ...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
JackYF
Дата 23.1.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(jonie @  23.1.2008,  20:46 Найти цитируемый пост)
жесть, иногда всеже стоит читать доки ... 

ты темой не промахнулся?  smile 


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Lycifer
Дата 24.1.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



Код

#include<iostream>
using namespace std;
 int main()
{
int x,*Array,number,symma=0;
//cout<<""<<endl;
cin>>x;
Array=new int[x];
for(int i=0; i<x; i++){
cin>>Array[i];
}
for(i=0; i<x; i++){  //for(int i=0; i<x; i++){ зависит от компилятора
if(Array[i]==0)
number=i;
break;
}

for(i=number; i<x; i++){  //for(int number=0; i<x; i++){ зависит от компилятора
symma+=SQRT(Array[i]*Array[i]);
}
cout<<"Symma = "<<Symma<<endl;

delete []Array;
return0;
}


не компилил!!!!!!!!!!


M
JackYF
Не забываем пользоваться кнопкой "Код".


Это сообщение отредактировал(а) JackYF - 24.1.2008, 10:41
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0536 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.