[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Code:
    
    #include <cstdio>
    #include <cstring>
    
    struct Ss{
    	int arr[4];
    	int a;
    	
    	Ss *operator*(Ss &s) {
    		int n[4]; int l = 0;
    		for (int i = 0; i < 4; i++) {
    			for (int j = 0; j < 4; j++) {
    				if (this->arr[i] == s.arr[j]) {
    					n[l++] = arr[i];
    				}
    			}
    		}
    		//----------------
    		Ss *nobj = new Ss;
    		for (int i = 0; i < 4; i++) {
    			nobj->arr[i] = n[i];
    		}
    		return nobj;
    		//---------------
    	}
    	void print(void) {
    		printf("arr:");
    		for (int i = 0; i < 4; i++) {
    			printf("%d,", this->arr[i]);
    		}
    		printf("\nvar:%d\n", this->a);
    	}
    };
    
    
    
    int main(void) {
    	
    	Ss A = {{1,2,3,4}, 0};
    	Ss B = {{3,4,6,7}, 0};
    
    	Ss *C = (A*B);
    	C->print();
    }
    
    Code:
    результат:
    [b]arr:3,4,0,0,[/b]
    
    Тот же код, немножко переделанный. Но это так сказать - простое решение этой задачи, можно было бы сделать и подругому, но времени мало, как всегда).

    Насчет циклов и константних размеров поля и т.д., надеюсь сам разберешься.

    После операции A*B возврашается указательно на новый объект, такого же типа. Поэтому, когда новый объект будет не нужен не забудь освободить память с помощью delete C; (в нашем случаи).
     
    1 person likes this.
  2. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Вводит человек, программа выводит на дисплей.

    Вот наработка есть, закомментирована вторая часть задания уже решенная правда с костылем из за невозможности корректного преобразования c-char* в int. dropbox main.cpp

    Так что проблема только с определением флага наличия числа повторно в массиве.

    Напоминаю задание:
    Написать программу, которая вводит с клавиатуры массив из N вещественных чисел, создаёт новый массив, в который помещает элементы исходного массива, игнорируя при этом повторяющиеся, и выводит результат пользователю; затем вводит с клавиатуры строку длиной не более 6 символов, проверяет, что строка содержит число, выводит пользователю сумму цифр и сообщает, является ли эта сумма нечётным числом.
     
  3. beard®

    beard® New Member

    Joined:
    20 Aug 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Задание из гл.4 Страуструп...

    Надо написать программу, считывающую одно число double за один проход. За проход цикла, выводить на экран одно введенное число. Если оно окажется наименьшим из ранее введенных - выводить на экран сообщение, что оно Наименьшее из введенных. Если наибольшим - выводить на экран сообщение, что оно Наибольшее из введенных.
    Советуют определить две переменные, чтобы определить, какое из чисел имеет наименьшее, а какое - наибольшее значение, среди ранее введенных.
    Что то у меня ни фига не получается...
    Наименьшее значение выводится относительно нуля (((
    Заранее признателен Всем кто откликнется...
    Code:
    #include"std_lib_facilities.h"
    #include<locale>
    int main()
    {
    	setlocale(LC_ALL,"");
    	cout << "Введите числа типа double: " << endl;
    	double val;
    	double minV = 0;
    	double maxV = 0;
    	vector<double> vals;
    	while(cin >> val)
    		if(val > maxV){
    			maxV = val;
    				cout << "введено число: " << maxV << " наибольшее из введенных" << '\n';
    		}
    		else if(val <= minV){
    			minV = val;
    				cout << "введено число: " << minV << " наименьшее из введенных" << '\n';
    		}
    		else if(minV < val && val < maxV){
    			cout << "введенное число больше минимального, но меньше максимального из введенных" << '\n';
    		}
    	return 0;
    }
    
     
  4. NetAng

    NetAng Member

    Joined:
    29 Dec 2010
    Messages:
    75
    Likes Received:
    12
    Reputations:
    5
    Ты инициализируешь min и max нулем... вот и получается так, просто сам присваивай им начальные значения и работай дальше:
    Code:
    #include<iostream>
    #include<vector>
    using namespace std;
    int main()
    {
    
            cout << "Введите числа типа double: " << endl;
            double val;
            double minV;
            double maxV;
            vector<double> vals;
           cout << "Введите начальное значение minV: "; cin >> minV;
           cout << "Введите начальное значение maxV: "; cin >> maxV;
    
    
            while(cin >> val)
                    if(val > maxV){
                            maxV = val;
    
                                    cout << "введено число: " << maxV << " наибольшее из введенных" << '\n';
                    }
                    else if(val <= minV){
                            minV = val;
                                    cout << "введено число: " << minV << " наименьшее из введенных" << '\n';
                    }
                    else if(minV < val && val < maxV){
                            cout << "введенное число больше минимального, но меньше максимального из введенных" << '\n';
                    }
            return 0;
    }
    
    
    
    можешь еще проверку в начале поставить, чтобы minV не присваивалось значение больше maxV
     
  5. DeepBlue7

    DeepBlue7 Elder - Старейшина

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    Подскажите, как для dll-ки замутить консольное окно (для вывода данных) ? Вообщем, как при атаче дллки в процесс замутить окно консоли, в которое писать данные из той же дллки? )
     
  6. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Начни с функции AllocConsole, а потом WriteConsole. Вот справка: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073%28v=vs.85%29.aspx
     
    1 person likes this.
  7. masterlights

    masterlights New Member

    Joined:
    20 Oct 2011
    Messages:
    41
    Likes Received:
    0
    Reputations:
    0
    Разбирался с темой функции и в когда тестил прогу, то не разобрался в небольшом нюансе с указателями

    //программа возводит числа в куб
    Code:
    void cube(int *s, int n);
    int main()
    {
    	int i, nume[10];
    	for(i=0;i<10;i++) {nume[i]=i+1; cout<<nume[i]<<' ';}
    	cout<<endl;
    	cube(nume,10);
    	for(i=0;i<10;i++) cout<<nume[i]<<' ';
    	system("pause");
    }
    void cube(int *s, int n)
    {
    	while(n)
    	{
    		*s=*s * *s * *s;
    		n--;
    		*s++; [COLOR=Red]// если вместо *s++ указать s++, то результат не измениться, почему?[/COLOR]
    	}
    } 
     
  8. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    1) Передаем ссылку на первый элемент массива, что-то вида 0xABCDEF.
    2) Каждый элемент массива занимает не один байт, скорее всего слово или двойное слово (зависит от режима компиляции).
     
  9. beard®

    beard® New Member

    Joined:
    20 Aug 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    NetAng
    Спасибо! Попробую.
    Попробовал...
    Компилятор выдает:

    warning C4700: использована неинициализированная локальная переменная "maxV"
    warning C4700: использована неинициализированная локальная переменная "minV"
     
    #7049 beard®, 1 Mar 2012
    Last edited: 1 Mar 2012
  10. NetAng

    NetAng Member

    Joined:
    29 Dec 2010
    Messages:
    75
    Likes Received:
    12
    Reputations:
    5
    У меня всё работает, какой компилятор? попробуй иницициализировать maxV и minV нулём или еще чем нибудь в начале.
    Code:
    double minV = 0;
    double maxV = 0;
     
  11. beard®

    beard® New Member

    Joined:
    20 Aug 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Пробовал.
    Или забивает минимальные значения нулями, либо игнорирует их.
     
  12. 1NtR0

    1NtR0 Elder - Старейшина

    Joined:
    14 Apr 2007
    Messages:
    235
    Likes Received:
    89
    Reputations:
    35
    Подскажите плз есть софт скомпиленный в MS Studio 2010. Во время работы вызывает ошибку:
    Debug error! R6010 abort has been called
    Что это может означать?

    и второй вопрос как максимально быстро и еффективно считать файл большой в вектор? Данный код работать очень медленно:
    Code:
      string line;
      ifstream myfile ("example.txt");
      if (myfile.is_open())
      {
        while ( myfile.good() )
        {
          getline (myfile,line);
          cout << line << endl;
        }
        myfile.close();
      }
    
     
  13. thrust

    thrust Elder - Старейшина

    Joined:
    20 Jul 2011
    Messages:
    50
    Likes Received:
    41
    Reputations:
    31
    В коде происходит вызов метода abort(), возможно не выполнены некоторые условия необходимые для работы программы

    Не привязывай поток к выводу на консоль, попробуй сишные функции ввода-вывода
     
  14. strelok07str

    strelok07str New Member

    Joined:
    4 Sep 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Прошу помощи, помогите написать программу для с++. Очень плохо понимаю строки в с++ после pascal\php .... хотя символы-массивы вроде ничего сложного

    Программа: оставить в слове только первые вхождения всех букв
    Мой код :
    http://pastebin.ru/jqKQPg24

    Комментарий: Ошибок мелких полно. Но больше всего интересно почему не работает 21 строка(копируется полностью)
     
  15. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Это не C++, это трешовая смесь C и C++. Вот как надо:

    Code:
    #include <string>
    #include <iostream>
    #include <algorithm>
    
    int main()
    {
    	std::string str;
    	std::cin >> str;
    	str.erase(std::unique(str.begin(), str.end()), str.end());
    	std::cout << "Unique letters: " << str << std::endl;
    	return 0;
    }
    
    Edit: неверно, не будет так работать, как надо.
     
    #7055 GRRRL Power, 3 Mar 2012
    Last edited: 4 Mar 2012
  16. strelok07str

    strelok07str New Member

    Joined:
    4 Sep 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    может быть и смесь , но я пишу на данный момент не для себя, а для преподавателя. Поэтому нужно использовать тип char только
     
  17. DeepBlue7

    DeepBlue7 Elder - Старейшина

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    Не совсем вопрос, но всё же... Подкиньте, пожалуйста, простенький класс c++ (vs 2010) для работы с mssql.
     
  18. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Надо было это сразу конкретизировать.
    PHP:
    #include <stdlib.h>
    #include <iostream>

    int main()
    {
        
    char word[50] = {0};
        
    std::cin >> word;

        for(
    charunique_end word 1, *curr unique_end, *last word strlen(word) + 1curr != last; ++curr)
        {
            
    charcurr2;
            for(
    curr2 wordcurr2 != unique_end && *curr != *curr2; ++curr2);

            if(
    curr2 == unique_end)
                *
    unique_end++ = *curr;
        }

        
    std::cout << "Unique letters: " << word << std::endl;
        return 
    0;
    }

     
    #7058 GRRRL Power, 4 Mar 2012
    Last edited: 4 Mar 2012
  19. NetAng

    NetAng Member

    Joined:
    29 Dec 2010
    Messages:
    75
    Likes Received:
    12
    Reputations:
    5
    Язык C. Есть структура с полями Name, Number и Time как можно записать данные с этих полей в файл в удобочитаемом виде:
    Егор......12345.....12:00
    Дима.....345........01:05
    Аня.......5678......02:07
    (вместо точек пробелы)
     
  20. masterlights

    masterlights New Member

    Joined:
    20 Oct 2011
    Messages:
    41
    Likes Received:
    0
    Reputations:
    0
    при выполнении программы она должны выводить "Hello", а за ним имя, которое должно быть первым аргументом командной строки.

    int main(int argc, char *argv[])
    {
    if(argc!=2)
    {
    cout << "You forgot to type your name.\n";
    system("pause");
    return 1;
    }
    cout << "Hello " << argv[1] << '\n';
    system("pause");
    return 0;
    }

    программу надо запускать, введя команду name Том (name- имя программы)

    где вводить эту команду?
    а то у меня всё время результат - "You forgot to type your name"
     
Thread Status:
Not open for further replies.