Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Помогите сделать задачки на СИ++


Автор: Goofy 20.10.2005, 17:41
Добрый день, помогите, пожалуйста, сделать программы на СИ++ по теме одномерный массив, сам я вообще не понимаю как делать, а зачет сдавать нужно, хоть кто сколько сможет, плизз...Заранее спасибо.
http://img463.imageshack.us/my.php?image=20033tk.jpg вот ссылка на 5 задач!

Автор: Enya 20.10.2005, 17:57
Goofy, не совсем поняла задачу №1, откуда взять упорядоченный масив? Что значит дан???
И это, ещё тебе как нужно - ввод и вывод данных с клавы или из файлов?

З.Ы. ССылочку не убирай, я сама попробую решить в ближайшие 1-2 дня. У меня тоже перездача эсзаменов через недёлю...
Так что не парься..

Автор: Goofy 20.10.2005, 18:00
Спасибо, что откликнулась smile Насчет первой, то не знаю, написать наверное...
Ввод данных во всех задачах только с клавы!

Автор: S.A.P. 20.10.2005, 18:05
STL ом пользоваться можно? smile

Автор: Goofy 20.10.2005, 18:06
Я говорю, что почти не знаю СИ, да в общем то вообще не знаю, так как я на втором курсе, то как можно проще напишите... smile

Автор: Enya 20.10.2005, 18:22
Goofy, тебе срочняк?
Если подождать можно, то я кое что сделаю..

Автор: Goofy 20.10.2005, 18:25
Желательно бы к завтраму... smile

Автор: LPBOY 20.10.2005, 19:19
Вот решение в лоб 5-й задачи.
Код

#include <iostream>
#include <cstddef>

using namespace std;

bool is_equal(int a1[], int a2[], size_t size)
{
    for(size_t i=0; i<size; ++i)
    {
        if(a1[i] != a2[i]) return false;
    }
    return true;
}

size_t occur(int a1[], size_t sz1, int a2[], size_t sz2)//a1 должен быть > чем a2!
{
    size_t cnt = 0;
    for(size_t i=0; i<sz1; ++i)
        cnt += is_equal(a1 + i, a2, sz2);
    return cnt;
}

#define SIZE(x) sizeof(x)/sizeof(*x)

int _tmain(int argc, _TCHAR* argv[])
{
    int M1[] = {1, 2, 3, 4, 8, 4, 1, 2, 3, 4, 1, 2, 1, 2, 3, 7};
    int M2[] = {1, 2, 3};
    cout << occur(M1, SIZE(M1), M2, SIZE(M2)) << endl;//количество вхождений M2 в M1
    return 0;
}

Надеюсь нигде не ошибся smile

Автор: Vendigo 20.10.2005, 20:06
А вот решение первой.
Сам на втором курсе smile
Код

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
#include <iostream>
using namespace std;

int main()
{   int my[10] = {199, 34, 15, 13, 9, 7, 4, 2, 1, 0,};
                //объявляем массив целочисленных значений
                //и записываем в него случайные числа по убыванию
    int n, i, j;

    cin >> n;    // получаем значение переменной n

    if (n >= my[0]) i = 0; //если n больше первого эл. массива то индекс = 0
        else for(i = 0; i < 10; i++)
                if(n >= my[i] && n < my[i-1]) break; //нашли индекс и выходим из цикла

    for(j = 8; j >= i; j--) //сдвигаем все элементы расположенные после номера
        my[j+1] = my[j];    //под которым встанет наше число
    my[i] = n;              //в освободившееся место помещаем наше число

    for(i = 0; i < 10; i++) //выводим результаты на экран
        cout << my[i] << "\n";
    cin >> i;

    return 0;
}

Автор: Goofy 20.10.2005, 20:28
Спасибо)) Осталось только 3 штуки)

Цитата
Сам на втором курсе


Я просто увлекаюсь веб програмированием)

Автор: S.A.P. 20.10.2005, 21:09
Я первую по другому немного сделал
Код

#include <iostream>
#include <conio.h>

using namespace std;


int main()
{
    const int arr_len = 10;
    int arr[arr_len]={9,8,7,6,5,4,3,2,1,0};
    int num;
    cin >> num;
    for ( int i = arr_len-1 ; i >=0 && num > arr[i]; i-- )
    {
        arr[i+1] = arr[i];
        arr[i] = num;
    }
    for (int i = 0; i < arr_len; i++)
        cout << arr[i] << endl;
    getch();    
}


А вот сумасшедшее решение 3-й задачи. Кто - нибудь знает, как ее решить нормально?

Код

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    const int arr_len = 9;
    int arr[arr_len]={5,2,7,8,4,6,1,8,5}; 
    
    int num1 = INT_MAX, num2 = INT_MAX, num3 = INT_MAX;
    int *temp;    
    
    for ( int i = 0; i < arr_len; i++ )
    {
        temp = (num1 > num2 ? ( num1 > num3 ? &num1 : &num3 ) : 
                              ( num2 > num3 ? &num2 : &num3 ));
        if ( *temp > arr[i] ) *temp = arr[i];
    }
    
    cout << num1 + num2 + num3 << endl;
    getch();    
}

Автор: bel_nikita 21.10.2005, 00:56
Может пригодится поиск минимумов и максимумов с возвращением позиции:
Код
int FindMin(int& OUT iMin, int* IN p, int IN len)
{
  iMin = *p;
  for ( int iPos = 0, i = 0 ; i < len; ++i )
    if ( p[i] < iMin ) iMin = p[i], iPos = i;
  return iPos;
}

int FindMax(int& OUT iMax, int* IN p, int IN len)
{
  iMax = *p;
  for ( int iPos = 0, i = 0 ; i < len; ++i )
    if ( p[i] > iMax ) iMax = p[i], iPos = i;
  return iPos;
}


Если правильно понял, то третья такая:
Код

#include <stdio.h>
#include <limits.h>

int FindMin(int& OUT iMin, int* IN p, int IN len)
{
  iMin = *p;
  for ( int iPos = 0, i = 0 ; i < len; ++i )
    if ( p[i] < iMin ) iMin = p[i], iPos = i;
  return iPos;
}

int main(int argc, char* argv[])
{
  int Array[5] = { 4,3,8,2,4 };

  int iMin = 0;
  int iMax = 0;
  int iPosMin = 0;
  int Summa = 0;

  for (int i = 0; i < 3; ++i )
  {
    iPosMin = FindMin(iMin, Array, sizeof(Array)/sizeof(Array[0]) );
    Array[ iPosMin ] = INT_MAX;
    Summa += iMin;
  }
  printf("\nsumma = %d",Summa);

  return 0; 
}

Автор: Goofy 21.10.2005, 10:27
Спасибо всем, осталось только 2 и 4.

Автор: Romikgy 21.10.2005, 11:50
Код

void zad_na_pered(int * m, // Сам массив
int len) //длинна массива
{
int tmp;

for (int i=0;i<=(len>>1);i++)
{
tmp=m[i];
m[i]=m[len-i-1];
m[len-i-1]=tmp;
}

}

Вроде так для 4 задания

Автор: Romikgy 21.10.2005, 12:13
Код

void v_odin(int *m1, // массив первый
int *m2,// массив второй
int *m3,//массив исходящих данных, должен быть длинной len1+len2
int len1,//длинна первого массива
int len2)//длинна второго массива
// копируем массив 1 в исходящий массив
int i;
for (i=0;i<len1;i++) m3[i]=m1[i];
// добавляем массив 2 в третий массив
for (i=0;i<len2;i++) m3[i+len1]=m2[i];
// а терь сортируем что получилось 
int tmp,d=1;
while (d<>0)
{
d=0;
for (i=0;i<len1+len2-1;i++)
if (m3[i]<m3[i+1]) {tmp=m3[i];m3[i]=m3[i+1];m3[i+1]=tmp;d++;}

}

Вроде так для 2 задания.

ЗЫ но я не проверял, если захошь сам проверишь smile

Автор: S.A.P. 21.10.2005, 20:57
Goofy ну что, всем по пиву? smile

Автор: Goofy 26.10.2005, 14:59
Народ, а можете 1 решить правильно? А то которая здесь не работает!

Автор: Goofy 27.10.2005, 15:54
Никто не может помочь((??

Автор: S.A.P. 27.10.2005, 18:03
Цитата(Goofy @ 26.10.2005, 14:59)
Народ, а можете 1 решить правильно? А то которая здесь не работает!
у тебя здесь как минимум 2 решения для первой задачи. Какое не работает?

Автор: kolyan 16.12.2007, 18:55
Здравствуйте!У меня проблема с решением задачки: Ввести последовательность из 25 нечётных чисел с клавиатуры. Найти наибольшее число из введенных элементов. Решить необходимо с помощью printf в C++! Работа нужна срочно, люди отзовитесь, надеюсь труда не составит! Заранее спасибо!Сам я чайник ничего не понимаю, если можно прокоментируйте решение, что там чего делает!

Автор: zkv 16.12.2007, 19:04
kolyan, прочитай правила форума. Создай свою тему. Тема закрыта.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)