Programma dev- utilizzo di string e bubble sort

di il
15 risposte

Programma dev- utilizzo di string e bubble sort

Ciao a tutti. Sto facendo un programma di informatica con il dev; come ogni volta prima penso alla possibile soluzione, poi comincio a scrivere le istruzioni, sperando che tutto funzioni. Questa volta però il codice mi sta dando seri problemi!
la consegna dell'esercizio è: posta una variabile a, permetti a vari utenti di inserire nome, cognome e un voto per 5 materie (mate, informatica, scienze, ita, arte). Il programma deve restituire la media (e dunque ci deve essere un controllore che controlli il valore di ciascuna materia, perchè se in una inseriamo il voto 0, allora la media si deve calcolare escudendo quella materia) e deve chiedere all'utente se si vuole mostrare la media in ordine per cognome o per media (e dunque chiedere anche se si vuole ordinare in ordine crescente o decrescente).
Questo è quello che ho scritto finora, e il dev non me lo compila. Per favore mettemi in considerazione.

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<math.h>
#include<time.h>
#include<string.h>
using namespace std;
main(){
int a=2;
string nome[a], cognome[a];
string italiano[a], matematica[a], informatica[a], scienze[a], arte[a], media[a];
char contatore;
char controllore=0;
for(int i=0; i<a; i++){

printf("\n Inserisci il nome %d ", i+1);
cin>>nome;
printf("\n Inserisci il cognome %d ", i+1);
cin>>cognome;
printf("\n Inserisci il voto di italiano: ");
cin>>italiano;
// controllore=italiano;
if(controllore==0){
contatore=0;
}else{
contatore=1;
controllore=0;
}
printf("\n Inserisci il voto di matematica: ");
cin>>matematica;
// controllore=matematica;
if(controllore==0){
contatore=contatore+0;
}else{
contatore=contatore+1;
controllore=0;
}
printf("\n Inserisci il voto di informatica: ");
cin>>informatica;
// controllore=informatica;
if(controllore==0){
contatore=contatore+0;
}else{
contatore=contatore+1;
controllore=0;
}
printf("\n Inserisci il voto di scienze: ");
cin>>scienze;
// controllore=scienze;
if(controllore==0){
contatore=contatore+0;
}else{
contatore=contatore+1;
controllore=0;
}
printf("\n Inserisci il voto di arte: ");
cin>>arte[i];
// controllore=arte[i];
if(controllore==0){
contatore=contatore+0;
}else{
contatore=contatore+1;
controllore=0;
}



}
for(i=0; i<a; i++){
media[i]=(italiano[i]+matematica[i]+informatica[i]+scienze[i]+arte[i])\contatore[i];
cout<<"\n La media di "<<i+1<<"e' "<<media[i];
}


printf("\n Vuoi ordinare per cognome o per media? 1 se per cognome, 2 per media ");
int scelta=0;
scanf("%d", &scelta);

int riga[a], indice, x, y, temp;
char testo[a], tempchar;

switch(scelta){
case 1:
//ordinamento per cognome

for(x=0; x<a-1; x++)
for(y=0; y<a-1; y++)
{
if (cognome[y]>cognome[y+1])
{
temp=cognome[y];
cognome[y]=cognome[y+1];
cognome[y+1]=temp;
tempchar=testo[y];
testo[y]=testo[y+1];
testo[y+1]=tempchar;
}
}
break;
case 2:
//ordinamento per media

for(x=0; x<a-1; x++)
for(y=0; y<a-1; y++)
{
if (media[y]>media[y+1])
{
temp=cognome[y];
media[y]=media[y+1];
media[y+1]=temp;
tempchar=testo[y];
testo[y]=testo[y+1];
testo[y+1]=tempchar;
}
}
break;
default:
printf("\n ?");


}//fine switch



}//int main




-------------------------------------------------------------------------------------------------------------------------------------------------------

15 Risposte

  • Re: Programma dev- utilizzo di string e bubble sort

    Usa i tag CODE per postare il codice sul forum o non si capisce nulla (come puoi vedere). Dai un'occhiata al Regolamento.

    Comunque "non te lo compila" con quali errori specifici? Dicceli, non farci provare.

    Che vuol dire
    per favore mettemi in considerazione.
    ??

    E poi, se i voti sono numerici e devi calcolare le medie, perché usi delle string?
  • Re: Programma dev- utilizzo di string e bubble sort

    Allora, inanzitutto utilizzo delle string perchè ci sono piu' utenti (in questo caso a=2, quindi ci sono 2 utenti), poi per "mettetemi in considerazione" intendo di aiutarmi, se potete, a risolvere questo problema.
    comunque gli errori sono:

    70 1 C:\Users\Win10\Desktop\file.cpp [Error] stray '\' in program
    17 6 C:\Users\Win10\Desktop\file.cpp [Error] no match for 'operator>>' in 'std::cin >> nome'
    19 6 C:\Users\Win10\Desktop\file.cpp [Error] no match for 'operator>>' in 'std::cin >> cognome'
    21 6 C:\Users\Win10\Desktop\file.cpp [Error] no match for 'operator>>' in 'std::cin >> italiano'
    30 6 C:\Users\Win10\Desktop\file.cpp [Error] no match for 'operator>>' in 'std::cin >> matematica'
    39 6 C:\Users\Win10\Desktop\file.cpp [Error] no match for 'operator>>' in 'std::cin >> informatica'
    48 6 C:\Users\Win10\Desktop\file.cpp [Error] no match for 'operator>>' in 'std::cin >> scienze'
    69 5 C:\Users\Win10\Desktop\file.cpp [Error] name lookup of 'i' changed for ISO 'for' scoping [-fpermissive]
    70 72 C:\Users\Win10\Desktop\file.cpp [Error] expected ';' before 'contatore'
    91 15 C:\Users\Win10\Desktop\file.cpp [Error] cannot convert 'std::string {aka std::basic_string<char>}' to 'int' in assignment
    108 15 C:\Users\Win10\Desktop\file.cpp [Error] cannot convert 'std::string {aka std::basic_string<char>}' to 'int' in assignment
  • Re: Programma dev- utilizzo di string e bubble sort

    Nome e cognome sono insiemi di stringhe, quando li inserisci devi sempre mettere l'indice.
    cin>>nome[i];
    Le materie sono dei voti, quindi devono essere numerici.
    Char si usa per i caratteri.
    Hai mancato qualche punto e virgola.

    Per curiosità, studi da autodidatta o stai seguendo un corso? Perché è un po' mischiato C e C++.
  • Re: Programma dev- utilizzo di string e bubble sort

    Sono una studentessa, comunque grazie mille. Proverò come mi hai consigliato tu.
  • Re: Programma dev- utilizzo di string e bubble sort

    Il [ i ] probabilmente non manca ma se non usa i tag CODE non si vede nel codice e scatta il corsivo.

    Avevo chiesto di correggere il post usando i tag CODE ma non è stato fatto.


    P.S. Ok per l'aiuto, solo che quella frase non aveva senso in italiano.
  • Re: Programma dev- utilizzo di string e bubble sort

    La divisione è / non \
    Il main deve avere int come tipo di ritorno
    i non l'hai dichiarata

    eccetera....
  • Re: Programma dev- utilizzo di string e bubble sort

    oregon ha scritto:


    Il [ i ] probabilmente non manca ma se non usa i tag CODE non si vede nel codice e scatta il corsivo.

    Avevo chiesto di correggere il post usando i tag CODE ma non è stato fatto.


    P.S. Ok per l'aiuto, solo che quella frase non aveva senso in italiano.
    L'ho dedotto da questo tipo di errore
    
    17 6 C:\Users\Win10\Desktop\file.cpp [Error] no match for 'operator>>' in 'std::cin >> nome'
    
    Comunque Sbreaks copia il codice nel tag CODE tale e quale a come l'hai scritto in dev, se no è impossibile capirlo del tutto.
  • Re: Programma dev- utilizzo di string e bubble sort

    Come faccio a mettere il tag code? Scusatemi ma mi sono iscritta al sito oggi
  • Re: Programma dev- utilizzo di string e bubble sort

    Leggi il Regolamento
  • Re: Programma dev- utilizzo di string e bubble sort

    Non te la prendere, io ripartirei da capo, un pezzo alla volta cercando di mettere il meno possibile.

    ho provato ad ipotizzare un inizio di soluzione, spero di non aver commesso troppi errori, in C sono un po arrugginito ( lo uso molto poco ultimamente )
    [CODE] #include<stdio.h> #include<string.h> #define MAX 2 main() { int numero=2, // Numero massimo da inserire c1, c2; // Contatori generici // Contatore voti per calcolare media int contatore; // Nomi delle materie char materie[5][15]={"Italiano","Matematica","Informatica","Scienze","Arte"}; // dati alunni char nome[MAX][100], cognome[MAX][100]; // Voti e medie // voti[0]=Italiano // Voti[1]=Matematica // Voti[2]=Informatica // Voti[3]=Scienze // Voti[4]=Arte int voti[MAX][5],media[MAX]; for(c1=0; c1<numero; c1++) { printf("\n Inserisci il nome %d ", c1+1); scanf("%s,",nome[c1]); printf("\n Inserisci il cognome %d ", c1+1); scanf("%s,",cognome[c1]); media[c1]=0; contatore=0; for (c2=0;c2<5;c2++) { printf("\n Inserisci il voto di %s: ",materie[c2]); scanf("%d,",&voti[c1][c2]); if (voti[c1][c2]) { media[c1]+=voti[c1][c2]; contatore++; } } media[c1]=media[c1]/contatore; } for (c1=0;c1<numero;c1++) { printf("La media di %s : %d\n",nome[c1],media[c1]); } return 0; }
  • Re: Programma dev- utilizzo di string e bubble sort

    La media non può essere un int
  • Re: Programma dev- utilizzo di string e bubble sort

    Allora, ecco il codice che ho scritto finora:
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<iostream>
    #include<math.h>
    #include<time.h>
    #include<string.h>
    using namespace std;
    main(){
    	int a=2;
    	string nome[a], cognome[a];
    	string italiano[a], matematica[a], informatica[a], scienze[a], arte[a], media[a];
    	char contatore;
    	float controllore=0;
    	for(int i=0; i<a; i++){
    		
    		printf("\n Inserisci il nome %d ", i+1);
    		cin>>nome[i];
    		printf("\n Inserisci il cognome %d ", i+1);
    		cin>>cognome[i];
    		printf("\n Inserisci il voto di italiano: ");
    		cin>>italiano[i];
    		controllore=italiano[i];
    		if(controllore==0){
    			contatore=0;
    		}else{
    			contatore=1;
    			controllore=0;
    		}
    		printf("\n Inserisci il voto di matematica: ");
    		cin>>matematica[i];
    		controllore=matematica[i];
    		if(controllore==0){
    			contatore=contatore+0;
    		}else{
    			contatore=contatore+1;
    			controllore=0;
    		}
    		printf("\n Inserisci il voto di informatica: ");
    		cin>>informatica[i];
    		controllore=informatica[i];
    		if(controllore==0){
    			contatore=contatore+0;
    		}else{
    			contatore=contatore+1;
    			controllore=0;
    		}
    		printf("\n Inserisci il voto di scienze: ");
    		cin>>scienze[i];
    		controllore=scienze[i];
    		if(controllore==0){
    			contatore=contatore+0;
    		}else{
    			contatore=contatore+1;
    			controllore=0;
    		}
    		printf("\n Inserisci il voto di arte: ");
    		cin>>arte[i];
    		controllore=arte[i];
    		if(controllore==0){
    			contatore=contatore+0;
    		}else{
    			contatore=contatore+1;
    			controllore=0;
    		}
    	
    		
    		
    	}
    	for(i=0; i<a; i++){
    		media[i]=(italiano[i]+matematica[i]+informatica[i]+scienze[i]+arte[i])\contatore[i];
    		cout<<"\n La media di "<<i+1<<"e' "<<media[i];
    	}
    	
    	
    	printf("\n Vuoi ordinare per cognome o per media? 1 se per cognome, 2 per media  ");
    	int scelta=0;
    	scanf("%d", &scelta);
    	
    	int riga[a], indice, x, y, temp;
    	char testo[a], tempchar;
    	
    	switch(scelta){
    		case 1:
    			//ordinamento per cognome
    	
    	for(x=0; x<a-1; x++)
    	for(y=0; y<a-1; y++)
    {
    	if (cognome[y]>cognome[y+1])
    	{
    		temp=cognome[y];
    		cognome[y]=cognome[y+1];
    		cognome[y+1]=temp;
    		tempchar=testo[y];
    		testo[y]=testo[y+1];
    		testo[y+1]=tempchar;
    	}
    }
    	break;
    	case 2:
    		//ordinamento per media
    	
    	for(x=0; x<a-1; x++)
    	for(y=0; y<a-1; y++)
    {
    	if (media[y]>media[y+1])
    	{
    		temp=cognome[y];
    		media[y]=media[y+1];
    		media[y+1]=temp;
    		tempchar=testo[y];
    		testo[y]=testo[y+1];
    		testo[y+1]=tempchar;
    	}
    }
    	break;
    	default:
    		printf("\n ?");
    		
    		
    	}//fine switch
    
    
    
    }//int main
    
  • Re: Programma dev- utilizzo di string e bubble sort

    E quindi?

    Hai visto l'esempio che ti è stato fornito?
  • Re: Programma dev- utilizzo di string e bubble sort

    Ho cambiato il codice.... ma l'ordine crescente e decrescente mi danno valori sbagliati..:
    
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<math.h>
    #include<time.h>
    
    #define MAX 2
    using namespace std;
    main()								//non si possono inserire voti con parte decimale
    									//non ordina per nome o per media
    {
    	int temp;
     int numero=3, // Numero degli utenti da inserire
         c1, c2; // Contatori generici
    
     // Contatore voti per calcolare media
     //se un voto non è presente quella materia non la prende in considerazione
     int contatore;
    
    
     // Nomi delle materie
     char materie[5][15]={"Italiano","Matematica","Informatica","Scienze","Arte"};
    
     // dati alunni
     char nome[MAX][100], cognome[MAX][100];
    
     // Voti e medie
     // voti[0]=Italiano
     // Voti[1]=Matematica
     // Voti[2]=Informatica
     // Voti[3]=Scienze
     // Voti[4]=Arte
     int voti[MAX][5], media[MAX];
    
     for(c1=0; c1<numero; c1++)
      {
    
       printf("\n	 Inserisci il nome %d ", c1+1);
       scanf("%s,",nome[c1]);
       printf("\n	 Inserisci il cognome %d ", c1+1);
       scanf("%s,",cognome[c1]);
    
       media[c1]=0;
       contatore=0;
       for (c2=0;c2<5;c2++)
       {
        printf("\n Inserisci il voto di %s: ", materie[c2]);
        scanf("%d,",&voti[c1][c2]);
        if (voti[c1][c2])
         {
          media[c1]+=voti[c1][c2];
          contatore++;
         }
       }
       media[c1]=media[c1]/contatore;
      }
      printf("\n");
      
      /*
      //NON STAMPA IL VALORE CORRETTO
      	printf("\n\nStampa del vettore con ordinamento crescente");
    	for(c1=0; c1<numero; c1++){
    		printf("\nLa media dell'utente %d %s %s vale %d", c1+1, nome[c1], cognome[c1], media[c1]);
    	}
    	
    	for (c1=0; c1<numero; c1++){
    		for(int j=0; j<numero-c1-1; j++){
    			if(media[j]<media[j+1]){
    				temp=media[j+1];
    				media[j+1]=media[j];
    				media[j]=temp;
    			}
    		}
    	}
    	
    	printf("\n\nStampa del vettore con ordinamento decrescente");
    	for(c1=0; c1<numero; c1++){
    	printf("\nLa media dell'utente %d %s %s del vettore vale %d", c1+1, nome[c1], cognome[c1], media[c1]);
    	}
      
      */
      
      
    //media
      for (c1=0;c1<numero;c1++)
       {
        printf("		La media di %s %s : %d\n",nome[c1], cognome[c1], media[c1]);
       }
    //media
     return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
15 risposte