core Опубликовано 9 февраля, 2009 Жалоба Поделиться Опубликовано 9 февраля, 2009 Спасибо большое за помощь. Немного переделывал под свой компилятор и лополнительные условия. Так вот: for(i=1;i<=3;i++){cout<<"Name of "<<i<<" stydent: ";cin.getline (G.Students[i].Name,29); G.count++;cout<<"\nBirthdate: year (4 digits): "; cin>>G.Students[i].Year;cout<<"\n month (1-2 digits): "; cin>>G.Students[i].Month;cout<<"\n day (1-2 digits): "; cin>>G.Students[i].Day;cout<<"\nPlace of studing: ";cin.getline (G.Students[i].PlaceStud,29); В етом кусочке все время Место учобы проскакивает и ввод начинается опять с имени студента. В чем проблема может быть? Часть описания класов осталась той же : class Persone {public: char Name[30]; int Year,Month,Day;};class Student:public Persone {public: char PlaceStud[30];};class Group {public: int count; Student Students[40]; void StudSort();}; Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 9 февраля, 2009 Жалоба Поделиться Опубликовано 9 февраля, 2009 Дальнейшые наблюдения привели к такому заключени - если юзать cin.getline() после cin>> то первый вариант просто пропускается и програма идет дальше. Обьясните пожалуйста почему так Ну вот, как я понял cin >> оставляет конец строки в потоке, в результате по getline прилетает пустая строчка Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 9 февраля, 2009 Жалоба Поделиться Опубликовано 9 февраля, 2009 Если кто-нить столкнется с такой проблемой - вот решение. char skip; //перед getline() cin>>skip; cin.putback(skip); cin.getline();//ваша строка Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 10 февраля, 2009 Жалоба Поделиться Опубликовано 10 февраля, 2009 Есть вопрос по использованию компонента TOpenDialog в Delphi 6. Мне нужно получить имя файла от данного компонента (не имя вместе с адресом, а только имя файла). Свойство FileName возвращает имя файла вместе с его адресом. А как сделать так, чтобы получить только само имя файла, без адреса? В VB.net например для этого есть свойство FileTitle, а в Delphi что-то не нашёл ничего подобного. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 10 февраля, 2009 Жалоба Поделиться Опубликовано 10 февраля, 2009 (изменено) В Delphi тоже есть много функций для работы с именами файлов. Чистое имя файла из строки с путем к файлу извлекает, если не ошибаюсь, функция ExtractFileName. Хотя функцию, извлекающую часть строки после последнего символа \ и самому написать нетрудно. Изменено 10 февраля, 2009 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 10 февраля, 2009 Жалоба Поделиться Опубликовано 10 февраля, 2009 В Delphi тоже есть много функций для работы с именами файлов. Чистое имя файла из строки с путем к файлу извлекает, если не ошибаюсь, функция ExtractFileName. Хотя функцию, извлекающую часть строки после последнего символа \ и самому написать нетрудно. Спасибо. Попробую. Я просто в Delphi недавно только начал работать. Со строками не особо гибко умею работать. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 10 февраля, 2009 Жалоба Поделиться Опубликовано 10 февраля, 2009 Здраствуйте. Помогите доделать функцию сортировки записей масива в алфавитном порядке за Фамилией. class Persone {public: char Name[30]; int Year,Month,Day;};class Student:public Persone {public: char PlaceStud[30];};class Group {public: int count; Student Students[40]; ... void Group::SortByName(){int i,j,k=0; char flag='1'; Student St;for(i=0;i<count-1;i++)for(j=0;j<count-1;j++){while (flag=='1'){if (Students[j].Name[k]!=Students[j+1].Name[k]){if (Students[j].Name[k]>Students[j+1].Name[k]){St=Students[j]; Students[j]=Students[j+1]; Students[j+1]=St;flag='0';cout<<Students[j].Name[k];}};k++;}}}; переставляет только 0 и 1-ый елементы. Потом цикл прекращается. тоисть если взять 3 записи то сортировка ужене происходит. Голова уже вообще не варит. Надеюсь кто-нить увидит ошибку. Спасибо. :) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 10 февраля, 2009 Жалоба Поделиться Опубликовано 10 февраля, 2009 core: Так ты же сам себе тут выкопал яму флагом flag разрешения перестановки, который после первой же перестановки элементов сбрасывается и запрещает дальнейшие перестановки элементов. Конструкция "если не равно то если больше" мне тоже не слишком нравится, но она по крайней мере не портит работу. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 10 февраля, 2009 Жалоба Поделиться Опубликовано 10 февраля, 2009 Тролль: овв, понял. спасибо. хех, а я и не заметил Извиняюсь за наглость, а какую конструкцию сортировки ты б предложил? Как мне без скажем того флага выходит из цикла перебора букв, если перестановка произошла? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 10 февраля, 2009 Жалоба Поделиться Опубликовано 10 февраля, 2009 (изменено) А зачем выходить из этого цикла? Пусть выполнится до конца. Тебя сильно волнует выигрыш одной миллисекунды, в лучшем случае? Тут был применен не самый быстрый, а самый простой алгоритм сортировки. Применение более сложных алгоритмов имеет смысл, если в массиве тысячи элементов, а для десятков или сотен элементов выигрыш доли мига в выполнении программы не заслуживает того, чтобы о нем заботиться. Пусть лучше программа будет короткой и ясной, чем длинной, запутанной и экономящей миллисекунду выполнения. Тут есть много возможностей намного сократить выполнение сортировки - усовершенствованные варианты этого ("пузырькового") алгоритма, другие алгоритмы сортировки, сортировка не самых записей, а последовательности их индексов... Но чтобы добираться в магазин, не надо конструировать вертолет. P.S. Фу ты, не заметил, что ты вместо прямого сравнения имен сначала сортируешь все имена по первой букве, потом по второй, потом по третьей... в итоге должно получаться что-то несообразное. Уж если на то пошло, надо было сначала сортировать по последней букве, потом по предпоследней и т.д. до первой... а вообще это специально для сведения с ума придумано? Я сначала было решил, что ты пытаешься сократить время выполнения сортировки экстренным выходом из цикла, когда уже нечего сортировать, есть такой вариант пузырьковой сортировки, а ты решил создать что-то сильно оригинальное :). Тебе надо сравнивать строки? Так и сравнивай в основном алгоритме строки в целом, а не буквы в них. Как определять, какая строка "больше", а какая "меньше", надо будет реализовать потом, в отдельной операции или функции или найти подходящую стандартную. Разделяй уровни, а не переплетай. Тем более что на этом пути ты всегда найдешь стандартные алгоритмы и функции. Я ведь и сортировал по датам, записанным в виде строк. Если ты хотел сортировать по именам, достаточно было заменить в сортировке слово Birthdate на слово Name. Кроме того, ты почему-то не хочешь пользоваться стандартным для C++ типом строк string, а хочешь использовать оставшуюся от C возможность работы со строками как с особым видом массивов символов char*. Ну и на здоровье, в C есть специальная библиотека для работы с такими строками, она без изменений перешла в C++ и подключается #include <string.h>. Там есть готовые функции сравнения таких строк strcmp и копирования строк strcpy. Конечно, это не так удобно, как использовать операции > и =, но тоже вполне несложно. А если хочется спуститься до совсем уж примитивного уровня без использования стандартных библиотек функций, то функции сравнения и копирования строк как массивов символов и самому написать легко. Но их надо писать отдельно, а не перепутывать их текст с текстом более высоких уровней программы. Изменено 11 февраля, 2009 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Tendre Опубликовано 10 февраля, 2009 Жалоба Поделиться Опубликовано 10 февраля, 2009 Нужно написать программу автоматизации операций в Windows (автоматом подключиться к интернету, открыть документ, открыть браузер и т.д). За это я заплочу через WebMoney. Кого заинтересовало пишите на blackjoker2@yandex.ru. Подробней по аське поговорим. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Tendre Опубликовано 11 февраля, 2009 Жалоба Поделиться Опубликовано 11 февраля, 2009 Лучше в асю стучите 479-786-467... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 11 февраля, 2009 Жалоба Поделиться Опубликовано 11 февраля, 2009 Спасибо большое за помощь, Тролль. Сделал через strcmp. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Tendre Опубликовано 11 февраля, 2009 Жалоба Поделиться Опубликовано 11 февраля, 2009 Заказ взят. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 11 февраля, 2009 Жалоба Поделиться Опубликовано 11 февраля, 2009 Есть вопросик. Какой текстовый ти нужно огласить для переменной чтоб в него можна было записать даные с поля. Переношу предыдущую задачу на билдер. Так вот: пробую G.Students[j].Surname=Edit1->Text; не пашет. Вид класа: class Persone {public: string Surname,Name,Father; int Year,Month,Day;};class Student:public Persone {public: char PlaceStud[30];};class Group {public: int count; Student Students[40]; Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr0n4eG Опубликовано 11 февраля, 2009 Жалоба Поделиться Опубликовано 11 февраля, 2009 Мне нужна помощь с программой... Програма поворачивает букву "К" которая состоит из букв "к" на 0,90,180,270 градусов. Надо её слегка передалать: Надо сделать чтобы сама буква "К" была жолтым цветом. и надо чтоб поврот буквы на разные градусы производился при нажатии стрелочек на клавеатуре а не цифр 1 2 3 4. Вопшем программа пиведина ниже. #include <iostream.h> #include <conio.h> const int N=10; void main() { int i,j; char Matr[N][N]; char choice; //Input letter in array for(i=0;i<N;i++) { for(j=0;j<N;j++) { Matr[j]=' '; } } for(i=0;i<N;i++) Matr[3]='K'; Matr[0][8]=Matr[9][9]=Matr[8][8]=Matr[7][7]=Matr[6][6]= Matr[5][5]=Matr[1][7]=Matr[2][6]=Matr[3][5]=Matr[4][4]='K'; //////////////////////////////////// for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<Matr[j]; cout<<"\n"; } do { cout<<"1 - Turn to 0 degrees\n"; cout<<"2 - Turn to 90 degrees\n"; cout<<"3 - Turn to 180 degrees\n"; cout<<"4 - Turn to 270 degrees\n"; cout<<"0 - exit\n"; choice=getch(); // cin>>choice; switch(choice) { case '1': clrscr(); for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<Matr[j]; cout<<"\n"; } break; case '2': clrscr(); for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<Matr[N-1-j]; cout<<"\n"; } break; case '3': clrscr(); for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<Matr[N-1-i][N-1-j]; cout<<"\n"; } break; case '4': clrscr(); for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<Matr[j][N-1-i]; cout<<"\n"; } break; } }while(choice!='0'); } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 11 февраля, 2009 Жалоба Поделиться Опубликовано 11 февраля, 2009 (изменено) Dr0n4eG: Переделал твою прогу на стрелки и на желтый цвет. Проверил на Dev-C++. #include <iostream.h>#include <conio.h>#include <windows.h>const int N=10;int main(){int i,j;char Matr[N][N];char choice;HANDLE hstdo;hstdo = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute (hstdo, FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY);//Input letter in arrayfor(i=0;i<N;i++){for(j=0;j<N;j++){Matr[i][j]=' ';}}for(i=0;i<N;i++)Matr[i][3]='K';Matr[0][8]=Matr[9][9]=Matr[8][8]=Matr[7][7]=Matr[6][6]=Matr[5][5]=Matr[1][7]=Matr[2][6]=Matr[3][5]=Matr[4][4]='K';////////////////////////////////////for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<Matr[i][j];cout<<"\n";}do{cout<<"^ - Turn to 0 degrees\n";cout<<"> - Turn to 90 degrees\n";cout<<"<- Turn to 180 degrees\n";cout<<"v - Turn to 270 degrees\n";cout<<"0 - exit\n";choice=getch(); if (choice=='\224')choice=getch();//system("pause");// cin>>choice;switch(choice){case 'H':system("cls");for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<Matr[i][j];cout<<"\n";}break;case 'M':system("cls");for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<Matr[N-1-j][i];cout<<"\n";}break;case 'K':system("cls"); for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<Matr[N-1-i][N-1-j];cout<<"\n";}break;case 'P':system("cls");for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<Matr[j][N-1-i];cout<<"\n";}break;}}while(choice!='0');} Изменено 11 февраля, 2009 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr0n4eG Опубликовано 12 февраля, 2009 Жалоба Поделиться Опубликовано 12 февраля, 2009 Тут с ещо 1 программой проблема она поидее должна сортировать матрицу методом быстрой сортировки но при компиляции пишит ошибку :bleh: незнаю как убрать эту ошибку :g: #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <iostream.h> #define ROWS 4 #define COLS 4 // ======================================== { printf ("\n"); for (int i=0; i<ROWS; i++) { for (int j=0; j<COLS; j++) { printf ("%5d", matrix [i*COLS+j]); } } //================================= void exchange_rows (int* row_1, int * row_2) { int j, I, c; for (j=0 j<COLS; j++) } c=row_2 [j]; row+2[j]=row_1 [j]; row_1[j]=c; } //====================================== //====================================== int main (void) { int matrix [ROWS][COLS]; int i, j; clrscr (); randomize (); for (i=0; i<ROWS; i++) { for (j=0; j<CALS; j++) { matrix [j]=random (11); } } printf ("********Sortirovanie matrici********\n\n"); textcolor (RED); cprintf ("Matrica do sortirovki: \n"); print_matrix (z matrix [0][0]); printf("/n"); //------------------------------------------------------- int k; textcolor (GREEN);cprintf (Vvedite skolko nado sortirovat matricy); scanf ("%d", &k); for (i=0; j<ROWS-i-1; j++) { if (matrix [j][0], matrix [j+1][0]) { exchange_rows (matrix [j]), matrix [j+1]); } } textcolor (RED); cprintf ("\n\n Otsortirovanaya matrica: /n"); print_matrix (& matrix[0][0]); //-------------------------------------------- getch (); return0; } Хм проблема с Буквой К у меня на bilder 3.1 она кучу ошибок пишит при компеляции а прогу имена на Builber 3.1 надо сделать Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr0n4eG Опубликовано 12 февраля, 2009 Жалоба Поделиться Опубликовано 12 февраля, 2009 Я переделал Програмку под себя но непойму что именно в ней отвечает чтоб буква поворачивалась стрелками а не цифрами ((( #include <iostream.h> #include <conio.h> const int N=10; int main() { clrscr(); int i,j; char Matr[N][N]; char choice; //Input letter in array for(i=0;i<N;i++) { for(j=0;j<N;j++) { Matr[j]=' '; } } for(i=0;i<N;i++) Matr[3]='K'; Matr[0][8]=Matr[9][9]=Matr[8][8]=Matr[7][7]=Matr[6][6]= Matr[5][5]=Matr[1][7]=Matr[2][6]=Matr[3][5]=Matr[4][4]='K'; //////////////////////////////////// for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<Matr[j]; cout<<"\n"; } do { textcolor(YELLOW); textbackground(BLACK); cout<<"^ - Turn to 0 degrees\n"; cout<<"> - Turn to 90 degrees\n"; cout<<"<- Turn to 180 degrees\n"; cout<<"v - Turn to 270 degrees\n"; cout<<"0 - exit\n"; choice=getch(); if (choice=='\224')choice=getch(); //system("pause"); // cin>>choice; switch(choice) { case 'H': clrscr(); for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<Matr[j]; cout<<"\n"; } break; case 'M': clrscr(); for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<Matr[N-1-j]; cout<<"\n"; } break; case 'K': clrscr(); for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<Matr[N-1-i][N-1-j]; cout<<"\n"; } break; case 'P': clrscr(); for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<Matr[j][N-1-i]; cout<<"\n"; } break; } }while(choice!='0'); } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr0n4eG Опубликовано 12 февраля, 2009 Жалоба Поделиться Опубликовано 12 февраля, 2009 Я так понял что отвечает за это буквы К Н Р М но почему эти буквы єто стрелочки непойму (((( :bleh: Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Lion HC Опубликовано 12 февраля, 2009 Жалоба Поделиться Опубликовано 12 февраля, 2009 do{textcolor(YELLOW);textbackground(BLACK); Ети функции описаны в "iostream.h"? Лучше будет поставить их перед выполнением цикла. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 12 февраля, 2009 Жалоба Поделиться Опубликовано 12 февраля, 2009 Dr0n4eG: Я так понял что отвечает за это буквы К Н Р М но почему эти буквы єто стрелочки непойму (((( На самом деле это младшие байты скэн-кодов клавиш. Проще говоря, драйвер клавиатуры превращает коды специальных клавиш (сюда входят и стрелки) в коды двух следующих друг за другом символов - специального служебного символа, предупреждающего о том, что следующий за ним код буквы - вовсе не код буквы, и этого самого кода. Функция getch() читает оба кода как коды отдельных символов, поэтому я первый символ читаю и выкидываю, а второй сравниваю с кодом подходящего символа. Коды символов K, P и т.д. совпадают с этими кодами служебных клавиш чисто по случайному совпадению. У других служебных клавиш эти коды совпадают с кодами других букв. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr0n4eG Опубликовано 12 февраля, 2009 Жалоба Поделиться Опубликовано 12 февраля, 2009 Я на 36 странице написал: просто надо на завтро это програму поченить Тут с ещо 1 программой проблема она поидее должна сортировать матрицу методом быстрой сортировки но при компиляции пишит ошибку незнаю как убрать эту ошибку #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <iostream.h> #define ROWS 4 #define COLS 4 // ======================================== { printf ("\n"); for (int i=0; i<ROWS; i++) { for (int j=0; j<COLS; j++) { printf ("%5d", matrix [i*COLS+j]); } } //================================= void exchange_rows (int* row_1, int * row_2) { int j, I, c; for (j=0 j<COLS; j++) } c=row_2 [j]; row+2[j]=row_1 [j]; row_1[j]=c; } //====================================== //====================================== int main (void) { int matrix [ROWS][COLS]; int i, j; clrscr (); randomize (); for (i=0; i<ROWS; i++) { for (j=0; j<CALS; j++) { matrix [j]=random (11); } } printf ("********Sortirovanie matrici********\n\n"); textcolor (RED); cprintf ("Matrica do sortirovki: \n"); print_matrix (z matrix [0][0]); printf("/n"); //------------------------------------------------------- int k; textcolor (GREEN);cprintf (Vvedite skolko nado sortirovat matricy); scanf ("%d", &k); for (i=0; j<ROWS-i-1; j++) { if (matrix [j][0], matrix [j+1][0]) { exchange_rows (matrix [j]), matrix [j+1]); } } textcolor (RED); cprintf ("\n\n Otsortirovanaya matrica: /n"); print_matrix (& matrix[0][0]); //-------------------------------------------- getch (); return0; } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
сергей Xerjd Опубликовано 14 февраля, 2009 Жалоба Поделиться Опубликовано 14 февраля, 2009 Век не забуду! Нужна БД Access "Инструментальная кладовая Жене надо срочно (как обычно!), а я филолог и в Access'ах ни в рот конечностью!!! Если у кого подобие такого чуда есть, скиньте, пожалуйста. Техзадание. В кладовой несколько видов инструментов: измерительные, вспомогательные, слесарные и станочные. Ежедневная выдача инструментов рабочим Прием инструментов от рабочих, новых инструментов и инструментов после ремонта. Программа должна обеспечить: 1. Формирование отчетов о количестве инструментов, находящихся на хранении на произвольную дату; 2. Формирование отчетов о количестве инструментов, выданных за произвольный период времени с разделением по их типам и видам; 3. Формирование отчетов о количестве инструментов, получаемых за произвольный период времени из различных источников, описанных в программе; 4. Формирование отчетов о расходе инструментов за произвольный период времени на различные цели, описанные в программе; 5. Формирование отчетов о движении инструментов по различным направлениям с учетом их типов и видов. Если будут хотя бы половина от этого Уже огромное спасибо!!!!!! И если есть у кого, то слейте в 2003 акцессе (у препода, да и у меня 2003) Но буду благодарен и за 2007, 2008, 2009 :) i Уведомление: Artur88: Тема перемещена, что вы подразумеваете под 2008, 2009 ? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Students Опубликовано 15 февраля, 2009 Жалоба Поделиться Опубликовано 15 февраля, 2009 Составить функцию вычисления среднего арифметического элементов вектора. Используя ее, преобразовать квадратную матрицу следующим образом: диагональные элементы матрицы заменить средними арифметическими значениями элементов соответствующих строк. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.