четверг, 24 декабря 2009 г.

вывести квадраты и кубы 10 чисел следущей последовательности: 1, 2, 4, 7, 11, 16...

{вывести квадраты и кубы 10 чисел следущей последовательности: 1, 2, 4, 7, 11, 16...}
const
   N = 10;
var
   i: integer;
   m: integer;
begin
   m:=1;
   for i:=1 to N do begin
      writeln(m:3, '=> ^2=', m*m, ', ^3=', m*m*m);
      m:=m+i;
   end;
   writeln;
end.

вывод
1=> ^2=1, ^3=1
  2=> ^2=4, ^3=8
  4=> ^2=16, ^3=64
  7=> ^2=49, ^3=343
 11=> ^2=121, ^3=1331
 16=> ^2=256, ^3=4096
 22=> ^2=484, ^3=10648
 29=> ^2=841, ^3=24389
 37=> ^2=1369, ^3=50653
 46=> ^2=2116, ^3=97336

выделить множество чисел кратных заданому

{Из множества целых чисел 1..20 выделить множество чисел, делящихся на 2 или на 3 без остатка}
const
   N = 20;
var
   a: array [1..N] of integer;
   i: integer;
begin
   writeln('инициализация массива случайными числами');
   for i:=1 to N do a[i]:=random(9)+1;

   writeln('вывод начальных данных');
   for i:=1 to N do write(a[i]:2);
   writeln;
   
   writeln('числа кратные 2: ');
   for i:=1 to N do if (a[i] mod 2) = 0 then write(a[i]:2);
   writeln;
   
   writeln('числа кратные 3: ');
   for i:=1 to N do if (a[i] mod 3) = 0 then write(a[i]:2);
   writeln;

   writeln('числа кратные 2 и 3: ');
   for i:=1 to N do if ((a[i] mod 2) = 0) and ((a[i] mod 3 = 0)) then write(a[i]:3);
   writeln;
end.

вывод:
инициализация массива случайными числами
вывод начальных данных
80 90 85 12 95 45 66 39  3 80 66 91 94 42 27 95 25 25 78 26
числа кратные 2:
80 90 12 66 80 66 94 42 78 26
числа кратные 3:
90 12 45 66 39  3 66 42 27 78
числа кратные 2 и 3: 
90 12 66 66 42 78

понедельник, 21 декабря 2009 г.

посчитать суммы индексов отрицательных элементов массива

дан массив g1, ..g10 .
Построить новый массив, содержащий номера отрицательных g[ i ] . Вычислить сумму этих номеров.

const
    N = 10;
var
    i: integer;
    g: array [1..N] of integer;
    b: array [1..N] of integer;
    count: integer;
    summa: integer;
begin
    writeln('инициализируем массив случайными числами от -50 до 50');
    for i:=1 to N do g[i]:=random(100)-50;

    writeln('начальный массив');
    for i:=1 to N do write(g[i]:4);
    writeln;

    count:=0;
    for i:=1 to N do if g[i] < 0 then begin
        inc(count);
        b[count]:=i;
    end;

    writeln('массив индексов элементов с отрицательными значениями');
    for i:=1 to count do write(b[i]:3);
    writeln;

    summa:=0;
    for i:=1 to count do summa:=summa+b[i];

    writeln('сумма индексов отрицательных элеметов = ', summa);
end.

вывод:
инициализируем массив случайными числами от -50 до 50
начальный массив
 -16 -19  -1  12  -3  40  49 -37 -12  10
массив индексов элементов с отрицательными значениями
  1  2  3  5  8  9
сумма индексов отрицательных элеметов = 28

сортировка методом вставки и пузырька

Отсортировать половину массива размером 20 методом вставок, а вторую половину – методом пузырьков.

#include <iostream>
#include <cstdlib>

using namespace std;

const int N = 20;

int main(int argc, char *argv[])
{
    int a[20];

    cout << "старт генератора случайных чисел" << endl;
    srand(time(0));

    cout << "заполняем массив случайными числами" << endl;
    for (int i = 0; i < N; i++) a[i] = rand() % 100;

    cout << "до сортировки" << endl;
    for (int i = 0; i < N; i++) cout << a[i] << " ";
    cout << endl;

    cout << "метод вставки" << endl;
    for (int i = 1; i < N/2; i++)
    {
        int j = i;
        while (a[j] < a[j-1])
        {
            int temp = a[j];
            a[j] = a[j-1];
            a[j-1] = temp;
            j = j - 1;
        }
    }

    cout << "метод пузырька" << endl;
    for (int i = 0; i < N/2; i++)
    {
        for (int j = N/2; j < N - i - 1; j++)
        {
            if (a[j] > a[j+1])
            {
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }

    cout << "после после сортировки" << endl;
    for (int i = 0; i < N; i++) cout << a[i] << " ";
    cout << endl;


    return 0;
}

вывод:
старт генератора случайных чисел
заполняем массив случайными числами
до сортировки
42 50 64 17 56 22 70 75 51 97 10 54 92 37 51 58 71 33 31 13 
метод вставки
метод пузырька
после после сортировки
17 22 42 50 51 56 64 70 75 97 10 13 31 33 37 51 54 58 71 92

суббота, 19 декабря 2009 г.

количество делителей

Вот задание: Количество Делителей. Будем называть количество делителей числа т его красотой. Например, карсота числа 12=6.
Требуется написать программу, которая по числу k(1<=k<=10^9) найдётчисло с максимальной красотой, не превышающее k. Вот напишите код на паскале если не сложно
function krasota(n: integer): integer;
var
   i: integer;
   k: integer;
begin
   k:=0;
   for i:=1 to n do begin
      if (n mod i) = 0 then begin
         inc(k);
      end;
   end;
   krasota:=k;
end;

var
   m: integer;
   n: integer;
   max_n: integer;
   max_krasota: integer;
   k: integer;
begin
   write('считать до: ');
   read(m);

   max_n:=-1;
   max_krasota:=0;

   for n:=1 to m do begin
      k:=krasota(n);
      if k > max_krasota then begin
          max_krasota:=k;
          max_n:=n;
      end;
   end;

   writeln('число с максимальной красотой ', max_n, ' = ', max_krasota);
end.

умышленно не написал от 1 до 10^9 - это будет очень долго считать, но просто чтобы можно было проверить правильность работы - вводим 10000

вывод
искать до: 10000
число с максимальной красотой 7560 = 64

пятница, 18 декабря 2009 г.

В целочисленном массиве определить количество и координаты перемен знака

#include <stdio.h>

#define N 10

int main(int argc, char *argv[])
{
    int m[N];
    int i;
    int change_count = 0;

    //инициализируем генератор случайных чисел
    srand(time(0));

    //инициализируем массив случайными числами от -5 до 5
    for (i = 0; i < N; i++) m[i] = rand() % 10 - 5;

    //выводим на экран исходный массив
    for (i = 0; i < N; i++) printf("%3d", m[i]);
    printf("\n");

    for (i = 1; i < N; i++)
    {
        if ((m[i-1] > 0 && m[i] < 0)
            || (m[i-1] < 0 && m[i] > 0)
            || (m[i-1] == 0 && m[i] != 0)
            || (m[i-1] != 0 && m[i] == 0))
        {
            printf("в позиции %d смена знака\n", i);
            change_count++;
        }
    }

    printf("количество изменений: %d\n", change_count);    
    

    return 0;
}

вывод:
2 -5 -4  2  4  0  2  2  0 -1
в позиции 1 смена знака
в позиции 3 смена знака
в позиции 5 смена знака
в позиции 6 смена знака
в позиции 8 смена знака
в позиции 9 смена знака
количество изменений: 6

четверг, 17 декабря 2009 г.

бегущая строка

#include <stdio.h>
#include <time.h>

int main(int argc, char *argv[])
{
 int i;
 int j = 0;
 char s[] = "бегущая строка ";

 while (j++ < 1000)
 {
  for (i = 0; i < sizeof(s); i++)
   printf("%c", s[(i+j) % sizeof(s)]);

  printf("\r");

  usleep(100000);
 }

 return 0;
}

нахождение самого длинного слова в строке

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main(int argc, char *argv[])
{
 cout << "введите строку: ";
 string s;
 getline(cin, s);

 int max_length = 0;
 string max_word;

 istringstream iss(s);
 while (iss >> s)
 {
  if (max_length < s.length())
  {
   max_length = s.length();
   max_word = s;
  }
 }

 cout << "слово '" << max_word
  << "' имеет наибольшую длину = "
  << max_length << endl;

 return 0;
}

вывод:
введите строку: hello world my friend
слово 'friend' имеет наибольшую длину = 6

нужно вывести таблицу встречаемости символов

нужно вывести таблицу встречаемости символов

#include <iostream>
#include <string>
#include <map>

using namespace std;

typedef map<char, int> chat_int_t;

int main(int argc, char *argv[]) {
 chat_int_t char_int;
 cout << "введите строку: ";
 string s;
 getline(cin, s);

 for (int i=0; i<s.length(); i++)
  char_int[s.at(i)]++;

 cout << "статистика: " << endl;
 for (chat_int_t::iterator it = char_int.begin(); it != char_int.end(); ++it)
  cout << "'"<< it->first << "': " << it->second << endl;

 return 0;
}

вывод:
введите строку: 12345 ввв а а  ыыы
статистика:
'а': 2
'в': 3
'ы': 3
' ': 5
'1': 1
'2': 1
'3': 1
'4': 1
'5': 1

среда, 16 декабря 2009 г.

найти первую упорядоченную по возрастанию строку в матрице

#include <iostream>

using namespace std;

#define X 6
#define Y 3

int main(int argc, char *argv[]) {
 int a[Y][X] = {
  {1,2,5,4,2,3},
  {1,1,2,3,5,8},
  {2,6,1,4,8,2}
 };

 for (int y = 0; y < Y; y++) {
  bool sorted = true;
  int temp = a[y][0];
  for (int x = 1; x < X; x++) {
   if (temp > a[y][x]) {
    sorted = false;
    break;
   }

   temp = a[y][x];
  }

  if (sorted) {
   cout << "строка " << y << " отсортирована по возрастанию" << endl;
   for (int x = 0; x < X; x++) cout << a[y][x] << " ";
   cout << endl;
   return 1;
  }
 }

 cout << "все строки неотсортированые" << endl;

 return 0;
}

вывод:
строка 1 отсортирована по возрастанию
1 1 2 3 5 8

вторник, 15 декабря 2009 г.

перевод десятичного целого положительного числа в сиситему счисления с основанием 7

Вот сама задача, ее нада сделать)))...
Написать программу перевода десятичного целого положительного числа в сиситему счисления с основанием 7.
СПАСИБО ЗАРАНЕЕ!!!!


const
   N = 7; {поменяйте на нужное число}
var
   x: integer;
   ostatok: integer;
   s: string;
   c: string;
begin
   s:='';
   write('введите десятичное число: ');
   read(x);
   while x >= N do
   begin
      ostatok:=x mod N;
      Str(ostatok, c);
      s:=c+s;
      x:=x div N;
   end;
   
   if x > 0 then begin
      str(x, c);
      s:=c+s;
   end;
   writeln('в системе счисления по основанию ', N, ' это число = ', s);
end.

вывод:
введите десятичное число: 14
в системе счисления по основанию 7 это число = 20

проверка корректности потокового ввода

чё делать то. а вообще я аытаюсь обезопасить переменную х от некоректного ввода.

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
 int n;

 bool b = cin >> n;

 cout << "correct: "
  << (b ? "yes" : "no")
  << endl;

 return 0;
}

вывод:
12
correct: yes

dd
correct: no

слово с самым меньшим кол-вом буквы

как мне вывести на экран только одно слово с самым меньшим кол-вом буквы а?

тут есть несколько ньюансов

- в строке может не быть вообще слов с буквой а (учтем этот факт)
- может быть несколько слов с одинаковым кол-вом букв а (тогда задача решается в 2 прохода, я решу с одним)

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

#define LITERA 'a'


int main(int argc, char *argv[])
{
 string s;
 cout << "введите строку: ";
 getline(cin, s);

 string min_word;
 int min_count = 0;

 istringstream iss(s);
 while (iss >> s)
 {
  int count = 0;

  for (int i = 0; i < s.length(); i++)
  {
   if (LITERA == s.at(i))
   {
    count++;
   }
  }
  
  if (0 == count)
  {
   //в этом слове нет искомой буквы
  }
  else
  {
   if (0 == min_count)
   {
    //до этого момента не найдено ни одного слова
    min_count = count;
    min_word = s;
   }
   else
   {
    if (count < min_count)
    {
     min_count = count;
     min_word = s;
    }
   }
  }
 }

 if (0 == min_count)
 {
  cout << "в строке нет слов с буквой '" << LITERA << "'" << endl; 
 }
 else
 {
  cout << "слово '" << min_word << "' содержит минимум '"
   << LITERA << "' = " << min_count << endl; 
 }


 return 0;
}

вывод

введите строку: fire char panama ufo
слово 'char' содержит минимум 'a' = 1

введите строку: bug kriss more
в строке нет слов с буквой 'a'

суббота, 12 декабря 2009 г.

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

Запросить у пользователя 5 строк и вывеcти на экран ту, в которой содержится меньше(больше) всего букв «а»

#include <iostream>
#include <string>

using namespace std;

#define N 5
#define LITERA 'a'

int main(int argc, char *argv[])
{
   string s[N];
   for (int i=0; i<N; i++)
   {
      cout << "input " << i << " string: ";
      getline(cin, s[i]);
   }

   int min_index = -1;
   int min_count = -1;

   int max_index = -1;
   int max_count = -1;

   for (int i=0; i < N; i++)
   {
       int count = 0;
       for (int j=0; j < s[i].length(); j++)
       {
           if (LITERA == s[i].at(j))
           {
               count++;
           }
       }

       if (0 != count)
       {
              if (-1 == min_count)
              {
                       min_count = count;
                       min_index = i;               
              }
              else
              {
                       if (count < min_count)
                       {
                                 min_count = count;
                                 min_index = i;
                       }
              }
       }

       if (count > max_count)
       {
           max_count = count;
           max_index = i;
       }
   }

   if (-1 != max_index)
   {
       cout << "в строке " << max_index
          << " больше всего (" << max_count << ") "
          << "букв '" << LITERA << "'" << endl;
   }
   else
   {
       cout << "ни в одной строке нет буквы '" << LITERA << "'" << endl;
   }

   if (-1 != min_index)
   {
       cout << "в строке " << min_index
          << " меньше всего (" << min_count << ") "
          << "букв '" << LITERA << "'" << endl;
   }

   return 0;
}

вывод
input 0 string: fdfads
input 1 string: dfadfafad
input 2 string: dfadfadfadfad
input 3 string: dadf
input 4 string: dafadfadfad
в строке 2 больше всего (4) букв 'a'

пятница, 11 декабря 2009 г.

проверка текущего месяца

Запросить у пользователя ввести месяц года, и если он равен текущему, вывести ответ «Верно»

#include <iostream>
#include <string>
#include <map>

#include <time.h>

using namespace std;

int main(int argc, char *argv[])
{
 std::map<string, int> month_number;
 month_number["december"] = 11;
 month_number["декабрь"] = 11;
 month_number["march"] = 2;
 month_number["март"] = 2;
 /* остальные месяцы и их варианты на разных языках в том же духе */


 cout << "введите название текущего месяца: ";

 string month;
 cin >> month;

 time_t rawtime;
 time(&rawtime);

 struct tm *timeinfo;
 timeinfo = localtime(&rawtime);


 if (month_number.find(month) != month_number.end())
 {
  if (month_number[month] == timeinfo->tm_mon)
   cout << "верно" << endl;
  else
   cout << "неверно" << endl;
 }
 else
  cout << "не знаю о таком месяце" << endl; 


 return 0;
}

введите название текущего месяца: декабрь
верно

введите название текущего месяца: march
неверно

введите название текущего месяца: qwerty
не знаю о таком месяце


четверг, 10 декабря 2009 г.

найти первый и второй положительный элемент массива

как с помощью цикла while найти первый и второй положительный элемент массива

const
   N = 10;

var
   a: array [1..N] of integer;
   i: integer;
   i1, i2: integer;

begin
   {init random}
   for i:=1 to N do a[i]:=random(100)-50;
   
   write('array: ');
   for i:=1 to N do write(a[i]:4);
   writeln;
   

   i1 := 0;
   i2 := 0;

   i := 1;
   while (i1 = 0) or (i2 = 0) do begin
      if a[i] > 0 then begin
         if i1 = 0 then begin
            i1 := i;
         end else begin
            if i2 = 0 then begin
               i2 := i;
            end;
         end
      end;
      inc(i);
      if (i > N) then begin
         break;
      end
   end;
   
   if i1 > 0 then begin
      writeln('first positive element: a[', i1, '] = ', a[i1]);
      if i2 > 0 then begin
          writeln('second positive element: a[', i2, '] = ', a[i2]);
      end else begin
          writeln('no second positive element');
      end;
   end else begin
      writeln('no positive element at all!');
   end;
   
end.

вывод
array:   45 -22 -15  32  -9   9  29   3 -26 -49
first positive element: a[1] = 45
second positive element: a[4] = 32

Нахождение заданного числа в массиве

Плиз, помогите решить задачку на языке Си "Нахождение заданного числа в массиве"

#include <stdio.h>

int main(int argc, char *argv[])
{
 /* заполните массив своими элементами */
 int a[] = {12, 23, 54, 1, 4, 33, 65}; 
 int i; /* переменная цикла */
 int x; /* искомое число */

 printf("введите число: ");
 scanf("%d", &x);

 for (i = 0; i < sizeof(a)/sizeof(int); i++)
 {
  if (x == a[i])
  {
   printf("число найдено: его индекс в массиве: %d\n", i);
   return 1;
  }
 }

 printf("такого числа нет в массиве\n");
 return 0;
}

найти минимальное в массиве и упорядочить по убыванию до...

Написать программу, которая упорядочивает по убыванию ту часть последовательности, которая находиться до минимального элемента этой последовательности

const
   N = 10;

var
   a: array [1..N] of integer;
   i, j: integer;
   imin: integer;
   temp: integer;
   
begin
   {init random}
   for i:=1 to N do a[i]:=random(100);
   
   write('before: ');
   for i:=1 to N do write(a[i]:3);
   writeln;
   
   imin := 1;

   for i:=2 to N do begin
      if a[i] < a[imin] then imin := i;
   end;
   
   writeln('min is a[', imin, '] = ', a[imin]);
   
   for i:=1 to imin-2 do begin
      for j:=i+1 to imin-1 do begin
         if a[i] < a[j] then begin
            temp:=a[i];
            a[i]:=a[j];
            a[j]:=temp;
         end;
      end;
   end;

   write('after: ');
   for i:=1 to N do begin
      if i = imin then write('[');
      write(a[i]:3);
      if i = imin then write(']');
   end;
   writeln;

   
end.
вывод
before:  48 63  9 75  2 98 28 13  5 10
min is a[5] = 2
after:  75 63 48  9[  2] 98 28 13  5 10

количество вещественных корней в квадратном уравнении



#include <iostream> 

using namespace std;

void test(int a, int b, int c)
{
 cout << "Uravnenie (" << a << ")*x^2+(" << b << ")*x+(" << c << ") ";

 int d = b * b - 4 * a * c; //diskriminant

 if (d < 0) 
  cout << "ne imeet veschestvennyh kornei" << endl; 
 else 
  if (d == 0) 
   cout << "imeet 1 koren' (a tochnee 2 odinakovyh)" << endl; 
  else 
   cout << "imeet 2 raznyh kornya" << endl;
}


int main(int argc, char *argv[]) 
{ 
 int a, b, c;
 cout << "vvedite a, b, c: ";
 cin >> a >> b >> c;

 test(a, b, c);
 test(b, a, c);
 test(c, a, b);

 return 0;
}

четверг, 3 декабря 2009 г.

Как загрузить массив из файла в с++?

В файле file.txt имеется, например, массив:

1 2 3
4 5 6
7 8 9

#include <iostream>
#include <fstream>
#include <sstream>
#include <string> 

using namespace std;

void task()
{
 string buf; 
 string line; 
 ifstream in("file.txt"); 

 int m[3][3];

 int j = 0;
 while (getline(in, line)) 
 {
  int i = 0;
  istringstream iss(line);
  while (iss >> m[i++][j]);
  j++;
 }

 //print array m
 for (int j=0; j<3; j++)
 {
  for (int i=0; i<3; i++)
  {
   cout << m[i][j] << " ";
  }

  cout << endl;
 }
}

int main(int argc, char* argv[])
{ 
 task();
 return 0; 
}

конечно это не самый лучший способ, т.к. мы привязаны к конкретным размерам матрицы...

функция рисования треугольника

функция рисования треугольника

program triangle;

Uses GraphABC;

procedure drawTriangle(x1, y1, x2, y2, x3, y3: integer);
begin
     moveto(x1, y1);
     lineto(x2, y2);
     lineto(x3, y3);
     lineto(x1, y1);
end;

begin
     drawTriangle(10, 10, 20, 100, 100, 40);
end.

среда, 2 декабря 2009 г.

вывести первые буквы слов в строке

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

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

void task()
{
 cout << "input string: ";
 string s;
 getline(cin, s);


 cout << "result:" << endl;
 istringstream iss(s);
 while (iss >> s)
 {
  cout << (*s.begin()) << endl;
 }
}

int main(int argc, char *argv[])
{
 task();
 return 0;
}

output

input string: qwer   r    qqwww eeee   r   q12
result:
q
r
q
e
r
q

вхождение слова

Ввести строку и слово, вывести все слова, которые содержат введенное слово как составную часть.

#include <iostream>
#include <string>
#include <sstream>

using namespace std;


void task()
{
 string s;
 cout << "input string: ";
 getline(cin, s);


 string w;
 cout << "input word: ";
 cin >> w;

 cout << "result: " << endl;

 istringstream iss(s);
 while(iss >> s)
 {
  if (string::npos != s.find(w))
  {
   cout << s << endl;
  }
 }
}

int main(int argc, char *argv[])
{
 task();
 return 0;
}

output

input string: hello world more
input word: ll
result:
hello

вторник, 1 декабря 2009 г.

сумма и произведение элементов в массиве

Дано N вещественных чисел. a1,a2....an. Вывести сумму и произведение чисел из данного набора. Использовать структуру цикл с постусловием.

program one;

const
N = 5;

var
A: array [1..N] of integer;
i: integer;
sum: integer;
mul: integer;

begin
writeln('инициализация массива случайными числами');
for i:=1 to N do begin
A[i]:=random(9)+1; {числа от 1 до 9, т.е. неравные 0, иначе произведение будет равно 0}
writeln(A[i]);
end;

{начальное значение суммы}
sum:=0;
{начальное значение произведения}
mul:=1;
{начальный номер элемента}
i:=1;

repeat
sum:=sum+A[i];
mul:=mul*A[i];
i:=i+1;
until i > N;

writeln('sum=', sum);
writeln('mul=', mul);

end.

число из Двоичной системы счисления в десятичную

Помогите написать программы на паскале которые переводит число из Двоичной системы счисления в десятичную


FUNCTION BIN2DEC(BIN: STRING): LONGINT;

VAR
J : LONGINT;
Error: BOOLEAN;
DEC : LONGINT;

BEGIN
DEC := 0;
Error := False;
FOR J := 1 TO Length(BIN) DO
BEGIN
IF (BIN[J] <>'0') AND (BIN[J] <>'1') THEN Error := True;
IF BIN[J] = '1' THEN DEC := DEC + (1 SHL (Length(BIN) - J));
{ (1 SHL (Length(BIN) - J)) = 2^(Length(BIN)- J) }
END;
IF Error THEN BIN2DEC := 0
ELSE BIN2DEC := DEC;
END;

Функции перевода из одной системы счисления в другую

Тут собвственно и добавлять нечего. Качественный материал.

Функции перевода из одной системы счисления в другую

проверка символа на гласность




#include <iostream>
#include <string>
#include <sstream>
#include <set>

using namespace std;

//твоя функция
int foo(char c)
{
//тут перечисли все гласные которые знаешь
string glasnye("eyuioa");

//find вернет npos если символ не содежится в glasnye
return (string::npos != glasnye.find(c)) ? 1 : 0;
}


void task()
{
//выводим приглашение на ввод символа
cout << "input char: ";

//вводим символ с клавиатуры
char c;
cin >> c;

//вводим результат
cout << "result: " << foo(c) << endl;
}

int main(int argc, char *argv[])
{
task();
return 0;
}

Ввести строку , вывести только слова, заканчивающиеся на гласную букву




#include <iostream>
#include <string>
#include <sstream>
#include <set>

using namespace std;

void task()
{
//выводим приглашение на ввод строки
cout << "input string: ";

//вводим строку в переменную s
string s;
getline(cin, s);

cout << "result words:" << endl;

//дополни строку остальными гласными (можно учесть русские и прописные буквы)
string glasnye("eyuioa");

//инициализируем поток ввода из которого будем извлекать слова
istringstream iss(s);


while (iss >> s) //пока слова извлекаются
if (string::npos != glasnye.find(*s.rbegin())) //последняя буква не гласная?
cout << s << endl; //печатаем слово
}

int main(int argc, char *argv[])
{
task();
return 0;
}