Форум программистов, компьютерный форум CyberForum.ru

hello world 10 раз - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.77
ahahac
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 19
23.07.2012, 17:09     hello world 10 раз #1
нужен вывести hello world 10 раз через for и while.как это сделать я не знаю.
printf 10 раз не подходит
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2012, 17:09     hello world 10 раз
Посмотрите здесь:

C++ Вывести числа, которые встречаются в массиве несколько раз / один раз
Hello, World! C++
C++ Hello, World!
C++ Hello World!
Hello world C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21434 / 10219 / 1666
Регистрация: 12.02.2012
Сообщений: 17,092
24.07.2012, 19:39     hello world 10 раз #41
Цитата Сообщение от kravam Посмотреть сообщение
А ещё можно использовать ассемблерные вставки
- да, и мне это приходило в голову...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Troll_Face
 Аватар для Troll_Face
599 / 399 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
24.07.2012, 19:41     hello world 10 раз #42
Цитата Сообщение от Catstail Посмотреть сообщение
и мне это приходило в голову...
не только вам
Kastaneda
24.07.2012, 19:59
  #43

Не по теме:

Цитата Сообщение от Fatal Error Посмотреть сообщение
не только вам
Ага

Endiff
24.07.2012, 20:00
  #44

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение

Не по теме:


Ага

В точку.

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.07.2012, 20:03     hello world 10 раз #45
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
template<char, char...>
struct print;
 
template<>
struct print<'0'>
{
   static void apply()
   {
      std::cout << std::endl;
   }
};
 
template<char current, char... chars>
struct print
{
   static void apply()
   {
      std::cout << current;
      print<chars...>::apply();
   }
};
 
template<int begin, int end>
struct hello_printer
{
   static void apply()
   {
      print<'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!', '0'>::apply();
      hello_printer<begin + 1, end>::apply();
   }
};
 
template<int end>
struct hello_printer<end, end>
{
   static void apply()
   {
   }
};
 
int main()
{
   hello_printer<0, 10>::apply();
}
http://liveworkspace.org/code/a77af8...3f5b478900d6c6
Endiff
24.07.2012, 20:04
  #46

Не по теме:

Даешь ассемблер...

rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
24.07.2012, 20:11     hello world 10 раз #47
C++
1
2
3
4
5
6
7
8
#include <cstdio>
 
struct hello_world { hello_world() { puts("Hello, world!"); } } _[10];
 
int main()
{
    
}
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
24.07.2012, 20:12     hello world 10 раз #48
Вот ещё вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
int main()
{
    int i;
    for(i=0;i<10;i++)
    {
        goto hello;
ret : goto world;
        ret2 :;
    }
    if(i<10)
    {
hello : cout<<"Hello ";
    goto ret;
world : cout<<"world"<<endl;
    goto ret2;
    }
    system("pause");
}
Catstail
Модератор
 Аватар для Catstail
21434 / 10219 / 1666
Регистрация: 12.02.2012
Сообщений: 17,092
24.07.2012, 20:14     hello world 10 раз #49
Мне кажется, более правильно было бы так:

C++
1
2
3
4
5
6
7
char msg[] = "Hello, world";
 
asm {
    lea dx, msg
    mov ah,9
    int 0x21 
}
В DOS-овском варианте работать будет...
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
24.07.2012, 20:18     hello world 10 раз #50
Может ещё кинуть способ с использованием шифрования по Виженеру?)))
Intel~lect
 Аватар для Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
24.07.2012, 20:19     hello world 10 раз #51
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
    const char str[] = "Khoor/#zruog$";
 
    for (int i=0; i<strlen(str); i++)
        cout << char(str[i] - 3);
 
    cout << endl;
    system("pause");
    return 0;
}
Endiff
24.07.2012, 20:19
  #52

Не по теме:

Catstail, вам виднее

Catstail
Модератор
 Аватар для Catstail
21434 / 10219 / 1666
Регистрация: 12.02.2012
Сообщений: 17,092
24.07.2012, 20:51     hello world 10 раз #53
Если уж совсем точно, то в DOS-е вот ЭТО работает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
   char msg[]="Hello!!!$";
 
   asm    push ss
   asm    pop  ds
   asm    lea dx,msg
   asm    mov ah,9
   asm    int 0x21
 
   return 0;
}
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,040
24.07.2012, 20:55     hello world 10 раз #54
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
char msg[] = "Hello, world";
int main()
{ 
asm_ {
       mov ecx,10;
       lea edx,msg;
met1: push ecx;
         push edx;
         call printf;
        pop eax; // восстановить стек
        pop ecx;
        loop met1; 
 }
}
Dll будем делать??
Troll_Face
 Аватар для Troll_Face
599 / 399 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
24.07.2012, 21:28     hello world 10 раз #55
Цитата Сообщение от ValeryS Посмотреть сообщение
pop eax; // восстановить стек
вы кладете в стек edx, а достаете eax... непорядок

Добавлено через 1 минуту
Catstail, я думаю надо все таки переписать под ВрайтКонсольА...
Catstail
Модератор
 Аватар для Catstail
21434 / 10219 / 1666
Регистрация: 12.02.2012
Сообщений: 17,092
24.07.2012, 21:31     hello world 10 раз #56
Надо бы...
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
24.07.2012, 21:38     hello world 10 раз #57
Ассемблерная вставка:
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 <windows.h>
#include <stdio.h>
 
int main() {
   //НАйдём адрес нужной нам функции puts
   long int adres_puts= (long int)GetProcAddress (LoadLibrary ("msvcrt"), "puts");
 
 
   //Теперь цикл
   for (int i= 0; i< 10; i++) {
 
 
    //Здесь мы с помощью ассемблерной вставки кладём на вершину стека
    //Адрес "Hello, word" и прыгаем на адрес adres_puts, осуществляя 
    //тем самым вызов puts c нужным параметром
    asm ("push %0; \
          call %1; \
          ADD ESP, 4"
          :
          :"r"("Hello, word!"), "r" (adres_puts)
          :);
   
   }
   
   //ВЫравнивание стека я осуществил по-сермяжному с помощью "ADD ESP, 4"
   //Хотя правильно быо бы RETN ну да и так сойдёт
    getchar ();
    return 0;
 
}
компилить
Bash
1
g++ main.cpp -masm=intel
А можно было бы вообще стек не выравнивать, всё равно программа закончилась
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,040
24.07.2012, 22:13     hello world 10 раз #58
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Fatal Error Посмотреть сообщение
вы кладете в стек edx, а достаете eax... непорядок
вот этим
Цитата Сообщение от ValeryS Посмотреть сообщение
push edx;
call printf;
я передаю аргумент функции printf
аналогично printf("Hello word)
можно написать
Assembler
1
2
push msg;
call printf;
а вот этим
Цитата Сообщение от ValeryS Посмотреть сообщение
pop eax; // восстановить стек
я выравниваю стек,поскольку printf Сишная а не паскалевская функция, стек должна править вызывающяя функция, в паскалевских вызываемая.
можно сделать в любой неиспользуемый регистр
а можно и так
Assembler
1
 ADD ESP, 4
что в принципе приведет к одному результату -указатель стека сдвинется
Понятно объяснил?

Добавлено через 3 минуты
Цитата Сообщение от kravam Посмотреть сообщение
А можно было бы вообще стек не выравнивать, всё равно программа закончилась
а в цикле потом i найдешь?? указатель то сдвинулся

Добавлено через 7 минут

Не по теме:

Цитата Сообщение от Fatal Error Посмотреть сообщение
Catstail, я думаю надо все таки переписать под ВрайтКонсольА...
Цитата Сообщение от Catstail Посмотреть сообщение
Надо бы...
Представляю
придет наш ТС к своему преподавателю да и выложит все наши наработки
Тот посмотрит и скажет: "Что ты здесь делаешь? Дуй в академию наук"

kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
24.07.2012, 22:22     hello world 10 раз #59
Цитата Сообщение от ValeryS Посмотреть сообщение
а в цикле потом i найдешь?? указатель то сдвинулся
проверено, находится корректно, хз к чему там i привязывается.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2012, 22:25     hello world 10 раз
Еще ссылки по теме:

Hello world C: C++
Hello world C++
Рекурсивная програма которая по очереди будет выводить 1(16 раз), 2(8 раз), 3 (4 раза) C++

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

Или воспользуйтесь поиском по форуму:
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
24.07.2012, 22:25     hello world 10 раз #60
Совсем для наркоманов
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <boost/mpl/vector_c.hpp>
#include <boost/mpl/for_each.hpp>
#include <boost/lambda/lambda.hpp>
 
int main()
{
   for(int i = 10;; i ? boost::mpl::for_each <boost::mpl::vector_c <char, 'H','e','l','l','o',',', ' ','W','o','r','l','d'>> (std::cout<<boost::lambda::_1), std::cout<<std::endl, i-- : 0);
}
Yandex
Объявления
24.07.2012, 22:25     hello world 10 раз
Ответ Создать тему
Опции темы

Текущее время: 03:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru